如何使用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
相关产品推荐
相关产品推荐

