GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Alterar conteúdo de arquivo pdf?


#1

Pessoal,

Estou precisando alterar o conteúdo de um arquivo pdf. Tipo: colocar em cada página de um arquivo pdf já existente a data, dono do arquivo, número de paginas ... etc.

Algúem sabe como fazer isto??


#2

Dá uma estudada no iText, acho que ele resolve seu problema.

Blz? Flw! :thumbup:


#3

Se o PDF for criptografado (ou seja, se ele for bloqueado para impressão ou para modificação), é necessário decifrá-lo antes (ou remover o bloqueio). Use o próprio Adobe Acrobat (não o Reader) para remover esse bloqueio, ou se isso não for possível, use o GhostScript + GSViewer.

Uma forma estúpida (e muito rápida) de fazer o que você quer é a seguinte: crie um PDF do jeito que você quer, só que em formato texto (não binário, nem criptografado ou em Base-85). Isso é possível ajustando-se as configurações do Adobe Acrobat Distiller. Aí como é um arquivo texto, é relativamente fácil fazer as substituições desejadas.


#4

Valeu Juliano, resolvi com itext. Segue abaixo o código da solução!

PdfReader reader = new PdfReader("relatoriooriginal.pdf");
System.out.println("NÚMERO DE PAGINAS: " + reader.getNumberOfPages() + " - " + reader.getInfo() + " - " + reader.getFileLength());

		PdfStamper pdfStamper = new PdfStamper(reader, new FileOutputStream("relatorionovo.pdf") );

		int totalPaginas = reader.getNumberOfPages() + 1;

		for	(int i = 1; i < totalPaginas; i++){
			PdfContentByte pdfContentByte = pdfStamper.getUnderContent(i);
			pdfContentByte.setFontAndSize(BaseFont.createFont(BaseFont.TIMES_ROMAN, BaseFont.CP1250, true), 12);
			pdfContentByte.beginText();
			pdfContentByte.setTextMatrix(50, 830);

Só não testei ainda a questão levantada pelo Thiago, quando o arquivo for protegido!

			pdfContentByte.newlineShowText(0, 0, "teste de nova linha -----------------------!");
		}

		pdfStamper.close();

#5

E como vc salvou isso no banco, teria que colocar num byte[]. nao? como converte isso em um byte[]?


#6

Olá ricardo.tec , cara eu fui usar o código que você postou em um pdf que esta na raiz do meu pc, e quando eu executei ele corrompeu o arquivo.

erro do eclipse
Exception in thread "main" java.io.EOFException
at com.itextpdf.text.pdf.RandomAccessFileOrArray.readFully(RandomAccessFileOrArray.java:292)
at com.itextpdf.text.pdf.RandomAccessFileOrArray.readFully(RandomAccessFileOrArray.java:284)
at com.itextpdf.text.pdf.PdfReader.getStreamBytesRaw(PdfReader.java:2300)
at com.itextpdf.text.pdf.PdfReader.getStreamBytesRaw(PdfReader.java:2337)
at com.itextpdf.text.pdf.PdfStamperImp.close(PdfStamperImp.java:272)
at com.itextpdf.text.pdf.PdfStamper.close(PdfStamper.java:189)
at InsertPage.main(InsertPage.java:44)

ele paresentou um erro na linha: " pdfStamper.close(); "

Cara eu ti pesso a tua ajuda que eu não manjo muito da API Itext.


#7