字体存储在目录中(我想在字体类型的子目录中).如果您将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)
| 归档时间: |
|
| 查看次数: |
22597 次 |
| 最近记录: |