Extraer y Guardar un Adjunto
Contents
[
Hide
]
Obtener Todos los Adjuntos
Con Aspose.PDF, es posible obtener todos los adjuntos de un documento PDF. Esto es útil ya sea cuando desea guardar los documentos por separado del PDF, o si necesita eliminar los adjuntos de un PDF.
Para obtener todos los adjuntos de un archivo PDF:
- Recorrer la colección EmbeddedFiles del objeto Document. La colección EmbeddedFiles contiene todos los archivos adjuntos. Cada elemento de esta colección representa un objeto FileSpecification. Cada iteración del bucle foreach a través de la colección EmbeddedFiles devuelve un objeto FileSpecification.
- Una vez que el objeto está disponible, recupere las propiedades del archivo adjunto o el archivo en sí.
Los siguientes fragmentos de código muestran cómo obtener todos los archivos adjuntos de un documento PDF.
void WorkingWithAttachments::GetAllAttachments()
{
String _dataDir("C:\\Samples\\");
// Abrir documento
auto pdfDocument = new Document(_dataDir + u"GetAlltheAttachments.pdf");
// Obtener colección de archivos incrustados
auto embeddedFiles = pdfDocument->get_EmbeddedFiles();
// Obtener el conteo de los archivos incrustados
Console::WriteLine(u"Total de archivos : {0}", embeddedFiles->get_Count());
int count = 1;
// Recorrer la colección para obtener todos los archivos adjuntos
for (auto fileSpecification : embeddedFiles)
{
Console::WriteLine(u"Nombre: {0}", fileSpecification->get_Name());
Console::WriteLine(u"Descripción: {0}", fileSpecification->get_Description());
Console::WriteLine(u"Tipo MIME: {0}", fileSpecification->get_MIMEType());
// Verificar si el objeto parámetro contiene los parámetros
if (fileSpecification->get_Params() != nullptr)
{
Console::WriteLine(u"CheckSum: {0}",
fileSpecification->get_Params()->get_CheckSum());
Console::WriteLine(u"Fecha de creación: {0}",
fileSpecification->get_Params()->get_CreationDate());
Console::WriteLine(u"Fecha de modificación: {0}",
fileSpecification->get_Params()->get_ModDate());
Console::WriteLine(u"Tamaño: {0}", fileSpecification->get_Params()->get_Size());
}
// Obtener el adjunto y escribir en archivo o flujo
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;
}
}
Obtener un Adjunto Individual
Para obtener un adjunto individual, podemos especificar el índice del adjunto en el objeto EmbeddedFiles
de la instancia de Documento. Por favor, intente usar el siguiente fragmento de código.
void WorkingWithAttachments::GetIndividualAttachment() {
String _dataDir("C:\\Samples\\");
// Abrir documento
auto pdfDocument = MakeObject<Document>(_dataDir + u"GetIndividualAttachment.pdf");
// Obtener archivo incrustado en particular
auto fileSpecification = pdfDocument->get_EmbeddedFiles()->idx_get(1);
// Obtener las propiedades del archivo
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());
// Verificar si el objeto parámetro contiene los parámetros
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());
}
// Obtener el adjunto y escribirlo en un archivo o flujo
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();
}