使用iTextSharp时,分割的PDF大小更大

时间:2011-04-05 13:52:57

标签: pdf split itextsharp using

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

请帮我解决这个问题。

提前致谢

3 个答案:

答案 0 :(得分:1)

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

虽然它对您当前的问题没有帮助,但如果您使用Atalasoft dotImage中的PDF工具,您的任务就变成了1个班轮:

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

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

免责声明:我在Atalasoft工作并编写了PDF库(也用于在Acrobat版本1,2,3和4上的Adobe工作)。

答案 1 :(得分:0)

您是否尝试过在编写器上设置压缩?

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

答案 2 :(得分:0)

嗨大家我修改了上面的代码,将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();

        }