Maison >développement back-end >C++ >Comment fusionner efficacement des PDF en mémoire à la volée à l'aide d'ITextSharp pour l'impression ?

Comment fusionner efficacement des PDF en mémoire à la volée à l'aide d'ITextSharp pour l'impression ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-03 09:54:39850parcourir

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

Fusionner des fichiers PDF en mémoire à la volée avec ItextSharp pour l'impression

Énoncé du problème

Comment concaténer plusieurs PDF générés lors de l'exécution sans connaissances préalables des noms de fichiers en utilisant ItextSharp pour les imprimer ?

Solution

Pour fusionner des PDF à la volée à l'aide d'ItextSharp, deux approches principales existent :

Utiliser PdfCopy (pour préserver le formatage original)

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

Utilisation de PdfWriter (pour Intégration efficace des pages)

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

Résumé du cours

  • PdfCopy : Préserve le formatage d'origine, mais présente des limites en cas de contenu redondant et de gestion des formulaires.
  • PdfCopyFields : Réduit la gestion des formulaires problèmes, mais peut consommer une mémoire importante.
  • PdfSmartCopy : Analyse le contenu pour minimiser les redondances, mais nécessite plus de ressources.
  • PdfWriter : Permet l'intégration de pages sans interactivité préservée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn