English | 日本
BCL Technologies
Shopping CartContact Us
Knowledgebase
BCL easy PDF SDK

Duplizieren von Seiten in einem vorhandenen PDF

Datum: 8. November 2012
Autor: James Coe

In unserem zweiten Verfahren der Woche schauen wir auf Duplizieren einer Seite innerhalb einer bereits bestehenden PDF-Datei. Wie immer, am Ende dieser Seite der vollständige Verfahren wird in C #-Code angezeigt werden, sodass Sie in Ihre Anwendung in ihrer Gesamtheit kopieren und einfügen. Zuvor jedoch werde ich alle einzelnen Schritte des Verfahrens zu decken.

Zunächst erinnern, die richtigen Referenzen zu Ihrem Projekt, und die Verwendung Einträge zu gehen zusammen mit diesen Referenzen. Dieses Projekt wird verlangen, dass die PDFProcessor Library Reference hinzugefügt wird, und wird die folgenden Anforderungen "using" erfordern;

  • using System;
  • using System.IO;
  • using System.Collections;
  • using BCL.easyPDF7.Interop.EasyPDFProcessor;

Als nächstes ist wie folgt den Namen der Methode;

Method Name

Wie Sie vielleicht bemerkt haben, der Name erwähnt ausdrücklich Forms; das ist, weil diese Methode war ursprünglich ein Experiment von unseren Ingenieuren, um zu sehen, ob wir eine Seite in einem bestehenden PDF-Formular zu duplizieren und zu erhalten, dass Seiten, Formularfelder. Nach der Bestimmung, dass wir könnten, teilten die Ingenieure eine Version von dieser Methode, die ich leicht modifiziert. Ich werde Ihnen versichern, diese Methode funktioniert genauso gut auf normalen, nicht-Formular PDF-Dateien.

Wie für die Methode selbst, ist es beabsichtigt, zwei String-Variablen, zwei Integer-Variablen nehmen und sendet eine String-Variable. Der Rückgabewert ist ein String, der einen Statusbericht enthalten soll, entweder einen Bericht über die erfolgreiche Umsetzung, mit dem Namen der Ausgabedatei erzeugt, oder die richtigen Fehlerberichte.

  • InFileName sollte das folgende Format verwenden; @"C:\YourFolderName\InName.pdf"
  • OutFileName sollte das folgende Format verwenden; @"C:\YourFolderName\OutName.pdf" Alternativ können Sie einen Wert von null für outfilename geben und die Methode eine outpuf Dateiname auf seine eigene zu erzeugen.
  • PageToDuplicate sollte ein Integer-Wert ab einem Index von 1 sein. Der Code selbst wird dies zu einer 0-index Integer konvertieren, wenn verwendet.
  • TimestoDuplicate sollte eine Ganzzahl von mindestens 1 ist.

Weiter erklären wir die Grundschul Variablen und Objekte.

Declaring Variables

Sobald diese deklariert sind, prüft ein kleines Wenn-dann-Aussage, um sicherzustellen, dass die Eingabedatei wurde beide angegeben und existiert. Dieser Block prüft auch, ob ein Null-Variable als das Output weitergegeben, und wenn ja, erzeugt einen Dateinamen in dem Eingangsverzeichnis .

Check Input Directory

Als nächstes initialisieren wir den Prozessor Objekt, das zuvor erstellt wurde. Hier bewerbe ich mich auch den Lizenzschlüssel mit dem BCL Lizenzierung Methode und ein einfaches Testschlüssel.

Gather Input Files

Diese Probe Verfahren wurde entwickelt, um nicht auf temporäre Dateien zu verlassen, und wird lediglich in Erinnerung zu arbeiten. Als solche werden wir das Processor Object verwenden, um die Seiten in den Speicher extrahieren, wie unten dargestellt;

Create Processor Object

Diese große Code-Abschnitt Extrahiert alle Seiten in eine von drei Kategorien Seite. Die Vorder Gesamtheit der Seiten, bevor die Seite dupliziert werden, dem Nahen wobei nur die Seite dupliziert werden, und die Back Gesamtheit der folgenden Seiten. Auf diese Weise können wir eine sehr einfache for-Schleife alle Seiten in der Arraylist für die Zusammenführung positionieren. Dies könnte auch modifiziert, um einen Seitenbereich zu ergreifen, um zu duplizieren.

Merge the Files

Sobald die Seiten sind in der Arraylist geladen, ist alles, was bleibt, eine sehr einfache Aufruf für die Processor.MergeBatchMem ()-Methode.

Merge the Files

Von dort können Sie die OutFileMem nehmen, da nur eine einfache Byte [] Array, und tun, was Sie wollen. Da es in Erinnerung ist, dass Sie es using OpenMem () in die ProcessorHandle laden konnte, und führen weitere Operationen darauf oder duplizieren mehrere Seiten mit nur einer leichten Veränderung der bestehenden Code. In meinem Beispiel Methode dann benutze ich die nativen IO capabilites des Systems, um die Byte [] Stream als PDF zu speichern.

