【问题标题】:Embedded JBIG2 Postscript stream not being rendered in PDF嵌入式 JBIG2 Postscript 流未在 PDF 中呈现
【发布时间】:2016-11-07 00:51:52
【问题描述】:

我正在学习手写后记。我从下面的链接中获取了一张 JBIG2 图像(此处的示例中使用了 amb_1.jb2:http://jbig2dec.sourceforge.net/ubc/main.html),并将其添加到 PDF 文件内的流中。

有问题的 PDF 在这里。 https://gist.github.com/brandonprry/277cbbc581be4e8eaa403a16403a6996

在我尝试过的任何 PDF 阅读器中打开它都没有错误,但图像没有呈现。

渲染嵌入的 JBIG2 图像流 (9 0 obj) 我缺少什么?使用 MuPDF 工具“mutool info”,它识别出 PDF 包含 JBIG2 图像流,但据我所知,它仍然没有呈现它。

./mutool info /media/psf/Home/tmp/testcases/0adcc9f8-c421-47d6-93ad-9f6efc2e360b.pdf 
/media/psf/Home/tmp/testcases/0adcc9f8-c421-47d6-93ad-9f6efc2e360b.pdf:

PDF-1.4
Info object (3 0 R):
<</CreationDate(D:20051122152833-05'00')/Creator(PdfCompressor 3.0.84)/Producer(CVISION Technologies)>>
Pages: 1

Retrieving info from pages 1-1...
Mediaboxes (1):
    1   (7 0 R):    [ 0 0 967.68 1728 ]

Fonts (3):
    1   (7 0 R):    Type1 'Helvetica' (4 0 R)
    1   (7 0 R):    Type1 'Times-Roman' (5 0 R)
    1   (7 0 R):    Type1 'Courier' (6 0 R)

Images (1):
    1   (7 0 R):    [ ASCIIHex JBIG2 ] 10x10 1bpc DevGray (9 0 R)

我注意到这个堆栈溢出帖子指出不应该包含魔术头,我目前在上面的示例中。

jbig2 data in pdf is not valid jbig2 data. Wrong magic

无论有无 JBIG2 流中的 8 字节标头,都不会打印错误,也不会渲染图像。

非常感谢任何想法。

【问题讨论】:

  • 我注意到我没有包括十六进制编码数据后所需的尾随'>',但添加后,行为没有变化。没有错误,但没有渲染图像。这让我更加相信它甚至没有读取这个对象进行解码。
  • 这里只是一个小问题。 PDF 不是 PostScript!例如,PostScript 根本不支持 JBIG2。显然,因为 PostScript 是一种编程语言(PDF 不是),您可以编写一个程序来读取它。但是,您似乎更像是在学习手写 PDF,而不是 PostScript .....

标签: pdf postscript jbig2


【解决方案1】:

只是为了让事情更进一步。您的 Page 对象缺少 Contents 条目。来自PDF ISO 32000 Table 30 页面对象中的条目:

内容 |流或数组(可选)|一个内容流(见 7.8.2,“内容流”),应该描述这个页面的内容。如果没有此项,则页面为空。

这解释了为什么文档呈现为空页面。内容包含实际呈现页面的说明,如Chapter 8 - Graphics中所述

内容流至少可能包含两条指令:

cm(Concat 矩阵)命令可以对图像进行任何缩放或平移。默认情况下,它将定位在 0, 0(左下角),并且图像将按比例显示。

Do 命令实际输出图像。

这是一个示例内容流,它转换为 (x,y) = (50, 100),然后输出图像。

10 0 obj <<
  /Length 25
>> stream
1 0 0 1 50 100 cm
/I0 Do
endstream
endobj

/Length是内容流的长度)。

这需要作为/Contents 条目添加到现有页面对象0 7 R

7 0 obj <<
  /Type /Page
  /Contents 10 0 R
  /MediaBox [ 0 0 967.68 1728 ]
  /Parent 1 0 R
  /Resources 8 0 R
>>
endobj

当然,您还需要调整 PDF 中的 xref 和预告片字典,以适应更改偏移量和将 10 0 R(内容流)作为新对象。

进行上述更改后,我从xpdf 收到以下错误:

Syntax Error (1224): Unknown segment type in JBIG2 stream
Syntax Error (34044): Unexpected EOF in JBIG2 stream

您需要处理的 JBIG2 流中的数据仍有问题。

【讨论】:

  • 非常感谢,就是这样。
猜你喜欢
  • 2020-07-28
  • 2018-08-04
  • 2020-09-25
  • 2020-05-15
  • 1970-01-01
  • 2019-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多