【发布时间】:2018-01-30 15:48:03
【问题描述】:
我正在使用 PDFTron 扫描文档并以某种自定义格式提取注释信息。我对Ellipse 和Square 注释有疑问。
对于提到的自定义格式,我需要正方形的width 和height(可以是矩形)。所有注释都可以旋转。对于旋转的矩形,我可以使用square.GetVisibleContentBox() 获得边界框,并使用这种方法获得旋转角度:
var appearance = square.GetAppearance();
var matrixApp = appearance.FindObj("Matrix");
var matrixObject = new Matrix2D(matrixApp.GetAt(0).GetNumber(), matrixApp.GetAt(1).GetNumber(),
matrixApp.GetAt(2).GetNumber(), matrixApp.GetAt(3).GetNumber(), matrixApp.GetAt(4).GetNumber(),
matrixApp.GetAt(5).GetNumber());
RotationAngle = GetRotationFromMatrix(matrixObject);
我在旋转Ellipse 注释的情况下使用相同的方法(我需要Ellipse 的半长轴和半短轴)。但是如何从边界框和旋转中获得Rectangle 宽度和高度,或Ellipse 轴?对于矩形,我使用this post 尝试了简单的数学运算。但它不适用于 45 度旋转。而且我不知道如何检索Ellipse 轴。
我打开了 pdfDoc 并找到了旋转的 Circle 注释:
endstream
endobj
497 0 obj<</Subj(Ellipse)/Type/Annot/P 477 0 R/F 4/C[1 0 0]/CreationDate(D:20180130093056+03'00')/T(User-PC)/Subtype/Circle/M(D:20180130093101+03'00')/AP<</N 499 0 R>>/RD[0.5 0.5 0.5 0.5]/Rect[75.96057 481.4219 511.1196 824.4295]/NM(BNJOBSFLFNHJWWZE)/Rotation 30>>
endobj
498 0 obj[497 0 R]
endobj
499 0 obj<</Type/XObject/Subtype/Form/FormType 1/BBox[88.18503 573.4521 498.8952 732.3994]/Resources<</ProcSet[/PDF]>>/Matrix[0.8660253 -0.5000002 0.5000002 0.8660253 -363.0966 -247.1763]/Filter/FlateDecode/Length 116>>
stream
注意obj<</Type/XObject/Subtype/Form/FormType 1/BBox字符串。这个BBox 是原始的Ellipse 边界框(没有旋转)。我已经检查过了。如果我没有旋转 BBox,我可以获得ellipse 的轴和Rectangle 的尺寸。但是如何检索这个XObject 进行注释呢?
做个总结。我需要检索Rectangle 和Circle 的实际尺寸。使用简单的数学很难做到。我发现原始边界框保存在 pdf 中,但我不知道如何从 Annot 对象获取此信息。或者,也许您会给我另一种获取尺寸的方法?
编辑您可以下载示例文件here
【问题讨论】:
-
也许您可以发布/附加一个包含该问题的示例 PDF。另外,为什么需要检索“矩形和圆形的真实尺寸”?
-
正如我所解释的,我们需要将注释转换为我们的自定义格式。我知道,我们可以通过将旋转矩阵应用于外观来旋转它。事实上,我有一个想法将注释旋转回来,使用旋转矩阵,读取边界框,然后将其返回到初始状态。但我失败了。我在我的问题中提供了文件
-
正如我所描述的,我找到了保存原始(未旋转)边界框的地方。但我不知道如何阅读这些信息。我真的需要帮助
-
关于附件,我以前从未在 PDF 中看到过“旋转”条目。只有“旋转”,它只是顺时针以 90 度为增量。注释还具有自定义外观,因此如果任何其他 PDF 供应商需要重新绘制注释,它将失去 45 度旋转。尝试在 Acrobat 中移动该注释并调整其大小以了解我的意思。
标签: c# .net math annotations pdftron