English | 日本
BCL Technologies
Shopping CartContact Us
Base de connaissances
BCL easy PDF SDK

Pages de duplication dans un PDF existant

Date: 8 novembre 2012
auteur: James Coe

Dans notre deuxième Method of the week, nous regardons la duplication d'une page dans un fichier PDF existant. Comme toujours,au bas de cette page la méthode complète sera affichée dans le code C #, vous permettant de copier et de le coller dans votre application dans son intégralité. Avant cela cependant, je vais couvrir l'ensemble des différentes étapes de la méthode.

Tout d'abord, n'oubliez pas d'ajouter les références appropriées à votre projet, et l'aide des entrées pour aller avec ces références. Ce projet nécessitera que Library Reference PDFProcessor est ajouté, et nécessitera la suivante "using" entrées;

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

Ensuite, le nom de la méthode est la suivante;

Method Name

Comme vous avez pu le remarquer, le nom mentionne spécifiquement les formes; c'est parce que cette méthode était à l'origine une expérience de nos ingénieurs afin de voir si nous pouvions reproduire une page dans un formulaire PDF existant et préserver que les pages form fields. Après avoir déterminé que nous pouvions, les ingénieurs ont partagé une version de cette méthode, que j'ai légèrement modifié. Je vous assure cette méthode fonctionne aussi bien sur la non-forme de fichiers PDF normal.

Quant à la méthode elle-même, il est prévu de prendre deux variables de chaîne, deux variables entières, et retourner une variable de chaîne. La valeur de retour est une chaîne qui contiendra un rapport de situation, soit un rapport de la conversion réussie, avec le nom du Output File produit, ou les rapports d'erreur appropriés.

  • InFileName doit utiliser le format suivant; @"C:\YourFolderName\InName.pdf"
  • OutFileName doit utiliser le format suivant; @"C:\YourFolderName\OutName.pdf" Alternativement, vous pouvez passer une valeur null pour outfilename et la méthode allez générer un outpuf Nom du fichier lui-même.
  • PageToDuplicate doit être une valeur entière à partir d'un indice de 1. Le Code se convertira à un Entier 0-index lorsqu'il est utilisé.
  • TimestoDuplicate doit être un nombre entier d'au moins 1.

Ensuite, nous déclarons les variables primaires et les objets.

Declaring Variables

Une fois ceux-ci sont déclarés, une petite instruction if-then vérifie pour s'assurer que le Input File a été à la fois précisé et existe. Ce bloc vérifie également pour voir si une variable nul a été passé comme OutputFileName, et si oui, génère un nom de fichier dans le répertoire d'entrée.

Check Input Directory

Ensuite, nous initialiser l'objet de processeur qui a déjà été créé. Ici je demande également la clé de licence en utilisant la méthode d'octroi de licences BCL et une Clé de première instance simple.

Gather Input Files

Cette méthode d'échantillonnage est conçu pour ne pas compter sur les fichiers temporaires, et fonctionnera uniquement en mémoire. En tant que tel, nous allons utiliser l'objet Processeur pour extraire les pages en mémoire, comme indiqué ci-dessous;

Create Processor Object

Cette grande section de code Extraits toutes les pages dans l'une des trois catégories de la page. Le Front par l'ensemble des pages avant la page à dupliquer, le Moyen-être que la page à être dupliqué, et le Retour par l'ensemble des pages qui suivent. De cette façon, nous pouvons utiliser un très simple pour la boucle de positionner toutes les pages dans ArrayList pour la fusion. Cela pourrait également être modifié pour prendre une série de pages à reproduire.

Merge the Files

Une fois les pages sont chargées dans ArrayList, tout ce qui reste est un appel très simple pour le méthode Processor.MergeBatchMem().

Merge the Files

De là, vous pouvez prendre le OutFileMem, étant un simple Byte[] Array, et faire ce que vous voulez. Comme il est dans la mémoire, vous pouvez le charger dans le ProcessorHandle utilisant OpenMem () et effectuer d'autres opérations sur elle, ou de dupliquer plusieurs pages avec une légère modification au code existant. Dans ma Method d'échantillonnage J'utilise ensuite les capabilites IO natives du système pour enregistrer le Byte[] Stream au format PDF.

Merge the Files

Et voici le code de la Method complète, prête à être ajouté à votre demande;

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

Si vous avez des questions ou des problèmes concernant cette méthode, ou si vous avez des idées pour les méthodes que vous aimeriez me voir créer, s'il vous plaît envoyez-moi un e-mail (de préférence avec "Method of the week" ou "MOTW" dans son sujet ) à;

jcoe@bcltechnologies.com.

Bonne codage!

Pour utiliser cette méthode, vous devez avoir easyPDF SDK installé sur votre machine

Télécharger

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