嵌入式JBIG2 Postscript流未以PDF格式呈现

时间:2016-11-07 00:51:53

标签: pdf postscript jbig2

我正在学习手写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)

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

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

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

非常感谢任何想法。

1 个答案:

答案 0 :(得分:1)

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

  
    

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

  

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

中所述

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

cm(Concat Matrix)命令,用于对图像进行任何缩放或转换。默认情况下,它将位于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

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

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

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

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