当前位置: 首页 > 知识库问答 >
问题:

带有使用XObject的外部图像的PDF

宇文航
2023-03-14

我正在尝试建立一个带有外部文件链接的PDF文件。

我使用的规范是https://www.adobe.com/content/dam/adobe/en/devnet/acrobat/pdfs/pdf_reference_1-7.pdf

在第348页上有一个具有远程加载的替代图像的图像示例。当我使用文档中的示例创建文档时,阅读器(使用acrobat reader XI)不会获取图像。没有错误消息,但没有发出请求(使用wireshark进行检查)。

  1. 只能有远程映像(即没有“正常”映像和备用映像)。
  2. 是否有使用/fs/url语法的完整文档的示例(不只是对象)?我找不到任何实际执行此请求的。

谢谢

编辑:我使用LibreOffice创建了一个1x1像素的基本文档。http://pastebin.com/5gqcygmp

我最初是用Acrobat创建测试文档的,但是输出非常混乱。

然后用pdf规范中的示例替换流,并尝试修复startxref偏移量,但不确定它是否正确。http://pastebin.com/bt42g02p

此文档当前未正确打开,但我尝试获得一个最低测试用例。我以前的尝试显示没有错误只是运气(但远程图像没有工作无论如何)。

是否有任何工具实际上允许使用/url创建XObject?我不知道的文件格式足够创建他们可靠的手工。

共有1个答案

公胤运
2023-03-14

首先,

我使用的规范是https://www.adobe.com/content/dam/adobe/en/devnet/acrobat/pdfs/pdf_reference_1-7.pdf

我建议不要使用PDF参考文件,而是使用ISO标准。Adobe PDF引用在本质上不是规范性的,而ISO标准则是。(实际内容差异很小,但如果有规范的规范,就应该使用它。)Adobe还发布了一个ISO标准的副本,只交换了标头。

那么,请不要把PDF当作文本文档。例如。通过在pastebin上共享它们,您将它们作为文本处理,这基本上破坏了内容。

话都说完了,让我们来看看你的实际问题:

在您的示例PDF中,您有:

4 0 obj
<</Type/XObject/Subtype/Image/Width 1/Height 1/BitsPerComponent 8/Length 0/F << /FS /URL
/F ( https://upload.wikimedia.org/wikipedia/commons/c/ca/1x1.png )
>>/Filter/FlateDecode/ColorSpace/DeviceRGB
>>
stream
endstream
endobj

这表明PDF查看器将在URL https://upload.wikimedia.org/wikipedia/commons/c/ca/1x1.png上找到一个文件,该文件包含一个数组1(/width 1/height 1)RGB(/colorspace/devicergb)sample,每种颜色有1个字节(/bitspercomponent 8)。ISO 32000-1图像字典第8.9.5节。

我怀疑您的文件是否满足了这一点,我假设它实际上是一个PNG文件,特别是带有PNG结构的文件,而不是上面解释的结构。

PDF不支持PNG格式,您必须转换数据。不过,它确实支持使用/ffilter/dctdecode的JPEG格式,这就是为什么规范中的示例

16 0 obj
  << /Type /XObject
     /Subtype /Image
     /Width 1000
     /Height 2000
     /ColorSpace /DeviceRGB
     /BitsPerComponent 8
     /Length 0 % This is an external stream
     /F << /FS /URL
           /F (http://www.myserver.mycorp.com/images/exttest.jpg)
        >>
     /FFilter /DCTDecode
  >>
stream
endstream
endobj

看起来很简单。

 类似资料:
  • 我在Jackson上使用Spring Boot应用程序(2.4.5版)。我可以添加一个使用gson的胖罐子,而不影响应用程序的Jackson反序列化吗? 当我将jar添加到我的应用程序时,应用程序到处使用gson来反序列化JSON。但是因为我使用了杰克逊的一些特殊功能,所以失败了。 不幸的是,我不能在图书馆里改变这一点。 我使用Gradle在依赖项中添加胖罐子,如下所示: 我正在构建Jackson

  • 我已经搜索了这些问题,但没有找到解决我的具体问题的方法。我需要做的是将包含图像和CSS样式的HTML文件转换为PDF。我正在使用iText5,并且已经能够将样式包含到生成的PDF中。但是,包括图像在内,我还在挣扎。我在下面包含了我的代码。具有绝对路径的图像包含在生成的PDF中,具有相对路径的图像不包含在生成的PDF中。我知道我需要实现AbstractImageProvider,但我不知道如何实现。

  • 问题内容: 我喜欢在PHP中使用Codeigniter Framework和JQuery AJAX上传图像,而无需重定向页面。当我上传图像时,它重定向到控制器区域,并且值未插入数据库,ajax响应也不会出现, 任何人都可以解决我的问题吗? 这是我的视野。 这是我的Ajax编码 这是我的控制器编码… 这是我的模型编码 问题答案: 试试这个。 工作正常 -HTML表单- 阿贾克斯- 只需在ajax中设

  • 我一直在尝试将jar转换为exe。该程序(jar)使用蓝牙库“Bluecove”,这是某个目录中的另一个jar。该程序还使用Java Swing,通常是JFrame等。当从Netbeans或Eclipse中运行时,该程序运行良好。现在是我部署它的时候了,因此我需要将其转换为exe。但我一直无法让最终的可执行文件与“Bluecove”链接。我尝试了JSmooth和Launch4j,但是使用这两个工具

  • 问题内容: 我有这个雕像的形象。 我正在尝试找到雕像上最顶部,最底部,最左侧和最右侧的点。有没有一种方法可以测量每边的边缘以确定雕像上最外面的点?我想得到双方的坐标。我试图使用并获得雕像的轮廓。 问题答案: 这是一种潜在的方法: 将图像转换为灰度和高斯模糊 获取二进制图像的阈值 查找轮廓 获取外部坐标 转换为灰度并模糊图像后,我们阈值以获取二进制图像 现在我们使用找到轮廓。由于OpenCV使用Nu

  • 我正在使用Alamofire向服务器发送数据。我有一个图像,我想上传到服务器的数据形式与一些其他参数。在Alamofire中,我使用multipartFormData方法发布所有参数和图像。服务器需要数据为JSON格式,参数如下所示: 我正在努力,但它给了我一个失败的回应。以下是我在swift中与alamofire合作的代码: 我的服务器接受BLOB数据中的映像。如果有人能帮我。非常感谢。