PDFlib 复制页面并使用字体

PDFlib copy page and use font

PDFlib 示例 search and replace text 复制页面并粘贴矩形和文本。

我不想从我的硬盘加载字体(就像在 int font = p.load_font(REPLACEMENT_FONT, "unicode", ""); 的示例中那样)我想使用源文档中的原始字体。

我怎样才能做到这一点?

我试过的是这样的:

当使用 int font = 0(相当于第 244 行中 tet.fontid 的值)时,PDFlib 会抛出这样的异常:

com.pdflib.PDFlibException: Option 'font' has bad font handle 0
    at com.pdflib.pdflib.PDF_fit_textline(Native Method)
    at com.pdflib.pdflib.fit_textline(pdflib.java:1086)

可行的方法(以及我也无法达到的方法 运行)

也许我可以阅读目标文档中的字体。读取源文档中的字体是可行的:(int) lib.pcos_get_number(pdiHandle, "length:fonts");。尝试使用 (int) lib.pcos_get_number(outputPdfHandle, "length:fonts");(示例行 560 中的 outputPdfHandle = p.begin_document(outfilename, ""))读取目标文档中的字体会抛出异常

com.pdflib.PDFlibException: Handle parameter or option of type 'PDI document' has bad value 1
    at com.pdflib.pdflib.PDF_pcos_get_number(Native Method)
    at com.pdflib.pdflib.pcos_get_number(pdflib.java:1539)

无法使用通过 PDI 导入的文档中的字体在输出文档中创建文本。从理论上讲,通过 pCOS 函数从输入文档访问字体数据的想法听起来很有吸引力。人们可能认为应该可以将字体数据重新组合成例如一种有效的 TrueType 字体,然后可以通过 PDFlib load_font() 函数加载。

但这是不可能的,原因如下:

  • 保存在PDF文档中的字体数据不是保存在TrueType字体中的完整数据。重要的 TrueType 表格丢失,无法从 PDF 文件中的字体数据重建。
  • PDF 文件中的字体几乎总是只包含文档中实际使用的字形的子集。因此,即使可以使用输入文档中的字体数据,您也只能使用子集中的字形在输出文档中创建新文本。

此外,在通过 PDFlib 创建新输出时,TET 提供的 fontid 值不能用作字体句柄。 fontid 值是 pCOS 伪对象数组 fonts[] 中的索引,它与用于通过 PDFlib API.

创建新输出的任何句柄完全无关