You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PDFBox从xRef流中读取Translation Matrix

获取PDF注释外观流的Translation Matrix问题

我有一份PDF文件,需要读取其中特定文本注释的Translation Matrix。通过iText RUPS工具可见,注释的/AP键下的/N条目指向一个xRef流,该流包含所需的Translation Matrix,但使用PDFBox 3.0.0(也尝试过iText)无法程序化获取到正确信息。

尝试过的方法及问题

方法一:直接获取指定XRef对象

URL file = Main.class.getClassLoader().getResource("document.pdf");
PDDocument document = Loader.loadPDF(new File(file.toURI()));
System.out.println(document.getDocument().getObjectFromPool(new COSObjectKey(28, 0)).getObject())

执行后输出的对象字符串末尾显示COSStream{363946310},但无法访问该流的内容,完整输出如下:

COSDictionary{COSName{Length}:COSInt{189};COSName{BBox}:COSArray{COSFloat{153.0};COSFloat{198.0};COSFloat{459.0};COSFloat{594.0};};COSName{Resources}:COSDictionary{COSName{ExtGState}:COSDictionary{COSName{TRP11}:COSDictionary{COSName{CA}:COSFloat{0.300003};COSName{Type}:COSName{ExtGState};COSName{ca}:1050253822;};};COSName{Font}:COSDictionary{COSName{C2_0}:COSObject{COSNull{}};};COSName{ProcSet}:COSArray{COSName{PDF};COSName{Text};};};COSName{Subtype}:COSName{Form};}**COSStream{363946310}**

方法二:通过注释外观对象获取矩阵

URL file = Main.class.getClassLoader().getResource("document.pdf");
PDDocument document = Loader.loadPDF(new File(file.toURI()));
document.getPage(0).getAnnotations().get(0).getAppearance().getNormalAppearance().getAppearanceStream().getMatrix()

执行后返回的Translation Matrix与RUPS中所见不符,结果为:

[1.0,0.0,0.0,1.0,0.0,0.0]

补充信息

PDFBox Debugger分析显示:目标注释的/AP字典下/N条目指向对象28 0,该对象是Form类型的XObject,其内容流中包含矩阵变换指令q 1 0 0 1 -153 -198 cm,对应正确的Translation Matrix应为[1,0,0,1,-153,-198]。

内容的提问来源于stack exchange,提问作者TheMulittle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 13:42:41