Встроенный поток JBIG2 Postscript не отображается в PDF
Я учусь писать PostScript вручную. Я взял изображение JBIG2 по ссылке ниже (amb_1.jb2 используется в примере здесь: http://jbig2dec.sourceforge.net/ubc/main.html), и я добавил его в поток внутри PDF файл
Рассматриваемый PDF находится здесь. https://gist.github.com/brandonprry/277cbbc581be4e8eaa403a16403a6996
Нет ошибок при открытии в любом из читателей PDF, которые я пробовал, но изображение не отображается.
Чего мне не хватает для рендеринга встроенного потока изображений JBIG2 (9 0 объектов)? Используя инструмент 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 в формате pdf не являются действительными данными jbig2. Неправильная магия
С или без 8-байтового заголовка в потоке JBIG2 ошибки не печатаются и изображение не отображается.
Любые мысли очень ценятся.
1 ответ
Просто чтобы пойти дальше. Ваш Page
объект не имеет Contents
запись. Из PDF ISO 32000 Таблица 30 Записи в объекте страницы:
Содержание | поток или массив (необязательно) | Поток содержимого (см. 7.8.2, "Потоки содержимого"), который должен описывать содержимое этой страницы. Если эта запись отсутствует, страница должна быть пустой.
Это объясняет, почему документ отображается на пустой странице. Содержимое содержит инструкции для фактической визуализации страницы, как описано в Главе 8 - Графика
Как минимум, поток содержимого может содержать две инструкции:
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
Вам также, конечно, нужно отрегулировать xref
и словари трейлера, в PDF, чтобы приспособить сдвиги изменений и 10 0 R
(Поток содержимого) как новый объект.
После внесения вышеуказанных изменений, я получаю следующие ошибки от xpdf
:
Syntax Error (1224): Unknown segment type in JBIG2 stream
Syntax Error (34044): Unexpected EOF in JBIG2 stream
Что-то не так с данными в потоке JBIG2, с которыми вам нужно работать.