【发布时间】:2018-01-11 03:26:32
【问题描述】:
我正在尝试在 iText7 中打开 PDF 文件,在其中写入一些新文本,将原始 PDF 中的字体应用到其中并将其保存在另一个 PDF 文档中。我正在使用 Java 1.8
因此,我需要一组在原始 pdf 中使用的字体名称,用户可以从中选择一个,并将其应用于新段落。 而且我还需要以某种方式应用这种字体。
现在我有这段代码,我取自here:
public static void main(String[] args) throws IOException {
PdfDocument pdf = new PdfDocument(new PdfReader("example.pdf"));
Set<PdfName> fonts = listAllUsedFonts(pdf);
fonts.stream().forEach(System.out::println);
}
public static Set<PdfName> listAllUsedFonts(PdfDocument pdfDoc) throws IOException {
PdfDictionary acroForm = pdfDoc.getCatalog().getPdfObject().getAsDictionary(PdfName.AcroForm);
if (acroForm == null) {
return null;
}
PdfDictionary dr = acroForm.getAsDictionary(PdfName.DR);
if (dr == null) {
return null;
}
PdfDictionary font = dr.getAsDictionary(PdfName.Font);
if (font == null) {
return null;
}
return font.keySet();
}
它返回这个输出:
/Helv
/ZaDb
但是,example.pdf 唯一的字体是 Verdana(这是 Adobe Acrobat Pro 中的文档属性所说的)。此外,Verdana 有两种实现方式:Bold 和 normal。
所以,我有这些问题:
- 为什么此函数返回两种字体而不是一种 (Verdana)。
- 如何生成正常可读的字体名称来显示它们 给用户(例如 Helvetica 而不是 Helv)?
- 如何将原始文档中的字体应用到 新段落?
提前感谢您!
【问题讨论】: