Guia
Quines confirmacions de reserva en PDF llegeix Kokai i com
Kokai llegeix al mateix dispositiu, amb pdf.js i sense IA ni servidor, el text de les 6 primeres pàgines d’un PDF de reserva de fins a 20 MB. Reconeix 65 marques i 8 classes de reserva (allotjament, vol, tren, autobús, vaixell, activitat, cotxe i assegurança), i busca el localitzador, les dates i hores, el titular, el preu i la cancel·lació gratuïta per les seves etiquetes en set idiomes. Només omple el que és buit i, si és un allotjament, afegeix les nits al viatge; no llegeix fotos ni PDF escanejats.
En poques paraules
- On es llegeix
- Al teu dispositiu, amb pdf.js de Mozilla. Sense IA i sense enviar el fitxer a cap servidor.
- Quina part del PDF
- El text de les 6 primeres pàgines, en fitxers de fins a 20 MB.
- Classes de reserva
- 8: allotjament, vol, tren, autobús, vaixell, activitat, cotxe de lloguer i assegurança de viatge.
- Marques reconegudes
- 65, de Booking.com i Airbnb a Ryanair, Renfe, FlixBus, GetYourGuide o Europcar.
- Idiomes de les etiquetes
- Castellà, anglès, francès, italià, portuguès, català i alemany.
- Monedes
- 37 codis ISO 4217 i 8 símbols (€, £, $, US$, ¥, R$, C$, A$).
- El que no llegeix
- Fotos i PDF escanejats (no tenen text) i PDF protegits amb contrasenya.
- Única sortida a la xarxa
- L’adreça d’un allotjament que no és al teu mapa, cap a Nominatim d’OpenStreetMap, per situar-lo.
Com funciona: text, no imatge
Una confirmació de reserva en PDF gairebé sempre porta text de veritat a dins: el que pots seleccionar i copiar. Kokai el treu amb pdf.js, la biblioteca de Mozilla (llicència Apache-2.0) que fa servir Firefox per mostrar els PDF, i només la carrega quan afegeixes un PDF. Tot passa al dispositiu:
- Si el fitxer passa de 20 MB, es desa sense llegir.
- pdf.js treu el text de les 6 primeres pàgines: les confirmacions diuen el que és important al començament, i vint pàgines de condicions no hi afegeixen res.
- Kokai reconstrueix les línies: pdf.js dona trossos de text amb la seva posició, i una línia s’acaba quan el tros següent baixa més de mitja alçada de lletra.
- El text es passa a minúscules i sense accents per buscar etiquetes («Número de confirmación» i «numero de confirmacion» són el mateix), però el que es troba es retalla de l’original, i així el localitzador surt amb les seves majúscules.
- Es decideix què és i de qui és, i es busquen les dades per les seves etiquetes. No hi ha plantilles per proveïdor, que canvien cada pocs mesos.
- Si no es reconeix la classe i surten menys de dues dades, es dona per no llegit: «No he encontrado los datos de una reserva en el PDF. Rellénalos a mano.» («No he trobat les dades d’una reserva al PDF. Omple-les a mà.»)
No hi ha reconeixement de lletres en imatges (OCR). Una foto del bitllet, una captura de pantalla o un PDF escanejat es desen i s’obren sense connexió, però no es llegeixen. Un PDF protegit amb contrasenya, tampoc.
On es llegeix un PDF a l’app
| On | Què passa |
|---|---|
| Documents del viatge → «Añadir documento» («Afegir document») | En triar el fitxer es llegeix el primer PDF. El tipus i el títol es proposen sols, llevat que ja els hagis tocat. En prémer «Guardar» («Desar») s’apliquen el localitzador, les dates, el titular i les etiquetes. |
| Fitxa d’un document → «Añadir» («Afegir») | Es llegeix el PDF afegit i s’omple el que sigui buit. La fitxa diu què ha omplert i demana «Revisa que esté bien.» («Revisa que estigui bé.») |
| Allotjament → «Desde el PDF de la reserva» («Des del PDF de la reserva») | Crea el document, el llegeix i, si és un allotjament amb dates, n’afegeix les nits. Si és una altra cosa, el deixa a Documents amb el seu tipus. |
| Cartera | No es llegeix: la cartera desa passaport, DNI o assegurança anual, no reserves. |
A Documents, mentre llegeix, l’app diu «Leyendo el PDF en este dispositivo…» («Llegint el PDF en aquest dispositiu…»); a Allotjament, «Leyendo el PDF…». El que ha entès surt en una línia que comença per «Leído en este dispositivo:» («Llegit en aquest dispositiu:»). Més sobre els documents a Documents de viatge sense connexió.
Les 8 classes de reserva
Cada classe decideix el tipus de document, l’etiqueta que s’hi posa i quines etiquetes es busquen per a les dates. Per reconèixer-la compten paraules típiques, cadascuna una sola vegada encara que es repeteixi:
| Classe | Tipus de document | Etiqueta | Paraules que compten (exemples) |
|---|---|---|---|
| Allotjament | Reserva | «Alojamiento» («Allotjament») | check-in, check-out, «3 noches» (nights, nuits, notti, noites, nits, Nächte), habitación, huésped, hotel, hostal, apartamento, anfitrión (8 grups) |
| Vol | Bitllet | «Vuelo» («Vol») | boarding o embarque, gate, asiento o seat, vuelo o flight, aeropuerto, equipaje, «Terminal 2» (7 grups) |
| Tren | Bitllet | «Tren» | tren, train o Zug; estación, stazione o Bahnhof; «coche 5», vagón, carriage; andén, platform, quai, binario, Gleis (4 grups) |
| Autobús | Bitllet | «Autobús» | autobús, bus, autocarro; estación de autobuses; dársena (3 grups) |
| Vaixell | Bitllet | «Barco» («Vaixell») | ferry, barco, naviera; camarote o cabin; «puerto de»; vehículo embarcado (4 grups) |
| Activitat | Entrada | «Actividad» («Activitat») | entradas o tickets; tour, visita guiada, excursión; voucher, bono, código QR; punto de encuentro (4 grups) |
| Cotxe | Cotxe i conducció | «Coche de alquiler» («Cotxe de lloguer») | recogida o pick-up; devolución o drop-off; vehículo; alquiler o rental; conductor o driver; fianza, franquicia o deposit (6 grups) |
| Assegurança | Assegurança | «Seguro de viaje» («Assegurança de viatge») | póliza o policy; asegurado o insured; cobertura o coverage; seguro de viaje o travel insurance (4 grups) |
Les 65 marques que reconeix
Una marca reconeguda posa la seva etiqueta al document («Booking.com», «Renfe») i pesa molt a l’hora de decidir la classe. Si la teva no hi és, la reserva es pot llegir igualment per les seves paraules i les seves etiquetes: només hi faltarà l’etiqueta del proveïdor.
| Classe | Marques | Quantes |
|---|---|---|
| Allotjament | Booking.com, Airbnb, Expedia, Hotels.com, Vrbo, Agoda, Trip.com, Hostelworld, Marriott, Hilton, Accor, Meliá, NH Hotels, Paradores | 14 |
| Vol | Ryanair, Vueling, Iberia, Air Europa, easyJet, TAP Air Portugal, Volotea, Binter, Lufthansa, Air France, KLM, British Airways, Wizz Air, Transavia, ITA Airways | 15 |
| Tren | Renfe, Iryo, Ouigo, SNCF, Trenitalia, Italo, Deutsche Bahn, Eurostar, Comboios de Portugal | 9 |
| Autobús | FlixBus, ALSA, BlaBlaCar | 3 |
| Vaixell | Baleària, Trasmed, Naviera Armas | 3 |
| Activitat | GetYourGuide, Tiqets, Civitatis, Viator, Klook, Musement, Ticketmaster | 7 |
| Cotxe | Hertz, Avis, Europcar, Sixt, Enterprise, Goldcar, Rentalcars.com, Discover Cars, Cicar | 9 |
| Assegurança | IATI Seguros, Heymondo, InterMundial, Mondial Assistance, Allianz Travel | 5 |
Algunes marques només compten amb la forma completa, perquè el seu nom sol és una paraula corrent: «Booking.com» o «Booking B.V.» (booking vol dir «reserva» en anglès), «Italo Treno», «Enterprise Rent-A-Car», «Avis Budget» o «alsa.es». El nom sol («booking», «alsa», «avis») és una menció feble.
Com decideix què és i de qui és
La classe i el proveïdor surten d’un recompte de punts, el mateix per a tots els PDF:
| Què suma | Punts |
|---|---|
| Cada vegada que surt el nom complet d’una marca (en compten fins a 3) | 5 |
| Cada menció feble a més del nom complet (fins a 3) | 1 |
| La marca al nom del fitxer («Airbnb_reserva.pdf») | 5 |
| Cada grup diferent de paraules típiques de la classe | 2 |
- La puntuació d’una classe és la de les seves paraules més la de la seva millor marca.
- Guanya la classe amb més punts, i només si en té almenys 4: n’hi ha prou amb dues paraules típiques (un hotel sense plataforma es reconeix com a allotjament), però no amb un «hotel» sol.
- El proveïdor s’indica si la seva marca, d’aquella classe, té almenys 5 punts: hi ha de sortir el nom complet, o l’ha de portar el nom del fitxer. Tres mencions febles sumen 3 i no n’hi ha prou.
Quines dades treu
| Dada | Com la troba | On acaba |
|---|---|---|
| Localitzador | El que va després d’una etiqueta de localitzador: de 4 a 25 lletres, xifres, punts o guions, sense minúscules i amb alguna xifra, o de 5 a 8 majúscules (un PNR). | «Referencia o localizador» («Referència o localitzador») |
| Titular | Una línia que comença per una etiqueta de titular. Només lletres, espais, punts, guions i apòstrofs, de 2 a 60 caràcters. | «A nombre de» («A nom de») |
| Data i hora d’inici | La primera data dins dels 90 caràcters que segueixen l’etiqueta d’entrada, recollida, anada o inici de la classe. | «Desde» («Des de»), i a l’estada, l’hora d’entrada |
| Data i hora de final | Igual, amb l’etiqueta de sortida, devolució, tornada o final. Ha de ser posterior a l’inici. | «Hasta» («Fins a»), i a l’estada, l’hora de sortida |
| Preu i moneda | L’import dins dels 45 caràcters que segueixen «Precio total» i les seves variants; si no n’hi ha, després de «Total»; i si no, després de «Precio». | L’estada de l’allotjament |
| Cancel·lació gratuïta | La primera data dins dels 110 caràcters que segueixen «Cancelación gratuita» o les seves variants. | L’estada, amb els seus recordatoris |
| No reemborsable | L’expressió en qualsevol lloc, si no hi ha cancel·lació gratuïta. | Les notes: «No reembolsable.» |
| Nom de l’allotjament | Després de «Nombre del alojamiento» i variants; si no, la línia de sobre l’adreça (així ho posa Booking.com); si no, la primera línia de diverses paraules i sense xifres de les 10 primeres. | El títol i el lloc del mapa |
| Adreça | Després de «Dirección» i variants; si no, una línia de les 60 primeres amb almenys dues comes, alguna xifra i sense dates, preus ni enllaços. | El lloc del mapa |
| Telèfon | Després de «Teléfono», «Phone», «Tel» o «Telefon». | El lloc del mapa |
| Número de vol | Dos caràcters de la companyia aèria i 3 o 4 xifres («FR 1234»). | El títol: «Vuelo FR1234» |
El títol es compon segons la classe: el nom de l’hotel (o «Alojamiento de Booking.com» si no hi surt), «Vuelo» amb el seu número, o la classe i el proveïdor («Tren · Renfe»).
Les etiquetes que reconeix, idioma per idioma
Es busquen sense distingir majúscules ni accents. Un guió vol dir que aquell idioma no té una forma pròpia a la llista (sovint coincideix amb un altre: el català «número de reserva» és la forma castellana).
| Dada | Castellà | Anglès | Francès | Italià | Portuguès | Català | Alemany |
|---|---|---|---|---|---|---|---|
| Entrada (allotjament) | check-in, entrada, llegada | check-in, arrival | arrivée | arrivo | chegada | entrada | Anreise |
| Sortida (allotjament) | check-out, salida | check-out, departure | départ | partenza | saída | sortida | Abreise |
| Anada (bitllets) | salida, ida, fecha, fecha de viaje, de vuelo o de salida | departure, outbound, date | départ | partenza, data | data | data | — |
| Tornada (bitllets) | vuelta, regreso | return | retour | ritorno | — | tornada | — |
| Recollida (cotxe) | recogida | pick-up | prise en charge | ritiro | retirada | — | Abholung |
| Devolució (cotxe) | devolución, entrega | drop-off, return | restitution | riconsegna | entrega | — | Rückgabe |
| Inici i final (assegurança) | desde, inicio, fecha de efecto / hasta, fin, vencimiento | from, start date, effective / to, end date, valid until, expiry | — | — | — | — | — |
| Dia (activitat) | fecha, día, válido para | date, day, valid on, valid for | — | data | data | data | — |
| Localitzador | localizador, referencia, número o código de reserva, número de confirmación, número de pedido | booking number, booking reference, confirmation number, confirmation code, reservation number, order number, PNR, record locator | numéro de réservation, code de réservation | codice prenotazione | número da reserva, código da reserva | — | Reservierungsnummer, Buchungsnummer |
| Preu total | precio total, importe total, total a pagar, total pagado | total price, total amount, amount paid, grand total | montant total, prix total | prezzo totale | preço total | preu total | Gesamtpreis, Gesamtbetrag |
| Cancel·lació gratuïta | cancelación gratuita, cancelar gratis, cancelar sin coste, sin cargo o sin gastos | free cancellation, cancel for free, cancel free of charge, cancel without charge | annulation gratuite, annuler gratuitement | cancellazione gratuita | cancelamento gratuito | cancel·lació gratuïta | kostenlose Stornierung, kostenlos stornieren |
| No reemborsable | no reembolsable | non-refundable | non remboursable | non rimborsabile | não reembolsável | no reemborsable | nicht erstattungsfähig |
| Adreça | dirección, dirección del alojamiento, ubicación | address, property address | adresse | indirizzo | morada, endereço | adreça | Anschrift |
| Nom de l’allotjament | nombre del alojamiento, alojamiento, establecimiento, anuncio, hotel | property name, hotel name, property, accommodation, listing | hébergement, établissement | struttura | alojamento | allotjament | Unterkunft |
| Titular | nombre del cliente, del huésped o del titular, huésped principal, reservado por, pasajero, conductor principal, asegurado | guest name, lead guest, booked by, passenger, main driver, insured | nom du client | — | nome do hóspede | nom del client | — |
A més, el preu es busca en últim lloc després de la paraula sola en qualsevol dels set idiomes: precio, price, importe, amount, montant, prix, prezzo, preço, preu.
Dates i hores
| Format | Exemples que llegeix | Regla |
|---|---|---|
| ISO 8601 | 2026-10-09 | Any, mes i dia. |
| Numèric | 09/10/2026, 9.10.26, 09-10-2026 | Dia i mes, com a gairebé tot el món. Mes i dia només si no pot ser cap altra cosa: 10/25/2026 és el 25 d’octubre. |
| Amb paraules | 9 de octubre de 2026, October 9, 2026, 9. Oktober 2026, 9 d'octubre de 2026, vie, 9 oct | Mesos i les seves abreviatures en els set idiomes, amb ordinals («3rd», «1er», «1º»). |
| Sense any | vie, 9 oct | Es tria l’any (l’anterior, el mateix o el següent) que deixa la data més a prop de l’inici del viatge, o d’avui si el viatge encara no té dates. |
- Les abreviatures que també són paraules (out, des, set, gen, mag, lug, ott, mai, mar) només compten com a mes si porten l’any al darrere: «3 out of 5 guests» no és el 3 d’octubre.
- En una taula amb «Check-in Check-out» en una línia i les dues dates a sota, la primera data després de «Check-out» és la d’entrada, i se la salta.
- Si no hi ha etiqueta, es fa servir la primera data que no vagi després de «fecha de reserva», «emitido», «booked on», «fecha de nacimiento» o «caduca». En una assegurança, no s’endevina.
- Un allotjament amb «3 noches» i sense data de sortida llegible: la sortida es calcula sumant les nits a l’entrada.
- Una data de final a més de 62 dies de l’inici es descarta: és una altra data que s’ha colat.
- Hores: 15:00, 15h00, 3:00 PM o 3 PM. A l’hora d’inici guanya la que va amb «desde», «from» o «a partir de»; a la sortida d’un allotjament, l’última amb «hasta», «until» o «before»: «de 07:00 a 11:00» és sortida fins a les 11:00.
Preu i moneda
La moneda surt del símbol o del codi que hi ha al costat de l’import, davant o darrere («€ 390,00», «390,00 EUR»), o del codi entre parèntesis després de «Total (EUR)». Reconeix 37 codis ISO 4217:
EUR USD GBP JPY CHF CAD AUD MXN ARS COP CLP PEN BRL DKK SEK NOK PLN CZK HUF
RON BGN TRY MAD THB CNY HKD SGD NZD ZAR INR KRW ISK IDR VND EGP AED ILS| Símbol | Es llegeix com |
|---|---|
| € | EUR |
| £ | GBP |
| $ i US$ | USD |
| ¥ | JPY |
| R$ | BRL |
| C$ | CAD |
| A$ | AUD |
Els separadors s’interpreten com a cada país: 1.234,56 i 1,234.56 són el mateix, 1 234,56 també, «1.234» són mil dos-cents trenta-quatre i «12,50» són dotze amb cinquanta.
Un «$» sol es llegeix sempre com a dòlar dels Estats Units, i un «¥», com a ien. Si reserves en pesos mexicans o en iuans i el PDF només posa el símbol, corregeix la moneda a l’estada. Si no hi ha moneda, l’estada agafa la del viatge.
Què fa amb el que llegeix
La regla és una de sola: mai no trepitja el que algú ha escrit.
- En un document nou, si canvies el tipus o el títol mentre es llegeix, es queda el teu. Si canvies el tipus que s’ha llegit (una «Reserva» que passes a «Entrada»), no s’hi posen les etiquetes de la lectura.
- En un document que ja existeix, només s’omplen el localitzador, el titular i les dates si són buits, i el tipus només si era «Otro» («Altre»). Si el tipus llegit és diferent, la fitxa ofereix «Cambiar el tipo a…» («Canviar el tipus a…») sense canviar-lo.
- S’hi afegeixen dues etiquetes, la del proveïdor i la de la classe («Booking.com» i «Alojamiento»), sense treure les que ja tenia.
Si és un allotjament amb entrada i sortida, i el document és una reserva, s’associa a una estada, les nits d’aquell hotel en el viatge:
- Si ja hi ha una estada enllaçada a aquest document, es completa (hores, preu, cancel·lació) sense tocar el que ja tingui.
- Si no, es busca l’hotel: el lloc relacionat del document o un allotjament del mapa amb el mateix nom (almenys el 60 % de les paraules en comú, sense comptar «hotel», «apartamento», «de» o «the»).
- Si aquell hotel té una opció sense document enllaçat que coincideix amb aquestes nits, passa a reservada, amb el document enllaçat i les dates del PDF.
- Si l’hotel no és al mapa, la seva adreça va a Nominatim (el cercador d’OpenStreetMap), o el seu nom dins de la zona de la destinació. Si ja tens un allotjament a menys de 150 m del que s’ha trobat, és aquest; si no, es crea el lloc amb la seva adreça i el seu telèfon, i se’n busquen les fotos.
- Si no hi havia cap opció, es crea una estada reservada nova, en aquell lloc si s’ha trobat. Sense xarxa, o si Nominatim no troba res, queda sense situar, amb el seu nom, i se situa després a mà.
Amb l’estada arriben els recordatoris de l’allotjament: cancel·lar gratis, «Mañana duermes en…» («Demà dorms a…») i «Hoy dejas…» («Avui deixes…»); la taula completa és a Documents. Si un document de reserva té dates però no s’ha associat, la seva fitxa ofereix «Es un alojamiento: añadir estas noches» («És un allotjament: afegir aquestes nits»).
Nominatim només rep el text de l’adreça (o el nom de l’hotel i la zona), amb un mínim d’1,1 segons entre peticions, com demana la seva política d’ús. Mai el localitzador, el titular ni el preu.
Exemple: una confirmació de Booking.com per a Lisboa
Limitacions
- Fotos i escanejats, no. Només es llegeix text; no hi ha OCR.
- Provat amb textos d’exemple, no amb confirmacions reals de cada proveïdor. Les proves imiten el que pdf.js treu de Booking.com (en castellà i en anglès, amb taula), Airbnb (en tots dos idiomes), un hotel sense plataforma, Ryanair, Renfe i Europcar, i un PDF generat es llegeix de principi a fi. Amb cadascuna de les 65 marques, no s’ha provat.
- Un PDF amb el text desordenat (columnes que pdf.js lliura en un altre ordre) pot deixar les etiquetes lluny dels seus valors, i la dada no surt.
- Només un bitllet per document. Un PDF d’anada i tornada dona la data d’anada i la de tornada, però no dos documents, ni escales.
- Només el primer PDF quan tries diversos fitxers alhora en crear un document.
- Tot el que es llegeix es pot corregir. Mira sempre la fitxa: l’app t’ho demana amb «Revisa que esté bien.»
Si la teva reserva no s’ha llegit bé
Corregeix les dades a mà a la fitxa: es desen soles i la lectura no les torna a trepitjar. I si vols que la versió següent la llegeixi millor, explica-ho al formulari de contacte amb el motiu «Una reserva en PDF que no s’ha llegit bé». Ajuda dir:
- El proveïdor i l’idioma de la confirmació.
- Quina dada ha fallat (la data de sortida, el preu, el nom de l’hotel) i què posava el PDF al costat d’aquesta dada, amb l’etiqueta tal com era.
- Si el PDF és un correu imprès, una descàrrega del web del proveïdor o una targeta d’embarcament.
No enganxis localitzadors, noms, adreces ni números de targeta reals: canvia’ls per dades inventades abans d’enviar-ho («XXXX1234», «Ana Ejemplo»). El formulari no admet adjunts, i no cal el PDF: n’hi ha prou amb les línies que fallen.
Preguntes freqüents
Es puja el PDF a algun servidor per llegir-lo?
No. Es llegeix al teu dispositiu amb pdf.js, sense IA i sense connexió. L’única cosa que pot sortir és l’adreça d’un allotjament que no és al teu mapa, cap a Nominatim d’OpenStreetMap, per situar-lo; el fitxer, el localitzador i el titular no surten.
El meu proveïdor no és entre les 65 marques. Es llegeix igualment?
Pot ser. La classe també es reconeix per les seves paraules (n’hi ha prou amb dos grups, com «check-in» i «habitación»), i les dades es busquen per les seves etiquetes, no pel proveïdor. El que hi falta és l’etiqueta amb el nom de la marca.
Llegeix bitllets d’avió i de tren, o només hotels?
Les 8 classes: allotjament, vol, tren, autobús, vaixell, activitat, cotxe i assegurança. Només els allotjaments creen nits al viatge; un bitllet es queda com a document amb la data, l’hora, el localitzador i, si té número de vol, el títol «Vuelo FR1234».
Per què ha posat un any equivocat?
Si la confirmació no escriu l’any («vie, 9 oct»), es tria el que deixa la data més a prop de l’inici del viatge, o d’avui si el viatge no té dates. Posa les dates del viatge abans d’afegir-hi les reserves, o corregeix la data a la fitxa.
Puc llegir un PDF protegit amb contrasenya?
No. Es desa igualment i s’obre al visor si el teu dispositiu ho permet, però les dades s’omplen a mà.
Fonts i referències
La documentació original del que se cita aquí, consultada en la data de revisió d’aquesta pàgina.
- PDF.js Mozilla
- Repositori de PDF.js (codi i llicència Apache-2.0) Mozilla, a GitHub
- ISO 4217, codis de moneda (agència de manteniment) SIX Group
- Nominatim Usage Policy OpenStreetMap Foundation
- Nominatim: Search API Nominatim
Continua llegint
- DocumentsCom desa Kokai bitllets, reserves i passaport amb el PDF o la foto per obrir-los sense xarxa, què t’avisa abans que caduquin i què no surt del dispositiu.
- AllotjamentCom Kokai organitza l’allotjament per nits: reserves, opcions per comparar, nits sense cobrir, reserves dobles, avisos de cancel·lació i l’adreça sense xarxa.
- Cercar allotjamentCom cercar hotel amb dates a Booking.com, Airbnb, Expedia, Vrbo, Agoda, Trip.com, Kayak i Google Hoteles amb un enllaç: destinació, dates, viatgers i exemples.
- GlossariQuè és una geotanca, una estada, un localitzador, la histèresi del GPS o un PMTiles: 35 termes de viatges i mapes, amb les xifres que fa servir Kokai.
Aquesta pàgina en Markdown, per llegir-la amb altres programes