ホームページ >バックエンド開発 >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 をオンザフライで結合するには、主に 2 つのアプローチがあります:

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: コンテンツを分析して冗長性を最小限に抑えますが、より多くのメモリが必要になりますresource.
  • PdfWriter: インタラクティブ性を維持したままページ統合を可能にします。

以上が印刷に ITextSharp を使用して、メモリ内の PDF をその場で効率的に結合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。