Heim > Backend-Entwicklung > C++ > Wie kann ich In-Memory-PDFs mithilfe von ITextSharp zum Drucken effizient im Handumdrehen zusammenführen?

Wie kann ich In-Memory-PDFs mithilfe von ITextSharp zum Drucken effizient im Handumdrehen zusammenführen?

Mary-Kate Olsen
Freigeben: 2025-01-03 09:54:39
Original
867 Leute haben es durchsucht

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

In-Memory-PDF-Dateien im Handumdrehen mit ItextSharp zum Drucken zusammenführen

Problembeschreibung

So verketten Sie mehrere zur Laufzeit generierte PDFs ohne Vorkenntnisse von Dateinamen mit ItextSharp für nachfolgende Drucken?

Lösung

Um PDFs im Handumdrehen mit ItextSharp zusammenzuführen, gibt es zwei Hauptansätze:

Verwenden von PdfCopy (zur Beibehaltung der Originalformatierung)

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();
}
Nach dem Login kopieren

Verwenden von PdfWriter (für Efficient Seitenintegration)

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();
}
Nach dem Login kopieren

Klassenzusammenfassung

  • PdfCopy: Behält die ursprüngliche Formatierung bei, weist jedoch Einschränkungen aufgrund redundanter Inhalte und Formularverarbeitung auf.
  • PdfCopyFields: Reduziert Probleme bei der Formularverarbeitung, kann jedoch verbrauchen erheblicher Speicher.
  • PdfSmartCopy: Analysiert Inhalte, um Redundanzen zu minimieren, erfordert aber mehr Ressourcen.
  • PdfWriter: Ermöglicht die Seitenintegration ohne erhaltene Interaktivität.

Das obige ist der detaillierte Inhalt vonWie kann ich In-Memory-PDFs mithilfe von ITextSharp zum Drucken effizient im Handumdrehen zusammenführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage