Problemas com criação e manipulação de PDF

3 respostas
arcZend

bom dia, saudações amigos do guj.

estou com um problema quando tento manipular um pdf, no caso eu tenho q mesclar 2 pdfs para gerar um 3º pdf q é o 1º com o 2º no msm arquivo, isso eu consegui numa boa, esta funcionando redondinho.

o problema é que preciso criar uma copia deste e criptografa em base64 para que seja aberta em outro lugar(não posso dar detalhes do pq é assim) e ai esta o problema ele até gera o novo pdf(a copia da mistura dos 2 pdfs originais), porem ao tentar abri-lo é exibida a seguinte menssagem:

não pode abrir ‘arq0.pdf’ pq não a esse tipo de arquivo ou ele foi danificado(por exemplo, foi enviado como anexo de email e não foi decodificado corretamente)

ja tentei algumas coisas, ja olhei a url e não achei o erro.

se alguem ja passou por esse tipo de problema e puder dar uma luz eu fico realemente agradecido

segue as partes do codigo:

onde cria o 1º pdf(mistura dos 2 pdfs originais) e criptografa em base64, o arquivo gerado nessa parte abre sem problemas

String pathPDFFinal = thisClassURL.getFile().split("WEB-INF")[0] + System.getProperty("file.separator")+ "temp"+ System.getProperty("file.separator")+ "TMP___" + grupo.getCOD_PROPOSTA() + "_" + grupo.getobjeto_analise() + ".pdf"; 

PdfCopyFields pdfsConcatenados = new PdfCopyFields(new FileOutputStream(pathPDFFinal));

			   			for(grupoLinksGroupBean link : links){
			   				PdfReader pdf = new PdfReader(link.getLink());
			   				
			   				pdfsConcatenados.addDocument(pdf);
			   			}
			   			
			   			pdfsConcatenados.close();
			   			
			   			File filePDF = new File(pathPDFFinal);


		   				String arquivoString = new sun.misc.BASE64Encoder().encode(new byte[(int) filePDF.length()]);

descriptografa o arquivo apartir do “arquivoString” que é retornado pelo metodo acima, esse arquivo é o que esta dando problema

File arquivo = new File("C:/arq"+i+".pdf");
			if (arquivo.exists())
				arquivo.delete();
			OutputStream out = new FileOutputStream("C:/Autorização"+i+".pdf");
			byte[] relatorio = new sun.misc.BASE64Decoder().decodeBuffer(pdfBase64);
			out.write(relatorio, 0, relatorio.length);
			out.close();
			java.awt.Desktop.getDesktop().open(arquivo);

a sim, nenhum erro é exibido no console.

3 Respostas

B

3 colheres de sopa de farinha de trigo, 4 colheres de manteiga, sal a vontade, coloca no forno e tá pronto!

arcZend

cara por favor o assunto é serio, não fica de trollagem

arcZend

a solução foi relativamente simples, como nunca tinha feito não sabia, então vou deixar postado pra caso alguem precise

é so fazer o buffer, segue o metodo q o faz

public byte[] doBuffer(InputStream stream) throws IOException {
	   byte[]                buff = new byte[8192];	   
	   ByteArrayOutputStream baos   = new ByteArrayOutputStream();      
	   
	   int br;
	   
	   while ((br=stream.read(buff))!=-1) {
	   		baos.write(buff, 0, br);
	   }

	   return baos.toByteArray();
	}
Criado 19 de outubro de 2012
Ultima resposta 19 de out. de 2012
Respostas 3
Participantes 2