2010-05-07 7 views
5

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

5

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 
+0

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

1

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

Problemi correlati