Merge the Files

Und hier ist der Code des Voll Methode ist, bereit, um Ihre Anwendung hinzugefügt werden;

          
    public string DuplicateSpecificPageInForm(
        string InFileName, 
        string OutFileName, 
        int PageToDuplicate, 
        int TimesToDuplicate)
    {
        // Declare Necessary Variables and Objects
        string result = null;
        PDFProcessor oProcessor = null;

        byte[] InFileMem = null;
        byte[] OutFileMem = null;

        ArrayList OutputFilePieces = null;
        byte[] FileSection_Front = null;
        byte[] FileSection_Middle = null;
        byte[] FileSection_Back = null;

        // Load InFileName into Memory
        if (InFileName == null)
        {
            result = "ERROR : Input File Not Specified";
            return result;
        }
        else if (!File.Exists(InFileName))
        {
            result = "ERROR : Input File does not Exist";
            return result;
        }
        else
        {
            InFileMem = File.ReadAllBytes(InFileName);
        }
        //If OutFileName is NUll, provide a Default File Name
        if (OutFileName == null) 
        {
            OutFileName = InFileName + "_OUT.pdf";
        }

        // Create Processor Object
        try
        {
            oProcessor = new PDFProcessor();
            oProcessor.LicenseKey = "4755-E1ED-5296-DD76-7E75-89CC";
            //If you are using the BCL Licensing System, enter your License Key Here;
        }
        catch (Exception errCreate)
        {
            result = "Attempt to create PDFProcessor oProcessor Failed : Message : "
                + errCreate.Message + " : Inner Exception : " + errCreate.InnerException;
            return result;
        }

        //Extract Front Pages
        try
        {
            FileSection_Front = 
                (byte[])oProcessor.ExtractPagesMem(
                    InFileMem, 
                    0,
                    PageToDuplicate - 2);
        }
        catch (Exception errCreate)
        {
            result = "Attempt to Extract the Front Pages Failed : Message : "
                + errCreate.Message + " : Inner Exception : " + errCreate.InnerException;
            return result;
        }
        //Extract Page to Duplicate
        try
        {
            FileSection_Middle =
                (byte[])oProcessor.ExtractPagesMem(
                    InFileMem, 
                    PageToDuplicate - 1,
                    PageToDuplicate - 1);
        }
        catch (Exception errCreate)
        {
            result = "Attempt to Extract the Target Page Failed : Message : "
                + errCreate.Message + " : Inner Exception : " + errCreate.InnerException;
            return result;
        }
        //Extract Back Pages
        try
        {
            FileSection_Back = 
                (byte[])oProcessor.ExtractPagesMem(
                    InFileMem, 
                    PageToDuplicate,
                    oProcessor.GetPageCount(InFileName)-1);
        }
        catch (Exception errCreate)
        {
            result = "Attempt to Extract the Back Pages Failed : Message : "
                + errCreate.Message + " : Inner Exception : " + errCreate.InnerException;
            return result;
        }

        //Add the Pages to the ArrayList
        OutputFilePieces = new ArrayList();
        OutputFilePieces.Add(FileSection_Front);
        for (int i = 1; i <= TimesToDuplicate; i++)
        {
            OutputFilePieces.Add(FileSection_Middle);
        }
        OutputFilePieces.Add(FileSection_Back);

        //Merge The Pieces Together
        try
        {
            OutFileMem = oProcessor.MergeBatchMem(OutputFilePieces.ToArray());
        }
        catch (Exception errRun)
        {
            result = "Attempt to Merge the Documents Failed : Message : "
                + errRun.Message + " : Inner Exception : " + errRun.InnerException;
            return result;
        }

        //Save the Output to the specified File Name
        try
        {
            File.WriteAllBytes(OutFileName, OutFileMem);
            result = "Success! Output File saved to : " + OutFileName.ToString();
            return result;
        }
        catch (Exception errRun)
        {
            result = "Attempt to Save the Output Failed : Message : "
                + errRun.Message + " : Inner Exception : " + errRun.InnerException;
            return result;
        }
    }
          

Wenn Sie Fragen zu oder Probleme mit dieser Methode haben, oder wenn Sie irgendwelche Ideen für Methoden, die Sie sehen möchten, mich zu erstellen haben, senden Sie mir bitte eine E-Mail (Vorzugsweise mit "Method of the Week" oder "MotW" in seinem Thema ) an;

jcoe@bcltechnologies.com.

Glücklich Coding!

Um diese Methode verwenden, müssen Sie haben easyPDF SDK in Ihrem Rechner installiert

Herunterladen

-
 
BCL
© 1993 - , BCL Technologies.
All other trademarks are the property of their respective owners.