m-y*_*m-y 5 c# pdf deflatestream .net-4.5
我正在玩通过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
Run Code Online (Sandbox Code Playgroud)
当我尝试使用DeflateStream
类来压缩行时BT 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
Run Code Online (Sandbox Code Playgroud)
Ree*_*sey 10
有没有理由说微软的DeflateStream类的实现不起作用?我是错误地使用它还是实现不正确或者是什么?
DeflateStream
实际上是在实现RFC 1951(DEFLATE),其中PDF使用与RFC 1950兼容的压缩方法进行压缩.在此相关的Microsoft Connect错误报告中,这是详细的解决方法.
一个简单的解决方法是使用第三方压缩库,例如DotNetZip,它将支持正确的格式.话虽如此,Connect报告建议跳过前两个字节可能会导致这种情况在大多数情况下都有效.
归档时间: |
|
查看次数: |
2129 次 |
最近记录: |