Alterar conteúdo de arquivo pdf??  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
ricardo.tec
Entusiasta Java

Membro desde: 15/02/2007 15:33:30
Mensagens: 20
Offline

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??

von.juliano
GUJ Master
[Avatar]

Membro desde: 15/01/2007 13:31:32
Mensagens: 1312
Offline

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

Blz? Flw!

É difícil manter-se religioso quando algumas pessoas simplesmente não são carbonizadas por raios!

Simplificando o desenvolvimento de Software! - http://simpledev.com.br/
[Email] [WWW]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17572
Offline

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.

[WWW]
ricardo.tec
Entusiasta Java

Membro desde: 15/02/2007 15:33:30
Mensagens: 20
Offline

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();
fhsantiago
JavaGuru

Membro desde: 05/05/2006 15:58:40
Mensagens: 200
Offline

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

Membro desde: 23/09/2010 08:36:34
Mensagens: 24
Offline

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.
[Email] [MSN]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team