我使用iTextSharp从文档中提取一页。 原始文件的大小为1.1 MiB,共有74页。 当我只提取一页时,生成的PDF的大小为1.2 MiB。
我使用此代码:
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();
}
}
答案 0 :(得分:1)
使用
stamper.SetFullCompression();
减少文件大小。
答案 1 :(得分:1)
想象一下包含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页文档不使用压缩对象/压缩外部参照表,则1页文档的文件大小可能高于具有多页文档的文件大小,而具有多页的文档则。您可以通过引入stamper.SetFullCompression();