首页 >后端开发 >C++ >如何使用 ITextSharp 高效地即时合并内存中的 PDF 进行打印?

如何使用 ITextSharp 高效地即时合并内存中的 PDF 进行打印?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-03 09:54:39862浏览

How to Efficiently Merge In-Memory PDFs on the Fly Using ITextSharp for Printing?

使用 ItextSharp 即时合并内存中的 PDF 文件进行打印

问题陈述

如何在没有先验知识的情况下连接运行时生成的多个 PDF使用 ItextSharp 的文件名进行后续处理打印?

解决方案

要使用 ItextSharp 即时合并 PDF,存在两种主要方法:

使用 PdfCopy(用于保留原始格式)

using System.Collections.Generic;
using iText.Kernel.Pdf;
using iText.Kernel.Pdf.Canvas.Parser;
using iText.Kernel.Pdf.PdfDocument;
using iText.Kernel.Pdf.PdfWriter;

byte[] mergedPdf = null;
using (MemoryStream ms = new MemoryStream())
{
    using (Document document = new Document())
    {
        using (PdfCopy copy = new PdfCopy(document, ms))
        {
            document.Open();

            for (int i = 0; i < pdf.Count; ++i)
            {
                PdfDocument reader = new PdfDocument(new PdfReader(pdf[i]));
                for (int page = 0; page < reader.GetNumberOfPages(); )
                {
                    copy.AddPage(copy.GetImportedPage(reader, ++page));
                }
            }
        }
    }

    mergedPdf = ms.ToArray();
}

使用 PdfWriter (用于高效的页面集成)

using System.Collections.Generic;
using iText.Kernel.Pdf;
using iText.Kernel.Pdf.Canvas.Parser;
using iText.Kernel.Pdf.PdfDocument;
using iText.Kernel.Pdf.PdfWriter;

byte[] mergedPdf = null;
using (MemoryStream ms = new MemoryStream())
{
    using (PdfWriter writer = new PdfWriter(ms))
    {
        PdfDocument document = new PdfDocument(writer);
        PdfDocumentBuilder pdfBuilder = new PdfDocumentBuilder(document);

        for (int i = 0; i < pdf.Count; ++i)
        {
            PdfDocument reader = new PdfDocument(new PdfReader(pdf[i]));
            for (int page = 0; page < reader.GetNumberOfPages(); )
            {
                PdfCanvas canvas = new PdfCanvas(pdfBuilder.GetPageAt(++page));
                PdfFormXObject importedPage = new PdfFormXObject(reader.GetPage(page));
                canvas.AddImportedPage(importedPage);
            }
        }
    }

    mergedPdf = ms.ToArray();
}

类摘要

  • PdfCopy:保留原始格式,但对冗余内容和表单处理有限制.
  • PdfCopyFields:减少表单处理问题,但可能会消耗大量内存。
  • PdfSmartCopy:分析内容以最大限度地减少冗余,但需要更多资源。
  • PdfWriter:允许页面集成而不保留交互性。

以上是如何使用 ITextSharp 高效地即时合并内存中的 PDF 进行打印?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn