首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PdfStamper的巨大文件大小

使用PdfStamper的巨大文件大小
EN

Stack Overflow用户
提问于 2017-04-13 13:53:48
回答 2查看 636关注 0票数 1

我使用iTextSharp从文档中提取一个页面。原始文档的大小为1.1MiB,有74页。当我只提取一个页面时,生成的PDF大小为1.2MiB。

我使用以下代码:

代码语言:javascript
复制
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

为什么文件大小这么大?

-编辑--我也试过了,结果完全一样:

代码语言:javascript
复制
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();
        }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-14 16:26:47

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

  • 每页使用四个字型子集,每页约50 KB
  • 每页上有10幅图片,每幅约200 KB (每页一幅)
  • 每页有四幅图片,每幅约50 KB。
  • 10页,每页内容流约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页文档不使用压缩对象/压缩的xref表,则1页文档的文件大小可以大于多页文档的文件大小,而具有多页的文档可以这样做。通过引入stamper.SetFullCompression();,可以压缩对象和xref表。

票数 2
EN

Stack Overflow用户

发布于 2017-04-14 15:46:46

使用

代码语言:javascript
复制
        stamper.SetFullCompression();

以减少文件大小。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43394184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档