使用 pdfbox 在 PDF/A-1a 中查找标记内容
Find tagged content in PDF/A-1a using pdfbox
我认为我有一个 PDF/A-1a 文件,它是由 apache fop 生成的,并且有一个覆盖信头,使用来自 pdfbox 的 OverlayPDF。预检将该文件识别为正常(但显然只有 PDF/A-1b)并且 Acroreader 在文档属性中说它是 "PDF/A" 模式和 "Tagged: yes"。我想看看它看起来如何,这样我就可以调整 fop 进行一些小的改进。
我的问题是,我在哪里可以看到标记的内容(即 PDF 中的文本表示是字符输出的紧缩序列),最好不要自己编码,例如使用 pdfbox 中的 debugger/PDFReader?我有点迷路了——有没有另一种方法来获取文档结构的文本输出,例如进入 xml 文件以使用编辑器搜索它? - TIA!
编辑
信头本身是附言,使用 ghostscript 转换为 PDF/A-1b,然后覆盖
java -jar pdfbox-app-2.0.0-RC3.jar OverlayPDF letter_plain.pdf \
followingpages_letterhead.pdf -first firstpage_letterhead.pdf \
letter_with_head.pdf
letter_plain.pdf 是用 fop 使用
生成的
fop -pdfprofile 'PDF/A-1a' -v -d -c my_fop_config.cfg -xml letter.xml \
-xsl letter_to_fo.xsl -pdf letter_plain.pdf
使用的版本是pdfbox 2.0和fop 1.1
如果 letter_with_head.pdf 不再是 PDF/A-1a 那么问题将适用于 letter_plain.pdf 根据 fop 调用应该是 1a,必须选择不同的解决方案(如 svg)以获取信头。
编辑 2
示例 pdf 可在此处找到:https://www.magentacloud.de/share/j9qk7jfzyv - 无需单独 followingpages_letterhead.pdf,因为样本只有一页。
编辑 3
我怀疑文本被埋在 Root/StructTreeRoot/ParentTree/Nums/[1]/[3]/P/P/P/P/P/P
下方的某处(假设 P 以某种方式映射 fo:block
)但无法显示 pdf 中的文本。
手头 PDF 中的结构树条目映射到页面内容流中的标记内容。例如
中的条目
Root/StructTreeRoot/K/[0]/K/[0]/K/[1]/K/[0]/K/[0]/K/[0]/K/[0]
映射到这部分页面内容流
/Span << /MCID 0 >> BDC
BT
/F15 11 Tf
1 0 0 -1 0 9.163 Tm
[ (Bes) 15 (tell-Nr) 48 (. 1) 34 (23) 6 (456) 29 (7) 40 (8) ] TJ
ET
EMC
可以看出,没有额外的定义,因此除了解析此示例序列中的 TJ
运算符之外,没有易于显示的文本。因此标记用于定义文档的结构,仅指向不同的构建块。
此外,还有一些有关辅助功能支持的信息。但这仅限于在结构树中指定 Lang
属性。
我认为我有一个 PDF/A-1a 文件,它是由 apache fop 生成的,并且有一个覆盖信头,使用来自 pdfbox 的 OverlayPDF。预检将该文件识别为正常(但显然只有 PDF/A-1b)并且 Acroreader 在文档属性中说它是 "PDF/A" 模式和 "Tagged: yes"。我想看看它看起来如何,这样我就可以调整 fop 进行一些小的改进。
我的问题是,我在哪里可以看到标记的内容(即 PDF 中的文本表示是字符输出的紧缩序列),最好不要自己编码,例如使用 pdfbox 中的 debugger/PDFReader?我有点迷路了——有没有另一种方法来获取文档结构的文本输出,例如进入 xml 文件以使用编辑器搜索它? - TIA!
编辑
信头本身是附言,使用 ghostscript 转换为 PDF/A-1b,然后覆盖
java -jar pdfbox-app-2.0.0-RC3.jar OverlayPDF letter_plain.pdf \
followingpages_letterhead.pdf -first firstpage_letterhead.pdf \
letter_with_head.pdf
letter_plain.pdf 是用 fop 使用
生成的fop -pdfprofile 'PDF/A-1a' -v -d -c my_fop_config.cfg -xml letter.xml \
-xsl letter_to_fo.xsl -pdf letter_plain.pdf
使用的版本是pdfbox 2.0和fop 1.1
如果 letter_with_head.pdf 不再是 PDF/A-1a 那么问题将适用于 letter_plain.pdf 根据 fop 调用应该是 1a,必须选择不同的解决方案(如 svg)以获取信头。
编辑 2
示例 pdf 可在此处找到:https://www.magentacloud.de/share/j9qk7jfzyv - 无需单独 followingpages_letterhead.pdf,因为样本只有一页。
编辑 3
我怀疑文本被埋在 Root/StructTreeRoot/ParentTree/Nums/[1]/[3]/P/P/P/P/P/P
下方的某处(假设 P 以某种方式映射 fo:block
)但无法显示 pdf 中的文本。
手头 PDF 中的结构树条目映射到页面内容流中的标记内容。例如
中的条目Root/StructTreeRoot/K/[0]/K/[0]/K/[1]/K/[0]/K/[0]/K/[0]/K/[0]
映射到这部分页面内容流
/Span << /MCID 0 >> BDC
BT
/F15 11 Tf
1 0 0 -1 0 9.163 Tm
[ (Bes) 15 (tell-Nr) 48 (. 1) 34 (23) 6 (456) 29 (7) 40 (8) ] TJ
ET
EMC
可以看出,没有额外的定义,因此除了解析此示例序列中的 TJ
运算符之外,没有易于显示的文本。因此标记用于定义文档的结构,仅指向不同的构建块。
此外,还有一些有关辅助功能支持的信息。但这仅限于在结构树中指定 Lang
属性。