Extrair anexos do PDF
Contents
[
Hide
]
Aspose.PDF for Java suporta vários fluxos de extração dependendo de como os anexos são armazenados no documento.
Extrair um único anexo pelo nome
Use este exemplo quando precisar salvar um arquivo incorporado específico de um PDF.
- Abra o PDF de origem em um objeto Document.
- Itere pela coleção de arquivos incorporados até que o nome do anexo necessário seja encontrado.
- Copie o fluxo do anexo para o arquivo de saída e pare após a extração.
public static void extractSingleAttachment(Path inputFile, String attachmentName, Path outputFile) throws Exception {
try (Document document = new Document(inputFile.toString())) {
System.out.println("Extracting attachment: " + attachmentName);
boolean attachmentFound = false;
for (FileSpecification fileSpecification : document.getEmbeddedFiles()) {
if (attachmentName.equals(fileSpecification.getName())) {
try (InputStream inputStream = fileSpecification.getContents();
OutputStream outputStream = Files.newOutputStream(outputFile)) {
inputStream.transferTo(outputStream);
}
System.out.println("Attachment extracted successfully");
attachmentFound = true;
break;
}
}
if (!attachmentFound) {
throw new IllegalArgumentException("Attachment '" + attachmentName + "' not found in PDF");
}
}
}
Imprimir parâmetros de arquivo incorporado
Este método auxiliar imprime os metadados armazenados em um objeto FileParams.
- Verifique se o objeto de parâmetros de arquivo existe.
- Leia o checksum disponível, a data de criação, a data de modificação e os valores de tamanho.
- Imprima os valores no console.
public static void printFileParams(FileParams params) {
if (params != null) {
try {
System.out.println("CheckSum: " + params.getCheckSum());
} catch (Exception ex) {
System.out.println("CheckSum: null");
}
System.out.println("Creation Date: " + params.getCreationDate());
System.out.println("Modification Date: " + params.getModDate());
System.out.println("Size: " + params.getSize());
}
}
Extrair todos os anexos incorporados
Use este exemplo quando cada arquivo incorporado no PDF deve ser gravado em um diretório de saída.
- Abra o PDF de origem em um objeto Document.
- Percorra a coleção de arquivos incorporados e determine um nome de arquivo de saída seguro para cada item.
- Imprima os metadados, salve cada fluxo de anexo e continue até que todos os arquivos sejam exportados.
public static void extractAttachments(Path inputFile, Path outputDir) throws Exception {
try (Document document = new Document(inputFile.toString())) {
System.out.println("Total files: " + document.getEmbeddedFiles().size());
int fileIndex = 1;
for (FileSpecification fileSpecification : document.getEmbeddedFiles()) {
String fileName = fileSpecification.getName();
if (fileName == null || fileName.isBlank()) {
fileName = fileSpecification.getUnicodeName();
}
if (fileName == null || fileName.isBlank()) {
fileName = "attachment_" + fileIndex + ".bin";
}
System.out.println("Name: " + fileName);
System.out.println("Description: " + fileSpecification.getDescription());
System.out.println("Mime Type: " + fileSpecification.getMIMEType());
printFileParams(fileSpecification.getParams());
Path outputPath = outputDir.resolve(fileName);
try (InputStream inputStream = fileSpecification.getContents();
OutputStream outputStream = Files.newOutputStream(outputPath)) {
inputStream.transferTo(outputStream);
}
fileIndex++;
}
}
}
Extrair uma anotação de anexo de arquivo
Use este exemplo quando o arquivo for anexado por meio de uma anotação de página em vez de apenas pela coleção de arquivos incorporados.
- Abra o PDF de origem em um objeto Document.
- Localize o primeiro FileAttachmentAnnotation na página.
- Leia sua especificação de arquivo, exporte o conteúdo e imprima o caminho de destino.
public static void extractFileAttachmentAnnotation(Path inputFile, Path outputDir) throws Exception {
try (Document document = new Document(inputFile.toString())) {
FileAttachmentAnnotation fileAttachment = null;
for (Annotation annotation : document.getPages().get_Item(1).getAnnotations()) {
if (annotation.getAnnotationType() == AnnotationType.FileAttachment) {
fileAttachment = (FileAttachmentAnnotation) annotation;
break;
}
}
if (fileAttachment == null) {
System.out.println("File attachment annotation not found.");
return;
}
FileSpecification fileSpecification = fileAttachment.getFile();
System.out.println("File name: " + fileSpecification.getName());
Path outputPath = outputDir.resolve("extracted-" + fileSpecification.getName());
try (InputStream inputStream = fileSpecification.getContents();
OutputStream outputStream = Files.newOutputStream(outputPath)) {
inputStream.transferTo(outputStream);
}
System.out.println("Extracted to: " + outputPath);
}
}