English | 日本
C++ PDF
Shopping CartContact Us PDF C#
Knowledgebase
BCL easy PDF SDK

既存のPDFへページをコピー

日付:2012年11月8日
作成者: James Coe

今週の2つ目のMethodは、既にあるPDFファイル内にページをコピーする方法を考察します。 いつもと同様に、このページの一番下に、全メソッドをC#コードで表示してありますますので、お 手持ちのアプリケーションにコード全てをコピー&ペーストすることができます。しかしその前に メソッドの個々のステップについて解説します。

第一に、適切なReferencesをProjectに追加することと、これらのReferencesに合ったUsing Entriesを追加することを忘れないでください。このプロジェクトにはPDFProcessor Library Referenceが追加されていることが必要であり、以下に記載の"using" エントリーが必要になり ます。

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

次に、MethodのNameが以下のようになります。

Method Name

お気づきのように、名前は特にFormsを表しており、このメソッドは当初、既存のPDF Form にページをコピーでき、そのページのForm Fieldsを保持できるかどうかを確認するための 弊社エンジニアたちによる実験でした。可能であると確定した後、エンジニアたちはこのメソ ッドのバージョンをシェアし、私が少しだけ変更を施しました。将来、このメソッドが通常の non-Form PDF Files上でも等しく動作するようにします。

Method自身に関して言えば、2つのストリング変数、2つの整数変数を取得し、そして一つのスト リング変数を返すのを目的としています。戻り値は文字列で、生成されたOutput Fileの名前ま たは適切なエラーレポートと共に、ステータスレポート、または変換成功のレポートを含みます

  • InFileNameは次のフォーマットを使用しなければなりません; @"C:\YourFolderName\InName.pdf"
  • outpuf File Name on its own. あるいは、OutFileName用のヌル値をパスすることができ、メソッドは、それ自身の名前で出力 File Nameを作り出します。
  • outpuf File Name on its own. あるいは、OutFileName用のヌル値をパスすることができ、メソッドは、それ自身の名前で出力 File Nameを作り出します。
  • TimestoDuplicateは少なくとも1の整数値でなければなりません。

次に、Primary VariablesとObjectsを宣言します。

Declaring Variables

一旦これらが宣言されたら、Input Directoryが指定されており、そして存在していることを確認 するために小さなif-thenステートメントがチェックをします。また、このブロックはヌル値が OutputFileNameとしてパスされていたかどうか、もしそうであれば、入力ディレクトリ内でファイ ル名を作成しているかどうかもチェックします。

Check Input Directory

次に、以前に作成したProcessor Objectをイニシャライズします。ここでBCL Licensing Method と単純なTrial Keyを使用してLicense Keyも適用させます。.

Gather Input Files

このサンプルメソッドはTemporary Filesに依存しないように、そしてMemory内で単純に動作す るように設計されています。以下に示すように、PagesをExtractするためのProcessorオブジェク トを使用します。;

Create Processor Object

Codeのこの大きなセクションはページ全てを3つのページカテゴリのうちの1つの中に抽出しま す。Frontは ためのページのみ、そしてBackは後に続く全てのページになります。この方法は、Loopがマー ジのためのArrayList中の全てのページの位置を定めるために、とてもシンプルに使用すること ができます。

Merge the Files

一旦ページがArrayList内にロードされると、残ったすべてはProcessor.MergeBatchMem()メソッ ドのためのとてもシンプルなコールになります。

Merge the Files

そこから、OutFileMemを取得でき、1つのシンプルなByte[] Arrayになり、そして望むこと何でも できるようになります。それがMemory内にあるので、OpenMem()を使用したProcessorHandle内 にロードでき、そして更なるオペレーションを実行することが可能で、または、既存のコードを少 しだけ変更することでもっとページをコピーできます。サンプルMethodにおいて、PDFとして Byte[] StreamをセーブするためにSystemのネイティブIO能力を使用しています。

Merge the Files

そして、こちらが全Methodのコードで、お手持ちのアプリケーションに追加できるようになってい ます。;

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

こちらのメソッドについてご質問や問題が発生した場合、または今後作成してもらいたい Methodsについてのアイディアがありましたら、(メールの件名に"Method of the Week"または "MotW"と記載していただき)下記のアドレスまでEメールをお送りください。

jcoe@bcltechnologies.com.

楽しいコーディングを!

To use this method, you need to have easyPDF SDK installed in your machine

ダウンロード

PDF SDK Knowledgebase
 
BCL
© 1993 - , BCL Technologies.
弊社以外の全ての商標は、各所有者に帰属します。