Home • ChemFormatter • iText.NET • JFreeChart.NET • ConcatPDF • iTextFront • TIFF2PPT • J by J# • Programming J#
MSN Search

iText.NET

iText .NET
@SourceForge
ライセンス
更新履歴
ダウンロード
使い方
J# Examples
C# Examples
VB.NET Examples
コンパイル
ConcatPDF
iText (Java)
J by J#

 

チュートリアル: iText.NET

Manipulating existing PDF documents

作成中
序論
メーリングリストでもっともよく尋ねられる質問として、既存のPDFファイルの'competitor' という単語を 'myself' という単語に置き換えたいとか、既存のPDFファイルの'FREE'という単語に下線を引きたいというものがある。もしも、あなたのやりたいことがそのようなことなら、これ以下を読むことをやめてもかまいません。iText ではこのようなことはできません(訳注:PdfObject の操作により不可能ではありませんが、iText と PDF シンタックスに対する深い理解が必要です)。iText は、PDF中のテキストをほかのRTFやWORDはもちろん、ただのテキストのような'可読'文書フォーマットに変換することはできません。iText に、文書中のある単語がどのように表現されているかとか、ページ中の位置などを問い合わせることはできません。
それでは、iText ができること見てみましょう。何をしたいかによりますが、次の既存PDF文書の操作をするためのオブジェクトのひとつを使うことになるでしょう。
PdfWriterは、スクラッチから文書を生成するものですが、ほかのPDF文書からインポートしたページについてもサポートしています。しかし、PdfWriterを使うと、PdfImportedPage の対話機能(注釈、しおり、フィールドなど)が処理中に失われるという大きな欠点があります。
PdfStampeは、既存のひとつのPDF文書のコンテンツを操作することができます。例えば、ページ番号を加える、すかしを加える、フォームフィールドを埋めるたり平滑化したりする、既存のPDF文書を署名したり、暗号化したりする、などなど。
PdfEncryptor は、既存の文書を暗号化するより使いやすいクラスです。内部で、PdfStamper を呼び出します。
PdfCopy は、複数の既存PDF文書から(選択した)ページを結合することができます。しおりも調整できますが、フォームフィールドは失われることがあります。PdfCopy は、新しいコンテンツの追加はできません。
PdfCopyFields は、複数のPDF文書を結合し、フィールドも保持します(複数のソースファイルをフィールドを、ひとつのAcroFormに出力します)。
例を見る前に、出力ファイルは、入力ファイルと異なる名前でなければならないことを覚えておいてください! PdfReaderによってファイルを開いたら、PdfWriter/PdfStamper/PdfCopy でそのファイルに書き込むことはできません。既存のファイルを'編集'したいなら、一時ファイルを使い、操作が終わったあとで名前を変更する必要があります。

 

  • PdfWriter は、スクラッチから文書を生成するものですが、ほかのPDF文書からインポートしたページについてもサポートしています。しかし、PdfWriterを使うと、PdfImportedPage の対話機能(注釈、しおり、フィールドなど)が処理中に失われるという大きな欠点があります。
  • PdfStamper は、既存のひとつのPDF文書のコンテンツを操作することができます。例えば、ページ番号を加える、すかしを加える、フォームフィールドを埋めるたり平滑化したりする、既存のPDF文書を署名したり、暗号化したりする、などができます。
  • PdfEncryptor は、既存の文書を暗号化するより使いやすいクラスです。内部で、PdfStamper を呼び出します。
  • PdfCopy は、複数の既存PDF文書から(選択した)ページを結合することができます。しおりも調整できますが、フォームフィールドは失われることがあります。PdfCopy は、新しいコンテンツの追加はできません!
  • PdfCopyFields は、複数のPDF文書を結合し、フィールドも保持します(複数のソースファイルをフィールドを、ひとつのAcroFormに出力します)。

例を見る前に、出力ファイルは、入力ファイルと異なる名前でなければならないことを覚えておいてください! PdfReaderによってファイルを開いたら、PdfWriter/PdfStamper/PdfCopy でそのファイルに書き込むことはできません。既存のファイルを'編集'したいなら、一時ファイルを使い、操作が終わったあとで名前を変更する必要があります。

先頭に戻る
PdfWriter
スクラッチから文書を作成したいなら、Hello World の章にある五つの手順を見てください。ステップ 2で、新しいコンテンツを書き込む PdfWriter を作成します。新しいコンテンツは、Document オブジェクトに加える高機能オブジェクトであったり、PdfContentByte オブジェクトに加えるダイレクトコンテンツであったりします。PdfImportedPage は、ダイレクトコンテンツとして加えることができるオブジェクトです。PdfImportedPage は、PdfReader から次のように得ます。
PdfReader reader = new PdfReader("existing.pdf");
PdfImportedPage page1 = writer.getImportedPage(reader, 1);
directcontent.addTemplate(page1, 1, 0, 0, 1, 0, 0);
PdfImportedPage オブジェクトのコンテンツを変更できないことは注意してください。ページの上あるいは下にコンテンツを追加したならば、PdfContentByte オブジェクトを PdfWriter に問い合わせなければなりません。これは、addTemplate メソッドのパラメータとして、チュートリアルのダイレクトコンテンツで説明されています。下の例では、インポートされたページが縮小されて、縦長の2ページが横長の1ページに収まっています。
Example: java com.lowagie.examples.general.copystamp.TwoOnOne
Combines 2 pages on 1: see 2on1.pdf
External resources for this example: ChapterSection.pdf
先頭に戻る
PdfStamper
一つの既存のPDFファイルのコンテンツを変更したい、すかし、ページ番号、ヘッダ、などのコンテンツを追加したいような時には、PdfStamper を使うことができます。
PdfReader reader = new PdfReader("existing.pdf");
PdfStamper stamp = new PdfStamper(reader,
  new FileOutputStream("stamped.pdf"));
