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

Páginas de duplicar en un PDF existente

fecha: 08 de noviembre 2012
Autor: James Coe

En nuestro Segundo Método de la semana, nos fijamos en la duplicación de una página dentro de un archivo PDF ya existente. Como siempre, en la parte inferior de esta páginael método de integración se mostrará en código C #, lo que le permite copiar y pegar en su aplicación en su totalidad. Antes de eso, sin embargo, voy a cubrir todas las etapas individuales del método.

En primer lugar, recuerde que debe agregar las referencias adecuadas a su proyecto, y el using entries para ir junto con estas referencias. Este proyecto requerirá que se añade el PDFProcessor Library Reference, y requerirá el siguiente "using" entradas

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

A continuación, el Nombre del Método es el siguiente;

Method Name

Como te habrás dado cuenta, el nombre se menciona específicamente las formas; eso se debe a que este método fue originalmente un experimento de nuestros ingenieros para ver si podíamos duplicar una página en un formulario PDF existente y preservar que las páginas Form Fields. Después de determinar que pudimos, los ingenieros compartieron una versión de este método, que he modificado ligeramente. Yo aseguro que este método funciona igual de bien en los archivos PDF no forma normal.

En cuanto al propio método, se pretende tomar dos variables de cadena, dos variables enteras, y devuelva una variable de cadena. El valor devuelto es una cadena que contendrá un informe de situación, ya sea un informe de la conversión con éxito, con el nombre del Output File producido, o los informes de errores propios.

  • InFileName debe utilizar el siguiente formato; @"C:\YourFolderName\InName.pdf"
  • OutFileName debe utilizar el siguiente formato; @"C:\YourFolderName\OutName.pdf" Alternativamente, se puede pasar un valor null para OutFileName y el método generará un outpuf Nombre del archivo en sí mismo.
  • PageToDuplicate debe ser un valor entero a partir de un índice de 1. El Código en sí convertirá a un entero 0-índice cuando se utiliza.
  • TimestoDuplicate debe ser un valor entero de al menos 1.

A continuación, declaramos las variables primarias y objetos.

Declaring Variables

Una vez que éstos hayan sido declarados, una pequeña instrucción if comprueba para asegurarse de que el Input File fue especificados, además existe. Este bloque también comprueba para ver si se pasa una variable nulo como OutputFileName, y de ser así, genera un nombre de archivo dentro del directorio Input.

Check Input Directory

A continuación, inicializar el objeto Processor que se creó anteriormente. Aquí también me aplico la clave de licencia utilizando el Método de Licencias BCL y una clave de prueba simple.

Gather Input Files

Este método de muestreo está diseñado para no depender de los archivos temporales, y trabajará exclusivamente en la Memoria. Como tal, utilizaremos el objeto Processor extraer las páginas en la memoria, como se muestra a continuación;

Create Processor Object

Esta sección grande de Código Extrae todas las páginas en una de tres categorías Página. El Frente de si todas las páginas antes de la página que desea duplicar, siendo el Oriente sólo la página a duplicarse, y el Back si todas las páginas que siguen. De esta manera, podemos utilizar un muy simple para Loop para posicionar todas las páginas en el ArrayList para la fusión. Esto también podría ser modificado para tener un intervalo de páginas que desea duplicar.

Merge the Files

Una vez que las páginas se cargan en el ArrayList, todo lo que queda es una llamada muy simple para el método Processor.MergeBatchMem ().

Merge the Files

Desde allí, se puede tomar el OutFileMem, siendo sólo un Byte[] Array,y hacer lo que quieras. Dado que es en memoria que puede mostrarse en la ProcessorHandle usando OpenMem () y realizar otras operaciones sobre el mismo, o duplicado más páginas con sólo un pequeño cambio en el código existente. En mi método muestra que luego utilizo los Capabilites IO nativas del sistema para guardar el Byte[] Stream en formato PDF.

Merge the Files

Y aquí está el código completo de Método, listo para ser añadido a su aplicación;

          
    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 usted tiene alguna pregunta o problema relacionado con este método, o si usted tiene alguna idea para los métodos que le gustaría verme crear, por favor envíeme un correo electrónico (de preferencia con el "Method of the Week" o "MOTW" en su tema ) en;

jcoe@bcltechnologies.com.

Feliz Codificación!

Para utilizar este método, es necesario tener easyPDF SDK instalado en su máquina

Descargar

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