我想用Java生成一个XFDF Stamp Annotation,里面有一个透明的图像。我很难识别图像的存储格式以及如何将输入图像转换为该格式。
到目前为止我知道
- stamp 元素是 annots 元素的子元素,对应于 Rubber Stamp 注释。橡皮图章注释显示的文本或图形看起来像是用橡皮图章印在页面上。如果存在,则外观子元素(注释字典中的 AP 键)优先于图标属性(橡皮戳注释字典中的名称键)。内容模型(contents-richtext?&contents?&appearance?&popup?)
- 外观元素是标记元素的子元素,对应于注释字典中的 AP 键。该值是一个 base 64 编码的字符串。内容模型 Base 64 编码字符串。属性 无。
我有一个包含图像的示例 XFDF,当我解码图像时,我会看到这样的语法,但遗憾的是我不知道<DATA MODE="RAW" ENCODING="HEX"中存在什么样的原始数据>标签。
<DICT KEY="AP">
<STREAM KEY="N">
<ARRAY KEY="BBox">
<FIXED VAL="250"/>
<FIXED VAL="550"/>
<FIXED VAL="400"/>
<FIXED VAL="575"/>
</ARRAY>
<INT KEY="FormType" VAL="1"/>
<INT KEY="Length" VAL="35"/>
<DICT KEY="Resources">
<DICT KEY="XObject">
<STREAM KEY="Im1">
<INT KEY="BitsPerComponent" VAL="8"/>
<NAME KEY="ColorSpace" VAL="DeviceRGB"/>
<NAME KEY="Filter" VAL="FlateDecode"/>
<INT KEY="Height" VAL="150"/>
<INT KEY="Length" VAL="1907"/>
<STREAM KEY="SMask">
<INT KEY="BitsPerComponent" VAL="8"/>
<NAME KEY="ColorSpace" VAL="DeviceGray"/>
<NAME KEY="Filter" VAL="FlateDecode"/>
<INT KEY="Height" VAL="150"/>
<INT KEY="Length" VAL="5690"/>
<NAME KEY="Subtype" VAL="Image"/>
<NAME KEY="Type" VAL="XObject"/>
<INT KEY="Width" VAL="300"/>
<DATA MODE="RAW" ENCODING="HEX">
我已经设法在 PDFBox 的帮助下在 PDF 中创建了一个带有自定义图像的橡皮图章注释,但遗憾的是 PDFBox 似乎不支持将这种注释导出到 XFDF,它们只支持从表单(AcroForm)导出。我不知道 Java 中的任何其他工具可以让我导出它,除了付费工具。