Extraire et Enregistrer une Pièce Jointe

Obtenez Toutes les Pièces Jointes

Avec Aspose.PDF, il est possible d’obtenir toutes les pièces jointes d’un document PDF. Ceci est utile soit lorsque vous souhaitez enregistrer les documents séparément du PDF, soit si vous avez besoin de retirer les pièces jointes d’un PDF.

Pour obtenir toutes les pièces jointes d’un fichier PDF :

  1. Loop à travers la collection EmbeddedFiles de l’objet Document. La collection EmbeddedFiles contient toutes les pièces jointes. Chaque élément de cette collection représente un objet FileSpecification. Chaque itération de la boucle foreach à travers la collection EmbeddedFiles renvoie un objet FileSpecification.
  2. Une fois l’objet disponible, récupérez soit toutes les propriétés du fichier joint soit le fichier lui-même.

Les extraits de code suivants montrent comment obtenir toutes les pièces jointes d’un document PDF.

void WorkingWithAttachments::GetAllAttachments()
{
 String _dataDir("C:\\Samples\\");

 // Ouvrir le document
 auto pdfDocument = new Document(_dataDir + u"GetAlltheAttachments.pdf");

 // Obtenir la collection de fichiers intégrés
 auto embeddedFiles = pdfDocument->get_EmbeddedFiles();

 // Obtenir le nombre de fichiers intégrés
 Console::WriteLine(u"Total files : {0}", embeddedFiles->get_Count());

 int count = 1;

 // Boucle à travers la collection pour obtenir toutes les pièces jointes
 for (auto fileSpecification : embeddedFiles)
 {
  Console::WriteLine(u"Name: {0}", fileSpecification->get_Name());
  Console::WriteLine(u"Description: {0}", fileSpecification->get_Description());
  Console::WriteLine(u"Mime Type: {0}", fileSpecification->get_MIMEType());

  // Vérifier si l'objet paramètre contient les paramètres
  if (fileSpecification->get_Params() != nullptr)
  {
   Console::WriteLine(u"CheckSum: {0}",
    fileSpecification->get_Params()->get_CheckSum());
   Console::WriteLine(u"Creation Date: {0}",
    fileSpecification->get_Params()->get_CreationDate());
   Console::WriteLine(u"Modification Date: {0}",
    fileSpecification->get_Params()->get_ModDate());
   Console::WriteLine(u"Size: {0}", fileSpecification->get_Params()->get_Size());
  }

  // Obtenir la pièce jointe et l'écrire dans un fichier ou un flux
  auto fileContent = MakeArray<uint8_t>(fileSpecification->get_Contents()->get_Length());
  fileSpecification->get_Contents()->Read(fileContent, 0, fileContent->get_Length());
  auto fileStream = System::IO::File::OpenWrite(_dataDir + u"test" + count + u"_out.txt");
  fileStream->Write(fileContent, 0, fileContent->get_Length());
  fileStream->Close();
  count += 1;
 }
}

Obtenir une pièce jointe individuelle

Afin d’obtenir une pièce jointe individuelle, nous pouvons spécifier l’index de la pièce jointe dans l’objet EmbeddedFiles de l’instance Document. Veuillez essayer d’utiliser l’extrait de code suivant.

void WorkingWithAttachments::GetIndividualAttachment() {
    String _dataDir("C:\\Samples\\");

    // Ouvrir le document
    auto pdfDocument = MakeObject<Document>(_dataDir + u"GetIndividualAttachment.pdf");

    // Obtenir un fichier intégré particulier
    auto fileSpecification = pdfDocument->get_EmbeddedFiles()->idx_get(1);

    // Obtenir les propriétés du fichier
    Console::WriteLine(u"Nom: {0}", fileSpecification->get_Name());
    Console::WriteLine(u"Description: {0}", fileSpecification->get_Description());
    Console::WriteLine(u"Type MIME: {0}", fileSpecification->get_MIMEType());

    // Vérifier si l'objet paramètre contient les paramètres
    if (fileSpecification->get_Params() != nullptr)
    {
        Console::WriteLine(u"CheckSum: {0}",
        fileSpecification->get_Params()->get_CheckSum());
        Console::WriteLine(u"Date de création: {0}",
        fileSpecification->get_Params()->get_CreationDate());
        Console::WriteLine(u"Date de modification: {0}",
        fileSpecification->get_Params()->get_ModDate());
        Console::WriteLine(u"Taille: {0}",
        fileSpecification->get_Params()->get_Size());
    }


    // Obtenir la pièce jointe et écrire dans un fichier ou un flux
    auto fileContent = MakeArray<uint8_t>(fileSpecification->get_Contents()->get_Length());
    fileSpecification->get_Contents()->Read(fileContent, 0, fileContent->get_Length());

    auto fileStream = System::IO::File::OpenWrite(_dataDir + u"test_out.txt");
    fileStream->Write(fileContent, 0, fileContent->get_Length());
    fileStream->Close();

}