Размер разделенного PDF больше при использовании iTextSharp - PullRequest
1 голос
/ 05 апреля 2011

Уважаемая команда, В моем приложении я хочу разделить PDF с помощью itextsharp. Если я загружаю PDF-файл, содержащий 10 страниц с размером файла 10 МБ для разделения, то после разделения размер файла объединения каждого файла PDF приведет к тому, что размер файла превысит 20 МБ. Если это возможно, чтобы уменьшить размер файла (каждый PDF).

Пожалуйста, помогите мне решить проблему.

Заранее спасибо

Ответы [ 3 ]

1 голос
/ 05 апреля 2011

Это может быть связано с ресурсами в файле. Если в исходном документе, например, используется встроенный шрифт, то в исходном файле будет только один экземпляр шрифта. Когда вы разделяете его, каждый файл будет иметь этот шрифт. Общая нагрузка составит n страниц и раз; sizeof (каждый шрифт). Элементы, вызывающие раздувание, включают шрифты, изображения, цветовые профили, шаблоны документов (формы), XMP и т. Д.

И хотя это не поможет вам в вашей насущной проблеме, если вы используете инструменты PDF в Atalasoft dotImage, ваша задача превращается в 1 строчку:

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

, который возьмет PDF в файл orig и создаст новые страницы в папке dest, каждая из которых будет названа с шаблоном. В конце bool перезаписывает существующий файл.

Отказ от ответственности: я работаю в Atalasoft и написал библиотеку PDF (также использовалась в Adobe для Acrobat версий 1, 2, 3 и 4).

0 голосов
/ 01 марта 2013

Привет, ребята. Я изменил приведенный выше код, чтобы разделить файл 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();

        }
0 голосов
/ 05 апреля 2011

Вы пробовали установить сжатие на писателе?

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