我試圖在iText7中打開PDF文件,在那裏寫一些新的文本,從原始PDF應用字體到它並保存在另一個PDF文檔中。我正在使用Java 1.8如何在iText7中從另一個pdf中重用字體?
因此,我需要一組用於原始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
不過,唯一的字體爲例.pdf已經是Verdana(這是Adobe Acrobat Pro中的文檔屬性)。而且,Verdana有兩種實現方式:粗體和正常。
所以,我有以下問題:
- 爲什麼這個函數返回兩種字體,而不是一個(宋體)。
- 我怎樣才能生成正常的閱讀良好的字體名稱,以將它們顯示給用戶(例如Helvetica而不是Helv) ?
- 我該如何申請從原始文件中獲得的字體到 新款?
提前致謝!
非常感謝您對您的一致和準確的答案。在理解字體使用的法律問題和字體術語方面,你幫了我很多忙。我將重新分配我的代碼,使其在法律上合適,並在技術上可執行。 –