【问题标题】:Huge file size using PdfStamper使用 PdfStamper 的巨大文件大小
【发布时间】:2017-04-13 13:53:48
【问题描述】:

我使用 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();
        }
}

【问题讨论】:

  • “重量”是指文件大小吗?您当前的问题标题看起来像是垃圾邮件广告...
  • 此外,其他非法语国家使用“兆字节”而不是“兆字节”。
  • 我怀疑资源是所有页面共享的,提取单个页面会得到所有包袱。请给我们看PDF。
  • @PauloSoares 不幸的是,我不能。这是一张包含大量客户数据的发票
  • 考虑为压模设置最大压缩。

标签: c# itext


【解决方案1】:

想象一个 3000 KB 的文档,包含十页和以下对象:

  • 每页使用四个字体子集,每个大约 50 KB
  • 十张图片显示在一个页面上,每张大约 200 KB(每页一张图片)
  • 每页显示四张图片,每张大约 50 KB
  • 十页,每个页面的内容流约为 25 KB
  • 大约 350 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();来压缩对象和外部参照表

【讨论】:

  • 非常感谢您的解释。我试过这个但没有结果。请看我的编辑。
  • 我的解释解释了为什么你得到的结果不是你想要的结果。所有页面都有一个共同的资源,该资源负责大部分文件大小。
  • 我的错。我认为你的最后一行是我的解决方案;)
【解决方案2】:

使用

        stamper.SetFullCompression();

减小文件大小。

【讨论】:

  • 谢谢,但它根本不起作用...请参阅我的编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 2022-07-22
相关资源
最近更新 更多