如何计算pdf文档中字体的字体系列和字体大小?

Sam*_*Sam 8 pdf fonts adobe itext

如何计算pdf文档中字体的字体系列和字体大小?我们实际上是尝试使用iText以编程方式生成pdf文档,但我们不确定如何找出需要生成的原始文档的字体系列和字体大小.文档属性似乎不包含此信息

PAT*_*ume 7

字体存储在目录中(我想在字体类型的子目录中).如果您将pdf作为文本文件打开,您应该能够找到目录条目(它们分别以"<<"和">>"开头和结尾.

在一个简单的pdf文件中,我发现了以下内容:

<</Type/Font/BaseFont/Helvetica-Bold/Subtype/Type1/Encoding/WinAnsiEncoding>>
Run Code Online (Sandbox Code Playgroud)

因此,搜索前缀应该会帮助你(在一些pdf文件中,组件之间有空格,但'/ Type/Font'应该没问题).

当然这是一个手动过程,而你可能更喜欢自动过程.

另外,我们有时会使用identifyont或者字体来查找给我们带来问题的不常见字体(徽标字体).

尊重纪尧姆

编辑:以下代码将在页面中找到所有字体.简而言之,您在每个页面的词典中搜索subdictionnary"ressource",然后搜索subdictionnary"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());              
    }
 }
Run Code Online (Sandbox Code Playgroud)

名称(以下代码中的变量"name")是文本中用于更改字体的名称.在PDF中,您必须在文本旁边找到它.以下数字是大小.例如,它的大小为12.(对不起,这个部分仍然没有代码).

BT 
/F13  12  Tf 
288  720  Td 
the text to find  Tj 
ET
Run Code Online (Sandbox Code Playgroud)