私は正常にこのようなコードを使用してPDFポートフォリオのファイルの内容を抽出しています:PDFポートフォリオファイルに埋め込まれたファイルの順序は?
internal void ExtractAttachments(string file_name, string folderName) {
PdfDictionary documentNames = null;
PdfDictionary embeddedFiles = null;
PdfDictionary fileArray = null;
PdfDictionary file = null;
PRStream stream = null;
using (PdfReader reader = new PdfReader(file_name)) {
PdfDictionary catalog = reader.Catalog;
documentNames = (PdfDictionary)PdfReader.GetPdfObject(catalog.Get(PdfName.NAMES));
if (documentNames != null) {
embeddedFiles = (PdfDictionary)PdfReader.GetPdfObject(documentNames.Get(PdfName.EMBEDDEDFILES));
if (embeddedFiles != null) {
PdfArray filespecs = embeddedFiles.GetAsArray(PdfName.NAMES);
for (int i = 0; i < filespecs.Size; i++) {
i++;
fileArray = filespecs.GetAsDict(i);
file = fileArray.GetAsDict(PdfName.EF);
foreach (PdfName key in file.Keys) {
stream = (PRStream)PdfReader.GetPdfObject(file.GetAsIndirectObject(key));
string attachedFileName = fileArray.GetAsString(key).ToString();
byte[] attachedFileBytes = PdfReader.GetStreamBytes(stream);
System.IO.File.WriteAllBytes(Path.Combine(folderName, attachedFileName), attachedFileBytes);
}
}
}
}
}
}
しかし、私は彼らが元に表示しているよりも、これらのコンポーネントのファイルが異なる順序で抽出されていることに気付きましたAdobe Reader XIを使用したPDF。これらのコンポーネントファイルの表示順序は、「インデックス」プロパティで明示的に指定されています。このプロパティは、ファイルモード(レイアウトモードではなく)でPortfolioファイルを表示するように選択し、コンポーネントファイルを右クリックしてコンテキストメニューから[表示]> [インデックス]を選択します。
私の質問:PDFポートフォリオファイルからファイルを抽出する前に、この「インデックス」プロパティを見つけるにはどうすればよいですか?
明らかに私自身の質問でタグを編集することはできません。おそらく誰かが[itext]タグを削除して[itextsharp]タグを追加するのに十分親切でしょうか? – Windy
itextタグとitextsharpタグは、どちらも同じAPIを記述しているため、同義です(Javaで実装されたものとC#で実装されたもの)。 –
@AmedeeVanGasse私は理解していますが、私のコードスニペットはC#であり、実際には.NET解決策を探しています。私はitextsharpが将来のサーチャーにとってより適切なタグであると考えました。もちろん、Java/iTextのソリューションも見たいと思っています! – Windy