添付ファイルを抽出して保存する

すべての添付ファイルを取得

Aspose.PDFを使用すると、PDFドキュメントからすべての添付ファイルを取得することができます。これは、PDFから別々にドキュメントを保存したい場合や、PDFから添付ファイルを削除する必要がある場合に便利です。

PDFファイルからすべての添付ファイルを取得するには:

  1. Document オブジェクトの EmbeddedFiles コレクションをループします。EmbeddedFiles コレクションにはすべての添付ファイルが含まれています。このコレクションの各要素は FileSpecification オブジェクトを表します。EmbeddedFiles コレクションをforeachループする各反復で FileSpecification オブジェクトが返されます。

次のコードスニペットは、PDFドキュメントからすべての添付ファイルを取得する方法を示しています。

次のコードスニペットもAspose.PDF.Drawingライブラリで動作します。

// 完全な例とデータファイルについては、https://github.com/aspose-pdf/Aspose.PDF-for-.NET をご覧ください
// ドキュメントディレクトリへのパスです。
string dataDir = RunExamples.GetDataDir_AsposePdf_Attachments();

// ドキュメントを開く
Document pdfDocument = new Document(dataDir + "GetAlltheAttachments.pdf");

// 埋め込まれたファイルのコレクションを取得
EmbeddedFileCollection embeddedFiles = pdfDocument.EmbeddedFiles;

// 埋め込まれたファイルの数を取得
Console.WriteLine("合計ファイル数 : {0}", embeddedFiles.Count);

int count = 1;

// コレクションをループしてすべての添付ファイルを取得
foreach (FileSpecification fileSpecification in embeddedFiles)
{
    Console.WriteLine("名前: {0}", fileSpecification.Name);
    Console.WriteLine("説明: {0}",
    fileSpecification.Description);
    Console.WriteLine("MIMEタイプ: {0}", fileSpecification.MIMEType);

    // パラメータオブジェクトにパラメータが含まれているかどうかを確認
    if (fileSpecification.Params != null)
    {
        Console.WriteLine("チェックサム: {0}",
        fileSpecification.Params.CheckSum);
        Console.WriteLine("作成日: {0}",
        fileSpecification.Params.CreationDate);
        Console.WriteLine("変更日: {0}",
        fileSpecification.Params.ModDate);
        Console.WriteLine("サイズ: {0}", fileSpecification.Params.Size);
    }

    // 添付ファイルを取得してファイルまたはストリームに書き込む
    byte[] fileContent = new byte[fileSpecification.Contents.Length];
    fileSpecification.Contents.Read(fileContent, 0,
    fileContent.Length);
    FileStream fileStream = new FileStream(dataDir + count + "_out" + ".txt",
    FileMode.Create);
    fileStream.Write(fileContent, 0, fileContent.Length);
    fileStream.Close();
    count+=1;
}

個別の添付ファイルを取得

個別の添付ファイルを取得するために、DocumentインスタンスのEmbeddedFilesオブジェクトで添付ファイルのインデックスを指定することができます。以下のコードスニペットを使用してみてください。

// 完全な例とデータファイルについては、https://github.com/aspose-pdf/Aspose.PDF-for-.NET をご覧ください
// ドキュメントディレクトリへのパスです。
string dataDir = RunExamples.GetDataDir_AsposePdf_Attachments();

// ドキュメントを開く
Document pdfDocument = new Document(dataDir + "GetIndividualAttachment.pdf");

// 特定の埋め込みファイルを取得
FileSpecification fileSpecification = pdfDocument.EmbeddedFiles[1];

// ファイルのプロパティを取得
Console.WriteLine("名前: {0}", fileSpecification.Name);
Console.WriteLine("説明: {0}", fileSpecification.Description);
Console.WriteLine("MIMEタイプ: {0}", fileSpecification.MIMEType);

// パラメータオブジェクトがパラメータを含んでいるかチェック
if (fileSpecification.Params != null)
{
    Console.WriteLine("チェックサム: {0}",
    fileSpecification.Params.CheckSum);
    Console.WriteLine("作成日: {0}",
    fileSpecification.Params.CreationDate);
    Console.WriteLine("変更日: {0}",
    fileSpecification.Params.ModDate);
    Console.WriteLine("サイズ: {0}", fileSpecification.Params.Size);
}

// 添付ファイルを取得し、ファイルまたはストリームに書き込む
byte[] fileContent = new byte[fileSpecification.Contents.Length];
fileSpecification.Contents.Read(fileContent, 0, fileContent.Length);

FileStream fileStream = new FileStream(dataDir + "test_out" + ".txt", FileMode.Create);
fileStream.Write(fileContent, 0, fileContent.Length);
fileStream.Close();