2

我正在学习手写Postscript。我从下面的链接中获取了一个 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)

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

pdf 中的 jbig2 数据不是有效的 jbig2 数据。错误的魔法

无论 JBIG2 流中是否有 8 字节标头,都不会打印错误,也不会呈现图像。

任何想法都非常感谢。

4

1 回答 1

1

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

目录 | 流或数组(可选)| 一个内容流(见 7.8.2,“内容流”),应该描述这个页面的内容。如果此条目不存在,则该页面应为空。

这解释了为什么文档呈现为空页面。内容包含实际呈现页面的指令,如第 8 章 - 图形中所述

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

用于对图像进行任何缩放或平移的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条目添加到现有的 Page 对象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

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

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

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

您需要处理的 JBIG2 流中的数据仍然存在问题。

于 2016-11-07T03:57:48.740 回答