Come faccio a capire la famiglia di caratteri e la dimensione del carattere delle parole in un documento pdf? Stiamo effettivamente cercando di generare un documento pdf utilizzando iText, ma non siamo sicuri di come trovare la famiglia di font e la dimensione del font del documento originale che deve essere generato. le proprietà del documento non sembrano contenere queste informazioniCome faccio a capire la famiglia di caratteri e la dimensione del carattere delle parole in un documento pdf?
risposta
I caratteri sono memorizzati nel catalogo (suppongo in un sottocatalogo di tipo carattere). Se apri un pdf come file di testo, dovresti riuscire a trovare le voci del catalogo (iniziano e terminano con "< <" e ">>" rispettivamente
Su un semplice file pdf, ho trovato il seguente:
<</Type/Font/BaseFont/Helvetica-Bold/Subtype/Type1/Encoding/WinAnsiEncoding>>
ricerca in tal modo per il prefisso dovrebbe aiutare (in alcuni file pdf, ci sono spazi tra le commponents ma '/ tipo/font' dovrebbe essere ok).
naturalmente questo è un manuale processo, mentre probabilmente preferiresti uno automatico.
In un'altra nota, a volte usiamo identifont o what the font per trovare caratteri non comuni che ci danno problemi (logo font).
riguarda Guillaume
Edit: il seguente codice troverà tutte carattere nelle pagine. Per essere brevi, si cerca il dizionario di ogni pagina per il subdictionnary "ressource" e quindi il "font" subdictionnary. Ogni voce in seguito è un dizionario di font, che descrive un font.
PdfReader reader = new PdfReader(
new FileInputStream(new File("file.pdf")));
int nbmax = reader.getNumberOfPages();
System.out.println("nb pages " + nbmax);
for (int i = 1; i <= nbmax; i++) {
System.out.println("----------------------------------------");
System.out.println("Page " + i);
PdfDictionary dico = reader.getPageN(i);
PdfDictionary ressource = dico.getAsDict(PdfName.RESOURCES);
PdfDictionary font = ressource.getAsDict(PdfName.FONT);
// we got the page fonts
Set keys = font.getKeys();
Iterator it = keys.iterator();
while (it.hasNext()) {
PdfName name = (PdfName) it.next();
PdfDictionary fontdict = font.getAsDict(name);
PdfObject typeFont = fontdict.getDirectObject(PdfName.SUBTYPE);
PdfObject baseFont = fontdict.getDirectObject(PdfName.BASEFONT);
System.out.println(baseFont.toString());
}
}
Il nome ("nome" variabile nel codice seguente) è quello che viene utilizzato nel testo per cambiare il font. Nel PDF, dovrai trovarlo accanto a un testo. Il seguente numero è la dimensione. Qui per esempio, è la dimensione 12. (mi spiace, ancora nessun codice per questa parte).
BT
/F13 12 Tf
288 720 Td
the text to find Tj
ET
A seconda del formato PDF, se non è stato delineato si può essere in grado di aprirlo in Adobe Illustrator, fare doppio clic sul testo e selezionare una parte per vedere che è di carattere familiare, dimensioni, ecc
Se il testo è delineato, utilizzare uno di quegli strumenti online che PATRY suggerisce di trovare il carattere.
Buona fortuna
Se si dispone di Adobe Acrobat è possibile visualizzare i caratteri all'interno ed esaminare gli oggetti e flussi di testo. Ho scritto un post su questo post a http://pdf.jpedal.org/java-pdf-blog/bid/10479/Viewing-PDF-objects
Guardando un PDF qui e vedo sempre/TT1 1 Tf per un PDF di solo testo abbastanza semplice, ma il font è un po 'più grande della dimensione 1. Sto indovinando devi anche combinare le trasformazioni che portano a quel punto, ma non ho trovato un buon modo per farlo, a meno di implementare un renderer. – Trejkaz