Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mencantumkan PDF Dalam Memori dengan Cekap Menggunakan ITextSharp untuk Mencetak?

Bagaimana untuk Mencantumkan PDF Dalam Memori dengan Cekap Menggunakan ITextSharp untuk Mencetak?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-03 09:54:39896semak imbas

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

Menggabungkan Fail PDF Dalam Memori Dengan Cepat dengan ItextSharp untuk Mencetak

Pernyataan Masalah

Cara menggabungkan berbilang PDF yang dijana dalam masa jalan tanpa pengetahuan terlebih dahulu nama fail menggunakan ItextSharp untuk seterusnya percetakan?

Penyelesaian

Untuk menggabungkan PDF dengan cepat menggunakan ItextSharp, dua pendekatan utama wujud:

Menggunakan PdfCopy (untuk Mengekalkan Pemformatan Asal)

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();
}

Menggunakan PdfWriter (untuk Penyepaduan Halaman yang Cekap)

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();
}

Ringkasan Kelas

  • PdfCopy: Mengekalkan pemformatan asal, tetapi mempunyai had dengan kandungan dan bentuk yang berlebihan pengendalian.
  • PdfCopyFields: Mengurangkan isu pengendalian borang, tetapi mungkin menggunakan memori yang ketara.
  • PdfSmartCopy: Menganalisis kandungan untuk meminimumkan lebihan, tetapi memerlukan lebih banyak sumber.
  • PdfWriter: Membenarkan penyepaduan halaman tanpa interaktiviti yang dipelihara.

Atas ialah kandungan terperinci Bagaimana untuk Mencantumkan PDF Dalam Memori dengan Cekap Menggunakan ITextSharp untuk Mencetak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn