2

PDFファイルを読み取り、ページを個別のPDFドキュメントとして分割するC#アプリでiTextSharpを使用しています。ポートフォリオの場合を除いて、それはうまく機能します。今、私は2つの埋め込まれたPDFドキュメントを含むPDFポートフォリオ(またはiTextで呼ばれているように見えるコレクション)を読み取る方法を理解しようとしています。ポートフォリオを開いて、埋め込まれたファイルを列挙し、それらを個別の単純なPDFファイルとして保存したいと思います。

プログラムでPDFポートフォリオを 作成する方法の良い例がここにあります:キューブリックコレクションの例

しかし、ポートフォリオを読む例は見たことがありません。どんな助けでも大歓迎です!

4

1 に答える 1

3

参照した例では、埋め込みファイルをドキュメントレベルの添付ファイルとして追加しています。したがって、次のようにファイルを抽出できます。

PdfReader reader = new PdfReader(readerPath);
PdfDictionary root = reader.Catalog;
PdfDictionary documentnames = root.GetAsDict(PdfName.NAMES);
PdfDictionary embeddedfiles = 
    documentnames.GetAsDict(PdfName.EMBEDDEDFILES);
PdfArray filespecs = embeddedfiles.GetAsArray(PdfName.NAMES);
for (int i = 0; i < filespecs.Size; ) {
  filespecs.GetAsString(i++);
  PdfDictionary filespec = filespecs.GetAsDict(i++);
  PdfDictionary refs = filespec.GetAsDict(PdfName.EF);
  foreach (PdfName key in refs.Keys) {
    PRStream stream = (PRStream) PdfReader.GetPdfObject(
      refs.GetAsIndirectObject(key)
    );

    using (FileStream fs = new FileStream(
      filespec.GetAsString(key).ToString(), FileMode.OpenOrCreate
    )){
      byte[] attachment = PdfReader.GetStreamBytes(stream);
      fs.Write(attachment, 0, attachment.Length);
    }
  }
} 

これをテストする場合は、コンストラクター( )を参照したKubrickコレクションの例からの出力ファイルを渡します。PdfReaderreaderPath

今月、C#の例をバージョン5.2.0.0から更新する時間があればいいのですが(iTextSharpバージョンは現在Javaバージョンより約3週間遅れています)。

于 2012-08-17T20:55:06.817 に答える