【问题标题】:ITextSharp merged pdf size increasedITextSharp合并的pdf大小增加
【发布时间】:2017-01-05 20:05:16
【问题描述】:

以下代码用于将多个pdf文件合并为一个文件

public byte[] MergePdfFiles(IEnumerable<byte[]> files)
{
    using (var stream = new MemoryStream())
    {
        var pdfDoc = new iTextSharp.text.Document();
        var pdf = new PdfCopy(pdfDoc, stream);
        pdf.SetMergeFields();

        pdfDoc.Open();

        foreach (var file in files)
        {
            try
            {
                pdf.AddDocument(new PdfReader(file));
            }
            catch (InvalidPdfException ex)
            {
                _loggingServiceClient.Log(LogLevel.Error, ex);
                throw;
            }
        }

        pdfDoc.Close();

        return stream.GetBuffer();
    }
}

代码运行良好,但生成的文件大小几乎是所有合并文件总大小的两倍。我尝试添加一些压缩指令,例如pdf.CompressionLevel = PdfStream.BEST_COMPRESSION;pdf.SetFullCompression();,但没有成功。

请注意,在 acrobat 阅读器中从生成的文件中执行简单的 saveAs 会生成一个大小合适的新文件(每个合并文件的组合大小)。

我还尝试了其他合并文件的方法,例如使用 addPage 方法,结果相同。

【问题讨论】:

    标签: c# pdf-generation itext


    【解决方案1】:

    请试一试:

    public byte[] MergePdfFiles(IEnumerable<byte[]> files)
    {
        using (var stream = new MemoryStream())
        {
            var pdfDoc = new iTextSharp.text.Document();
            var pdf = new PdfSmartCopy(pdfDoc, stream);
            pdf.SetMergeFields();
    
            pdfDoc.Open();
    
            foreach (var file in files)
            {
                try
                {
                    pdf.AddDocument(new PdfReader(file));
                }
                catch (InvalidPdfException ex)
                {
                    _loggingServiceClient.Log(LogLevel.Error, ex);
                    throw;
                }
            }
    
            pdfDoc.Close();
    
            return stream.GetBuffer();
        }
    }
    

    如果您没有立即看到您自己的代码的不同之处:我将PdfCopy 更改为PdfSmartCopy。如果这没有帮助(以及使用完全压缩),那么几乎没有人可以做。主要原因可能是 iText 无法将不同文件的字体子集组合成一种新字体(这是 Acrobat 用来减小文件大小的技巧之一)。

    【讨论】:

      猜你喜欢
      • 2016-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-22
      • 2013-03-09
      • 2012-07-31
      • 2023-03-22
      • 1970-01-01
      相关资源
      最近更新 更多