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.