我使用iTextSharp从文档中提取一个页面。原始文档的大小为1.1MiB,有74页。当我只提取一个页面时,生成的PDF大小为1.2MiB。
我使用以下代码:
using (MemoryStream ms = new MemoryStream())
{
using (PdfReader readerTemp = new PdfReader(btFile))
{
readerTemp.SelectPages(new int[] {1});
using (PdfStamper stamper = new PdfStamper(readerTemp, ms))
{ }
}
bt = ms.ToArray();
}我也用同样的结果尝试了Jay R answer's。
为什么文件大小这么大?
-编辑--我也试过了,结果完全一样:
using (MemoryStream ms = new MemoryStream())
{
using (PdfReader readerTemp = new PdfReader(btFile))
{
reader.SetPageContent(1, reader.GetPageContent(1), PdfStream.BEST_COMPRESSION, true);
readerTemp.SelectPages(new int[] {1});
using (PdfStamper stamper = new PdfStamper(readerTemp, ms, PdfWriter.VERSION_1_5))
{
stamper.SetFullCompression();
}
}发布于 2017-04-14 16:26:47
设想一个包含10页和以下对象的3000 KB文档:
一个页面至少需要:-四个字体子集:4乘以50 KB -单个图像:1乘以200 KB -四幅图像:4倍50 KB -一个内容流:1倍50 KB -一个稍微缩小的交叉参考表,一个稍微缩小的页面树,一个几乎相同的目录,一个相同大小的字典信息,200 KB
总共是850 KB。这意味着,如果将一个10页的3000 KB PDF文档分成10页,则最终得到8500 KB (10乘以850 KB)。
在您的例子中,共享的资源是巨大的。我假设您有一个发票,它是使用扫描图像创建的,用作每个页面的背景。扫描的背景确定文件大小的大容量。
如果1页文档不使用压缩对象/压缩的xref表,则1页文档的文件大小可以大于多页文档的文件大小,而具有多页的文档可以这样做。通过引入stamper.SetFullCompression();,可以压缩对象和xref表。
发布于 2017-04-14 15:46:46
使用
stamper.SetFullCompression();以减少文件大小。
https://stackoverflow.com/questions/43394184
复制相似问题