PdfContentByte under = stamp.getUnderContent(1);
// change the content beneath page 1
PdfContentByte over = stamp.getOverContent(1);
// change the content on top of page 1
stamp.close()

繰り返しになりますが、テキストやイメージなどを加える方法は、ダイレクトコンテンツの章を読んでください。下の例では、テキストの背面にすかしを、最上部に'DUPLICATE'という文字を加えます。さらに、タイトルページも追加しています。

Example: java com.lowagie.examples.general.copystamp.AddWatermarkPageNumbers
Adds pagenumbers and a watermark to an existing document: see watermark_pagenumbers.pdf
External resources for this example: ChapterSection.pdf SimpleAnnotations1.pdf watermark.jpg
PdfStamper は、AcroForms を埋める必要があるときにも使うことができるクラスです。次に、簡単なフォームを埋める例を示します。ひとつは平滑化せず、ひとつは平滑化しています。フォームを埋めるの章に、より多くの例があります。
Example: java com.lowagie.examples.general.copystamp.Register
Fills in a form: see registered.pdf registered_flat.pdf
External resources for this example: SimpleRegistrationForm.pdf
既存文書を暗号化するために、PdfStamper を使うこともできますが、よりわかりやすいメソッドを提供している PdfEncryptor というヘルパークラスがあります。
PdfEncryptor.encrypt(reader,
  new FileOutputStream("encrypted.pdf"),
  "Hello".getBytes(),
  "World".getBytes(),
  PdfWriter.AllowPrinting | PdfWriter.AllowCopy,
  false)
例では、'Hello' をユーザパスワードに設定しているので、Acrobat Reader で文書を開くときにそれが必要です。'World' は、オーナーパスワードです。(PdfReader のような)アプリケーションでそれを読むときに必要です。四つのパラメータは、許可するものを定義します。これは、次の定数を OR でつないで指定します。
  • PdfWriter.AllowPrinting
  • PdfWriter.AllowModifyContents
  • PdfWriter.AllowCopy
  • PdfWriter.AllowModifyAnnotations
  • PdfWriter.AllowFillIn (128 bit only)
  • PdfWriter.AllowScreenReaders (128 bit only)
  • PdfWriter.AllowAssembly (128 bit only)
  • PdfWriter.AllowDegradedPrinting (128 bit only)
boolean は、40 ビット暗号化か、128 bit暗号化の選択をします。
Example: java com.lowagie.examples.general.copystamp.EncryptorExample
Encrypts an existing PDF file: see encrypted.pdf
External resources for this example: ChapterSection.pdf
先頭に戻る
PdfCopy
PdfStamper がある文書にできることは、新しいページを追加することだけなので、ひとつあるいはそれ以上のPDFファイルから(ある選ばれた)ページをコピーして、一つのPDFを得たいような場合には、PdfCopy を使うのが良いでしょう。ひとつあるいはそれ以上のPDFファイルのコンテンツを変更する必要はない(たぶんしおりだけでしょう)なら、PdfCopyのシンタックスは、PdfWriterのシンタックスと非常によく似ています。
PdfReader reader = new PdfReader("existing.pdf");
Document document = new Document(reader.getPageSizeWithRotation(1));
PdfCopy copy = new PdfCopy(document, new FileOutputStream(outFile));
document.open();
PdfImportedPage page = copy.getImportedPage(reader, i);
copy.addPage(page);
document.close();
次の例は、既存PDFファイルを結合するコマンドラインツールとしても利用できます。
Example: java com.lowagie.examples.general.copystamp.Concatenate ChapterSection.pdf Destinations.pdf SimpleAnnotations1.pdf concatenated.pdf
Concatenates existing PDF files: see concatenated.pdf
External resources for this example: ChapterSection.pdf Destinations.pdf SimpleAnnotations1.pdf
PdfCopy には、AcroForms を含んだファイルでは、うまく働かないという大きな問題があります。さまざまなAcroFormを含んだ既存の複数のPDFファイルを結合したいときには、PdfCopyFields クラスを使わなければなりません。PdfCopy と違って、すべての文書がメモリ上に保持されます。フォームフィールドの結合に関する規則性は、Acrobat と同じです。同じ名前のフィールドがあるときには、そのままマージされてしまいますが、そのようなときには名前を変更したほうが良いでしょう。
Example: java com.lowagie.examples.general.copystamp.ConcatenateForms
Concatenates existing PDF files with forms: see concatenatedforms.pdf
External resources for this example: SimpleRegistrationForm.pdf TextFields.pdf ChapterSection.pdf
先頭に戻る

Copyright (C) 2001-2007 Kazuya Ujihara. All rights reserved.