参考如何检索图像的一个PdfStamp注释,如何检索旋转的邮票注释?
我创建了一个文档,放置了一个stamp1,翻页并添加了另一个stamp2。文档正常(stamp1图像旋转,stamp2未旋转),但提取的图像完全相同(方向相同)。
我可以让页面旋转
page.getRotation() // 90
如果我想得到邮票(图像)的方向
// I expect to get 0 but get 90
stamp1.getPdfObject().getAsDictionary(PdfName.P).get(PdfName.Rotate)
// I get 90
stamp2.getPdfObject().getAsDictionary(PdfName.P).get(PdfName.Rotate)
我花了几个小时来争取邮票的正确轮换。。。
编辑:
pdf是由pdf专家创建的。创建空白pdf,添加戳记批注(图像),旋转页面并添加其他批注。
我更新了这样的代码来测试行为:
public void testExtractFromAddStamp() throws IOException {
try (InputStream resource = new FileInputStream("/tmp/test.pdf");
PdfReader pdfReader = new PdfReader(resource);
PdfDocument pdfDocument = new PdfDocument(pdfReader) ) {
saveAnnotationImages(pdfDocument, new File(RESULT_FOLDER, "add_stamp").getPath());
// TEST
PdfAnnotation stamp1 = pdfDocument.getPage(1).getAnnotations().get(0);
PdfAnnotation stamp2 = pdfDocument.getPage(1).getAnnotations().get(1);
PdfNumber rotation1 = (PdfNumber) stamp1.getPdfObject().getAsDictionary(PdfName.P).get(PdfName.Rotate);
PdfNumber rotation2 = (PdfNumber) stamp2.getPdfObject().getAsDictionary(PdfName.P).get(PdfName.Rotate);
System.out.println(rotation1); // Shows 90
System.out.println(rotation2); // Shows 90
}
}
PDF对象的许多属性决定了注释中图像的最终旋转。你必须把它们结合起来考虑。
首先,可以旋转显示注释的页面:
旋转整数(可选;可继承)显示或打印时页面应顺时针旋转的度数。该值应为90的倍数。默认值:0。
(ISO 32000-2表31-页面对象中的条目)
注释是否与其页面一起旋转取决于注释的NoRotate标志:
5 NoRotate(PDF 1.3)如果设置,不要旋转注释的外观以匹配页面的旋转。注释矩形的左上角应保持在页面上的固定位置,无论页面旋转如何。
(ISO 32000-2表167-注释标志)
(ISO 32000-2图78-使用NoRotate标志进行坐标调整)
因此,只有当注释的NoRotate标志清除时,才需要考虑页面旋转。
如果注释具有外观流(本例中的注释就是这样做的,因为位图图像绘制说明就在这里),则该外观流包含一个变换矩阵属性,该属性控制外观流在注释矩形中的旋转方式:
AP字典(可选;PDF 1.2)一种外观字典,规定如何在页面上直观地显示注释(见12.5.5,“外观流”)。
(ISO 32000-2表166-所有注释词典共有的条目)
从PDF 1.2开始,注释可以指定一个或多个外观流,作为早期版本中可用的简单边框和颜色特征的替代。外观流使注释能够以不同的方式可视化显示,以反映其与用户的交互。每个外观流都是一个表单XObject(见8.10,“表单XObject”):一个自包含的内容流,应在注释矩形内呈现。
本子条款中概述的算法应用于从外观XObject的坐标系(由其矩阵条目定义;参见“表95-参考字典中的条目”)映射到默认用户空间中注释的矩形:
算法:外观流
>
应计算矩阵A,该矩阵将缩放和平移转换后的外观框,以与注释矩形的边缘对齐(由Rect条目指定)。a将转换后的外观框的左下角(具有最小x和y坐标的角)和右上角(具有最大x和y坐标的角)映射到注释矩形的相应角。
矩阵应与A连接,以形成一个矩阵AA,该矩阵AA在默认用户空间中从外观坐标系映射到注释的矩形:
AA=矩阵×A
(ISO 32000-2第12.5.5节-外观流)
因此,必须检查该外观矩阵的旋转系数。如果矩阵也倾斜或镜像,则首先必须决定如何对矩阵进行因式分解,因为旋转角度值取决于该因式分解。
当位图图像是通过图像绘制指令在内容流中绘制时,它不一定是在外观边界框中直立绘制的,它是在绘制时由当前变换矩阵ta的值指示的。
与外观矩阵一样,此变换矩阵可能必须分解以确定其应用的旋转角度。
让我们看一下您的html" target="_blank">示例PDF。
页面旋转显式为0。
两个注释外观流都没有矩阵项。因此,默认情况下使用单位矩阵,这意味着没有旋转。
注释的外观流构建非常简单,在保存图形状态和恢复图形状态指令对之间,更改当前转换矩阵并绘制图像。
四个注释的变换矩阵包含(1)不旋转,(2)逆时针旋转90°,3)逆时针旋转180°,以及(4)逆时针旋转270°。
这对应于页面上可见的4个注释。
问题内容: 如何在带注释的方法上检索注释的值? 我有: 问题答案: 获取实例。 获取注释。 获取注释属性值。 就像是: 当然,您需要捕获/处理适当的异常。上述假定您确实是从当前类检索方法(替换用其他方式)和有关方法是公共的(使用,如果事实并非如此)
我知道有可能通过名字得到一个类,使用 是否可以通过名称检索注释?我尝试了这个: 然后将c转换为
我想从AOP连接点检索一个注释。我能够通过反射获得注释,但无法通过ProcedingJoinPoint获得注释。 我的注释方法 我的绒球
问题内容: 我想从源HTML中删除这些标签及其内容。 问题答案: 当搜索你基本上使用的地方被定义这个API。但是,注释并不是技术上的元素,因此您可能会感到困惑,但它们仍然是由节点名标识的节点。 让我们看看这可能如何工作:
我正在学习SpringBoot,在参考文档中有一个例子,我有一个问题。文件的以下部分提到 6.使用@SpringBootApplication注释 可以使用单个@SpringBootApplication注释来启用这三个功能,即: @EnableAutoConfiguration:启用Spring Boot的自动配置机制 @ComponentScan:在应用程序所在的包上启用@Component扫
所以目前,这是我所做的(不起作用): 这是与建议匹配的代码: 以及由junit测试生成的跟踪: