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

时间:2010-05-07 04:09:18

标签: pdf fonts adobe itext

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

3 个答案:

答案 0 :(得分:6)

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

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

<</Type/Font/BaseFont/Helvetica-Bold/Subtype/Type1/Encoding/WinAnsiEncoding>>

因此搜索前缀应该可以帮助你(在某些pdf文件中,之间有空格 commponents但'/ Type / Font'应该没问题。

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

另一方面,我们有时使用identifontwhat the font来查找给我们带来问题的不常见字体(徽标字体)。

问候 纪尧姆

编辑:以下代码将在页面中找到所有字体。简而言之,您在每个页面的词典中搜索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());              
    }
 }

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

BT 
/F13  12  Tf 
288  720  Td 
the text to find  Tj 
ET

答案 1 :(得分:2)

根据PDF,如果没有概述,您可以在 Adob​​e Illustrator 中打开它,双击文本并选择其中一些以查看它的字体系列,大小,等

如果文字是概述的,那么使用PATRY建议的那些在线工具之一找出字体。

祝你好运

答案 2 :(得分:1)

如果您有Adobe Acrobat,您可以在里面看到字体并检查对象和文本流。我在http://pdf.jpedal.org/java-pdf-blog/bid/10479/Viewing-PDF-objects

上写了一篇博客文章