我正在玩弄通过 C# 代码创建 pdf 文件的能力。我一直在查看 PDF 规范,并且能够创建一个工作 PDF 文件,通过获取数据字符串并使用 UTF8 编码将它们编码为字节数组来完成。
我遇到的问题是当我尝试DeflateStream
在 pdf 流对象上使用时。它似乎不起作用:
这是有问题的 pdf 对象的文本版本(\r\n位于每行的末尾,在这里不可见):
5 0 obj
<</Length 45>>
stream
BT 70 50 TD /F1 12 Tf (Hello, world!) Tj ET
endstream
endobj
当我尝试使用DeflateStream
该类来压缩 lineBT 70 50 TD /F1 12 Tf (Hello, world!) Tj ET
时,pdf 似乎不起作用。我注意到许多其他库(例如 iTextSharp)使用他们自己的 Deflate 压缩实现。
为什么微软的 DeflateStream 类的实现不起作用?我是使用不正确还是执行不正确还是什么?
我知道 PDF 文件是二进制文件(不是文本),但如果我没有加密任何内容,则可以将其全部视为文本。这是整个 PDF 文件供参考(纯文本,\r\n也在每行的末尾,只是在这里不可见):
%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