【问题标题】:How to create XFDF annotation with an image如何使用图像创建 XFDF 注释
【发布时间】:2016-10-06 08:23:47
【问题描述】:

我想用 Java 生成一个 XFDF Stamp Annotation,里面有一个透明的图像。我很难识别图像的存储格式以及如何将输入图像转换为该格式。

目前为止我知道

  • stamp 元素是 annots 元素的子元素,对应于 Rubber Stamp 注释。橡皮图章注释显示的文本或图形看起来像是用橡皮图章印在页面上一样。 如果存在,则外观子元素(注释字典中的 AP 键)优先于图标属性(橡皮图章注释字典中的名称键)。 内容模型 (contents-richtext?&contents?&appearance?&popup?)
  • appearance 元素是stamp 元素的子元素,对应注释字典中的AP 键。该值是一个 base 64 编码的字符串。 内容模型 Base 64 编码字符串。 属性 无。

我有一个包含图像的示例 XFDF,当我解码图像时,我会看到这样的语法,但遗憾的是我不知道 标签。

<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 工具可以让我导出它,除了付费工具。

【问题讨论】:

    标签: java image pdf xfdf pdf-annotations


    【解决方案1】:

    它是 DCT 格式 (JPEG) 的十六进制表示。如果想要一个透明的图像标记,你的 XFDF 中会有两个这样的东西,图像本身和蒙版。

    【讨论】:

    • 它是唯一支持的格式还是您从示例内容中假设的?你能指点我这方面的文档吗?
    • 我假设它基于我通过使用 Acrobat DC 从 PNG 文件创建自定义图章而制作的示例。 XFDF 的文档位于下面的链接partners.adobe.com/public/developer/en/xml/XFDF_Spec_3.0.pdf
    • 我尝试将 Base64 转换为文本,将 Hex 转换为文本并将其另存为 jpg,但没有成功。但我承认我可能做出了错误的转换。你指出我的规范并没有说明格式。
    • 我敲回车太快了。这是完整的评论...我假设它基于我通过使用 Acrobat DC 从 PNG 文件创建自定义图章而制作的示例。我想图像的任何流编码都可以工作,但即使 Acrobat 也不一定支持规范中可能的所有内容,根据我的经验,最好遵循 Acrobat 做什么 而不是规范 说。 XFDF 的文档位于下面的链接中。 partners.adobe.com/public/developer/en/xml/XFDF_Spec_3.0.pdf
    • 我知道这是一篇旧帖子。有人可以告诉我,如何在 C# 中将 DCT 格式 (JPEG) 的 HEX 表示形式转换为 IRandomAccessStream? (UWP)
    【解决方案2】:

    XFDF 规范没有解释这些 dict 标签的用途。猜他们漏掉了 信息的重要组成部分。

    这个帖子让我有时间弄清楚为什么生成的 base 64 图像没有导入到 Acrobat 中。所以它是 XOjbect 的 XML。

    也许 acrobat PDF 规范提到了这一点。

    【讨论】:

      【解决方案3】:

      添加如下图章元素:

      <stamp creationdate="D:20200422160322Z" flags="print" date="D:20200422160322Z" icon="Unknown" page="0" rect="276.675,778.525,318.325,841">
        <imagedata>data:image/png;base64,iVBORw0 . . . FTkSuQmCC</imagedata>
        <apref y="841" x="276.675" gennum="2" objnum="198" />
      </stamp>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-18
        • 1970-01-01
        • 2011-12-20
        • 2021-04-28
        相关资源
        最近更新 更多