PDFBox - Inserindo Imagem
No capítulo anterior, vimos como extrair texto de um documento PDF existente. Neste capítulo, discutiremos como inserir imagem em um documento PDF.
Inserindo imagem em um documento PDF
Você pode inserir uma imagem em um documento PDF usando o createFromFile() e drawImage() métodos das aulas PDImageXObject e PDPageContentStream respectivamente.
A seguir estão as etapas para extrair texto de um documento PDF existente.
Etapa 1: Carregando um documento PDF existente
Carregue um documento PDF existente usando o método estático load() do PDDocumentclasse. Este método aceita um objeto de arquivo como parâmetro, uma vez que é um método estático, você pode invocá-lo usando o nome da classe conforme mostrado abaixo.
File file = new File("path of the document")
PDDocument doc = PDDocument.load(file);
Etapa 2: Recuperando uma página
Selecione uma página no documento PDF e recupere seu objeto de página usando o getPage() método conforme mostrado abaixo.
PDPage page = doc.getPage(0);
Etapa 3: Criação do objeto PDImageXObject
A classe PDImageXObjectna biblioteca PDFBox representa uma imagem. Ele fornece todos os métodos necessários para realizar operações relacionadas a uma imagem, como inserir uma imagem, definir sua altura, definir sua largura etc.
Podemos criar um objeto desta classe usando o método createFromFile(). Para este método, precisamos passar o caminho da imagem que queremos adicionar na forma de uma string e o objeto de documento ao qual a imagem deve ser adicionada.
PDImageXObject pdImage = PDImageXObject.createFromFile("C:/logo.png", doc);
Etapa 4: preparando o fluxo de conteúdo
Você pode inserir vários tipos de elementos de dados usando o objeto da classe chamada PDPageContentStream. Você precisa passar o objeto de documento e o objeto de página para o construtor desta classe, portanto, instancie essa classe passando esses dois objetos criados nas etapas anteriores, conforme mostrado abaixo.
PDPageContentStream contentStream = new PDPageContentStream(doc, page);
Etapa 5: Desenhar a imagem no documento PDF
Você pode inserir uma imagem no documento PDF usando o drawImage()método. Para este método, você precisa adicionar o objeto de imagem criado na etapa acima e as dimensões necessárias da imagem (largura e altura) como mostrado abaixo.
contentstream.drawImage(pdImage, 70, 250);
Etapa 6: Fechando o PDPageContentStream
Feche o PDPageContentStream objeto usando o close() método conforme mostrado abaixo.
contentstream.close();
Etapa 7: Salvar o documento
Depois de adicionar o conteúdo necessário, salve o documento PDF usando o save() método do PDDocument classe conforme mostrado no seguinte bloco de código.
doc.save("Path");
Etapa 8: Fechando o Documento
Finalmente, feche o documento usando o close() método do PDDocument classe como mostrado abaixo.
doc.close();
Exemplo
Suponha que temos um documento PDF chamado sample.pdf, no caminho C:/PdfBox_Examples/ com páginas vazias como mostrado abaixo.
Este exemplo demonstra como adicionar imagem a uma página em branco do documento PDF mencionado acima. Aqui, vamos carregar o documento PDF chamadosample.pdfe adicionar imagem a ele. Salve este código em um arquivo com o nomeInsertingImage.java.
import java.io.File;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
public class InsertingImage {
public static void main(String args[]) throws Exception {
//Loading an existing document
File file = new File("C:/PdfBox_Examples/sample.pdf");
PDDocument doc = PDDocument.load(file);
//Retrieving the page
PDPage page = doc.getPage(0);
//Creating PDImageXObject object
PDImageXObject pdImage = PDImageXObject.createFromFile("C:/PdfBox_Examples/logo.png",doc);
//creating the PDPageContentStream object
PDPageContentStream contents = new PDPageContentStream(doc, page);
//Drawing the image in the PDF document
contents.drawImage(pdImage, 70, 250);
System.out.println("Image inserted");
//Closing the PDPageContentStream object
contents.close();
//Saving the document
doc.save("C:/PdfBox_Examples/sample.pdf");
//Closing the document
doc.close();
}
}
Compile e execute o arquivo Java salvo no prompt de comando usando os comandos a seguir.
javac InsertingImage.java
java InsertingImage
Após a execução, o programa acima insere uma imagem na página especificada do documento PDF fornecido exibindo a seguinte mensagem.
Image inserted
Se você verificar o documento sample.pdf, você pode observar que uma imagem está inserida nele conforme mostrado abaixo.