在 Apache FOP 0.95 生成的 PDF 中搜索 fo:block

Searching for fo:block in PDF generated by Apache FOP 0.95

是否可以在 Apache FOP 0.95 生成的 PDF 中找到 fo:block id="id_1"? 问题是在*.fo 的准备过程中仍然缺少一些数据。这些数据必须稍后以某种方式插入到生成的 PDF 文件中。

FOP 0.95支持fo:basic-linkinternal-destination,所以PDF里面有ID。

我不知道 PDF 中的 ID 是否与 FO 中使用的 ID 相同。 Acrobat reader 可以打开特定 ID 的 PDF(请参阅 https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/pdf_open_parameters.pdf 中的 nameddest=destination)。如果您可以让 Acrobat 在 id_1 打开您的 PDF,那么您的 ID 应该通常可用。

根据您的评论,您的问题实际上与 XSL FO 无关。

I mean If it is posible to parse the pdf file and to replace the text of that block, programming in java

您问的是可以用不同的文本替换现有 PDF 中的文本吗?

答案几乎肯定是否定的。 PDF 不是文字处理格式。它是一种二进制格式,始终具有字节偏移量。除非您有静态放置的 PDF Acroform 字段并想要更改字段值,或者您有 PDF XFA 表单并希望修改其中的 XML,否则您不能希望做这样的事情。

只有 Adob​​e Reader 甚至支持查看 XFA 表单,许多 PDF 查看器甚至不支持 Acroforms。

一些 XSL FO 工具支持创建 Acroform。只有 Adob​​e 软件支持创建 XFA 表单。许多 Java 库支持操作这些。

但是你的问题是:

The problem is that some data still missing during the preparation of *.fo. The problem is that some data still missing during the preparation of *.fo. These data must somehow later be inserted into the generated PDF file.

当然可以。修改只有 XML 的 *.fo 文件,并在处理为 PDF 之前将您需要的数据插入其中。为什么将 FO 处理为 PDF 缺少一些数据,然后希望稍后插入数据,在处理 FO 之前插入数据。或者,如果您正在使用 FO 创建静态表单并希望稍后将数据标记到它上面的确切位置,您可以使用 FO 来实现。只需使用第一个 PDF 作为第二个处理数据的背景。