当我尝试压缩不同级别的pdf文件时,ITextSharp返回相同大小的pdf
我正在阅读pdf并使用itextsharp注入一些内容。 生成的byte[]
与压缩级别一起传递给下面的方法。
public static byte[] method(byte[] pdf,int compressionlevel) { using (MemoryStream outputPdfStream1 = new MemoryStream()) { //PdfReader reader1 = new PdfReader(pdf); //PdfStamper stamper1 = new PdfStamper(reader1, outputPdfStream1); //int level = (int)compressionlevel; //if (level <= 9) // stamper1.Writer.CompressionLevel = (int)compressionlevel; //else // stamper1.Writer.SetFullCompression(); //stamper1.SetFullCompression(); //stamper1.Close(); //byte[] newfile = outputPdfStream1.ToArray(); //return newfile; PdfReader reader = new PdfReader(pdf); PdfStamper stamper = new PdfStamper(reader, outputPdfStream1,PdfWriter.VERSION_1_5); int level = (int)compressionlevel; if (level <= 9) { stamper.Writer.CompressionLevel = level; } else stamper.Writer.SetFullCompression(); int total = reader.NumberOfPages + 1; for (int i = 1; i < total; i++) { reader.SetPageContent(i, reader.GetPageContent(i)); } stamper.SetFullCompression(); stamper.Close(); byte[] newfile = outputPdfStream1.ToArray(); return newfile; } }
如果我评论stamper.SetFullCompression();
然后这个方法返回相同大小的字节数组,而不管传递的压缩级别(在每种情况下从0传递到9)。
如果我取消注释stamper.SetFullCompression();
无论压缩级别如何,此方法都返回输入字节的完全压缩版本!
stamper.SetFullCompression();
的目的/区别是什么stamper.SetFullCompression();
和stamper.Writer.SetFullCompression();
?
使用不同压缩级别的正确方法是什么,以便在每种情况下都可以看到不同的大小?
你有几个问题,我会尽力回答。
PdfStamper
是一个辅助类,它最终使用另一个名为PdfStamperImp
类来完成大部分工作。 PdfStamperImp
派生自PdfWriter
,当你使用stamper.Writer
时,实际上你正在回到这个实现类。 PdfStamper
上的许多属性也直接传递给实现类。 所以这两个电话实际上做同样的事情。
stamper.SetFullCompression(); stamper.Writer.SetFullCompression();
另一个混淆点是SetFullCompression
和CompressionLevel
根本没有关联。 “完全压缩”表示在PDF 1.5中添加的一项称为“对象流”的function,该function允许将PDF对象组合在一起以潜在地允许更大的压缩。 实际上并没有要求我们所谓的“压缩”实际发生,但实际上我认为它总会发生。 (可能一个超级简单的文档可能会变大,启用此function,不确定并且不想测试。)
CompressionLevel
实际上是你通常认为的压缩,从0到9的数字或-1表示默认值(我认为目前等于6)。 这个属性实际上是PdfStream
类的一部分,许多类最终都是从这个类派生出来的。 但是,此设置不会“涓滴”。 由于您是通过GetPageContent()
和GetPageContent()
从其他位置导入流,因此特定流具有与Writer
的压缩设置无关的压缩设置。 实际上有第三个参数可以传递给SetPageContent()
来设置你想要的特定压缩级别。
上述就是C#学习教程:当我尝试压缩不同级别的pdf文件时,ITextSharp返回相同大小的pdf分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
reader.SetPageContent(1, reader.GetPageContent(1), PdfStream.BEST_COMPRESSION);
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/997719.html