加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – PDF压缩与iTextSharp

发布时间:2020-12-15 06:28:33 所属栏目:百科 来源:网络整理
导读:我正在尝试重新压缩已经创建的pdf,我试图找到一种方法来重新压缩文档中的图像,以减少文件大小. 我一直在尝试使用DataLogics PDE和iTextSharp库,但我找不到一种方式来做流重新压缩的项目. 我已经有了循环xobjects和获取的图像,然后将DPI降到96或使用libjpeg C
我正在尝试重新压缩已经创建的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进行解码并重写,这将很慢,您可能会失去一些东西.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读