Я играю с возможностью создавать pdf-файлы с помощью кода C#. Я изучил спецификации PDF и смог создать рабочий PDF-файл, сделанный путем ввода строк данных и их кодирования в байтовые массивы с использованием кодировки UTF8.Можно ли использовать .NET DeflateStream для создания PDF?
Проблема, с которой я сталкиваюсь, заключается в том, что я пытаюсь использовать DeflateStream
для объектов потока PDF. Это просто не похоже на работу:
Вот текст версия объекта в формате PDF, который рассматривается (\ г \ п в конце каждой строки, просто не видно здесь):
5 0 obj
<</Length 45>>
stream
BT 70 50 TD /F1 12 Tf (Hello, world!) Tj ET
endstream
endobj
Когда я пытаюсь использовать класс DeflateStream
для сжатия линии BT 70 50 TD /F1 12 Tf (Hello, world!) Tj ET
, формат pdf не работает. Я заметил, что многие другие библиотеки, такие как iTextSharp, используют собственную реализацию сжатия Deflate.
Есть ли причина, по которой внедрение Microsoft класса DeflateStream не работает? Я использую его неправильно или неправильно реализован или что?
Я знаю, что PDF-файлы являются бинарными (не текст), но если я ничего не шифровать, то можно просмотреть все его как текст. Вот весь файл PDF для справки (в незашифрованном виде, а также \ г \ п в конце каждой строки, просто не видно здесь):
%PDF-1.7
1 0 obj
<</Type /Catalog /Pages 2 0 R>>
endobj
2 0 obj
<</Type /Pages /MediaBox [ 0 0 200 200 ] /Count 1 /Kids [ 3 0 R ]>>
endobj
3 0 obj
<</Type /Page /Parent 2 0 R /Resources <</Font <</F1 4 0 R>>>> /Contents 5 0 R>>
endobj
4 0 obj
<</Type /Font /Subtype /Type1 /BaseFont /Times-Roman>>
endobj
5 0 obj
<</Length 45>>
stream
BT 70 50 TD /F1 12 Tf (Hello, world!) Tj ET
endstream
endobj
xref
0 6
0000000000 65535 f
0000000017 00000 n
0000000067 00000 n
0000000153 00000 n
0000000252 00000 n
0000000325 00000 n
trailer
<</Size 6/Root 1 0 R>>
startxref
422
%%EOF
Хм, это интересное изделие. Кроме того, речь идет о процессе ** декомпрессии ** (а не процессе ** сжатия **), но я думаю, что он также отрицательно влияет на сжатие. Я собираюсь попробовать DotNetZip для сжатия и посмотреть, поможет ли это. –
@ m-y yes - тот же вопрос будет происходить с обеих сторон. В целом, однако, я считаю DotNetZip намного лучше, чем встроенные библиотеки сжатия. –
DotNetZip ZlibStream заработал отлично. Интересно, можете ли вы по-прежнему использовать DeflateStream (.NET-4.5) и добавить два недостающих байта в начало при сжатии и пропустить два байта при распаковке? –