c# – PDF压缩与iTextSharp

前端之家收集整理的这篇文章主要介绍了c# – PDF压缩与iTextSharp前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试重新压缩已经创建的pdf,我试图找到一种方法来重新压缩文档中的图像,以减少文件大小.

我一直在尝试使用DataLogics PDE和iTextSharp库,但我找不到一种方式来做流重新压缩的项目.

我已经有了循环xobjects和获取的图像,然后将DPI降到96或使用libjpeg C#修改来改变图像的质量,但将其返回到pdf流似乎总是结束,内存损坏或其他一些问题.

任何样品将不胜感激.

谢谢

解决方法

我不知道iTextSharp,但是如果有任何改变,你必须重写一个PDF文件,因为它包含一个具有每个对象的确切文件位置的外部参照表(索引).这意味着如果添加删除了一个字节,则PDF将被破坏.

您最好的打算重新压缩图像是JBIG2,如果它们是B& W,否则为JPEG2000,Jasper库将高兴地编码JPEG2000码流,以便以任何您想要的质量放置在PDF文件中.

如果是我,我会从没有PDF库的代码中进行.只需找到所有的图像(JPXDecode(JPEG2000),JBIG2Decode(JBIG2)或DCTDecode(JPEG))发生之后的流和端流之间的任何东西拉出来,用Jasper重新编码,然后再次重新插入并更新外部参照表.

要更新外部参照表,请查找每个对象的位置(从00001 0 obj开始),然后更新xref表中的新位置.这不是太多的工作,比听起来更少.您可能可以使用单个正则表达式获得所有偏移量(我不是C#程序员,但在PHP中,这将很简单)

然后,最终使用xref表的开头的偏移值(文件中的xref)来更新预告片中的startxref标签的值.

否则,您将最终对整个PDF进行解码并重写,这将很慢,您可能会失去一些东西.

猜你在找的C#相关文章