Pdf com Itext

5 respostas
F

Prezados, o que eu faço aqui é recuperar um pdf do banco, inserir uma linha e cada pagina e salvar ele novamente. Ele funciona para maioria, mas para alguns pdfs ele insere o texto transparente, nao aparece no pdf mas se mando localizar ele localiza. existe alguma coisa de PDF protegido ou algo do tipo? alguem sabe como resolver. segue abaixo o codigo.

PdfReader pdfReader = new PdfReader(tp.getSbAnexo());
				qtPaginas = pdfReader.getNumberOfPages();
				 ByteArrayOutputStream stream = new ByteArrayOutputStream();

				PdfStamper stamper = new PdfStamper(pdfReader, stream);
				int totalPaginas = pdfReader.getNumberOfPages() + 1;

				for (int i = 1; i < totalPaginas; i++){
					Rectangle pagesize = new Rectangle(612, 792);

					pagesize.setBackgroundColor(new Color(0x64, 0x95, 0xed));
					
					PdfContentByte pdfContentByte = stamper.getUnderContent(i);
				
					pdfContentByte.setFontAndSize(BaseFont.createFont(BaseFont.TIMES_ROMAN, BaseFont.CP1250, true), 12);
					pdfContentByte.beginText();
					pdfContentByte.setTextMatrix(50, 830);
					pdfContentByte.setColorFill(Color.BLUE);
				
					pdfContentByte.newlineShowText(0, 0, "teste de nova linha -----------------------!"); 
						
				}
				pdfReader.close();
				stamper.close();
				stream.flush();
				stream.close();
				byte[] pdfByte = stream.toByteArray(); 
				tp.setSbAnexo(pdfByte);

obrigado

5 Respostas

K

Olá,

o problema é que nem sempre um texto que se encontra em um PDF é um texto em um PDF.
Muitas vezes, é uma imagem colocada em determinada posição, ou mesmo texto puro mesmo com alguma formatação.

Sendo assim, a edição de documentos PDF com o itext (ou basicamente qualquer outra biblioteca) é sempre um processo muito trabalhoso e altamente impreciso.

No seu caso, nada impede que:
a) o documento esteja protegido de alguma maneira (o Acrobat só descobre isto ao abrir o arquivo, mas como o seu processo é externo, nada impede a inclusão de novas informações em um pdf protegido)
b) há chunks que parecem texto mas são imagens, com ordenação do índice-z, por exemplo, fora do convencional (como um layer por exemplo).

F

Cara, acho que vc matou a charada. os pdfs que estao dando problema sao aqueles que parecem ser uma imagem escaneada. Entao deve estar escrevendo mas a imagem cica por cima ja que a imagem vai ser a folha inteira… sendo assim acho que complicou. será que tem uma forma de colocar uma imagem em cima de outra?

K

pouco provável.
mesmo que fosse, o trabalho que você teria de parsear o documento, certificar-se de que está alterando a imagem correta e em seguida finalizar a tarefa não valeria à pena :frowning:

F

De toda forma agradeco…vou pensar em uma outra solucao. valeu.

V

Boa tarde,
Não sei se este tópico estava fechado, mas foi a partir dele que consegui resolver meu problema.
Estava com um problema um pouco pior que nosso amigo fhsantiago.
eu descobri que quando você usa:

você escreve abaixo do PDF que usou como template, mas dai fica estranho, então resolvi usar a outra opção:

só que por algum motivo que só Deus sabia, ele não escrevia no maldito PDF de template,
então depois de várias pesquisas e bater cabeça percebi quando você escreve um texto com o “UnderContent”,
você abre pdfContentByte.beginText(); mas não precisa fechá-lo, mas com o maldito “OverContent”,
precisa por pdfContentByte.endText(); caso contrário ele não escreve.

espero que isto possa ajudar outras pessoas que esteja sofrendo para escrever acima do template usando IText.

Criado 17 de novembro de 2009
Ultima resposta 14 de ago. de 2014
Respostas 5
Participantes 3