【问题标题】:Splitted PDF size is larger when using the iTextSharp使用 iTextSharp 时,拆分后的 PDF 尺寸更大
【发布时间】:2011-04-05 13:52:57
【问题描述】:

尊敬的团队, 在我的应用程序中,我想使用 itextsharp 拆分 pdf。如果我上传的 PDF 包含 10 页文件大小为 10 mb 的拆分,拆分后每个 pdf 的合并文件大小将导致文件大小超过 20mb。如果这可以减少文件大小(每个pdf)。

请帮我解决问题。

提前致谢

【问题讨论】:

  • 能看到输入输出的PDF吗?

标签: pdf split itextsharp using


【解决方案1】:

这可能与文件中的资源有关。例如,如果原始文档在每个文档上都使用嵌入的字体,那么原始文件中将只有一个字体实例。当您拆分它时,每个文件也需要具有该字体。总开销将是 n 页 × sizeof(每种字体)。会导致这种膨胀的元素包括字体、图像、颜色配置文件、文档模板(又名表单)、XMP 等。

虽然它不能帮助您解决眼前的问题,但如果您使用Atalasoft dotImage 中的 PDF 工具,您的任务就会变成 1 行:

PdfDocument.Separate(userpassword, ownerpassword, origPath, destFolder, "Separated Page{0}.pdf", true);

这将在 orig 文件中获取 PDF 并在 dest 文件夹中创建新页面,每个页面都以该模式命名。最后的布尔值是覆盖现有文件。

免责声明:我在 Atalasoft 工作并编写了 PDF 库(也曾在 Adob​​e 工作过 Acrobat 版本 1、2、3 和 4)。

【讨论】:

    【解决方案2】:

    大家好,我修改了上面的代码,将一个 PDF 文件拆分为多个 Pdf 文件。

            iTextSharp.text.pdf.PdfReader reader = null;
            int currentPage = 1;
            int pageCount = 0;
            //string filepath_New = filepath + "\\PDFDestination\\";
    
            System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
            //byte[] arrayofPassword = encoding.GetBytes(ExistingFilePassword);
            reader = new iTextSharp.text.pdf.PdfReader(filepath);
            reader.RemoveUnusedObjects();
            pageCount = reader.NumberOfPages;
            string ext = System.IO.Path.GetExtension(filepath);
            for (int i = 1; i <= pageCount; i++)
            {
                iTextSharp.text.pdf.PdfReader reader1 = new iTextSharp.text.pdf.PdfReader(filepath);
                string outfile = filepath.Replace((System.IO.Path.GetFileName(filepath)), (System.IO.Path.GetFileName(filepath).Replace(".pdf", "") + "_" + i.ToString()) + ext);
                reader1.RemoveUnusedObjects();
                iTextSharp.text.Document doc = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(currentPage));
                iTextSharp.text.pdf.PdfCopy pdfCpy = new iTextSharp.text.pdf.PdfCopy(doc, new System.IO.FileStream(outfile, System.IO.FileMode.Create));
                doc.Open();
                for (int j = 1; j <= 1; j++)
                {
                    iTextSharp.text.pdf.PdfImportedPage page = pdfCpy.GetImportedPage(reader1, currentPage);
                    pdfCpy.SetFullCompression();
                    pdfCpy.AddPage(page);
                    currentPage += 1;
                }
                doc.Close();
                pdfCpy.Close();
                reader1.Close();
                reader.Close();
    
            }
    

    【讨论】:

      【解决方案3】:

      您是否尝试过在 writer 上设置压缩?

      Document doc = new Document();
          using (MemoryStream ms = new MemoryStream())  
          {
              PdfWriter writer = PdfWriter.GetInstance(doc, ms);
              writer.SetFullCompression();
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-16
        • 1970-01-01
        • 2019-01-26
        • 1970-01-01
        • 2016-05-20
        • 2015-02-16
        相关资源
        最近更新 更多