如何计算pdf文档中字体的字体系列和字体大小?我们实际上是尝试使用iText以编程方式生成pdf文档,但我们不确定如何找出需要生成的原始文档的字体系列和字体大小。文档属性似乎不包含此信息
答案 0 :(得分:6)
字体存储在目录中(我想在字体类型的子目录中)。如果您将pdf作为文本文件打开,您应该能够找到商品(它们分别以“<<”和“>>”开头和结尾。
在一个简单的pdf文件中,我发现了以下内容:
<</Type/Font/BaseFont/Helvetica-Bold/Subtype/Type1/Encoding/WinAnsiEncoding>>
因此搜索前缀应该可以帮助你(在某些pdf文件中,之间有空格 commponents但'/ Type / Font'应该没问题。
当然这是一个手动过程,而您可能更喜欢自动过程。
另一方面,我们有时使用identifont或what 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,如果没有概述,您可以在 Adobe Illustrator 中打开它,双击文本并选择其中一些以查看它的字体系列,大小,等
如果文字是概述的,那么使用PATRY建议的那些在线工具之一找出字体。
祝你好运答案 2 :(得分:1)
如果您有Adobe Acrobat,您可以在里面看到字体并检查对象和文本流。我在http://pdf.jpedal.org/java-pdf-blog/bid/10479/Viewing-PDF-objects
上写了一篇博客文章