2017-12-12 13 views
1

기존 PDF에 PNG 이미지를 추가하려고하지만 투명도가 검은 색으로 변환됩니다.iText 이미지 및 투명도

 PdfReader reader = new PdfReader(pdfPath); 
     File f = new File(pdfPath); 
     String result = f.getParent() + File.separator + UUID.randomUUID().toString() + ".pdf"; 
     PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(result)); 
     Image image = Image.getInstance(ImageIO.read(new File(imagePath)), null); 
     PdfImage stream = new PdfImage(image, null, null); 
     PdfIndirectObject ref = stamper.getWriter().addToBody(stream);  
     image.setDirectReference(ref.getIndirectReference()); 
     image.setAbsolutePosition(30, 300); 
     PdfContentByte canvas = stamper.getOverContent(1); 
     canvas.addImage(image); 
     stamper.close(); 
     reader.close(); 

투명성을 유지하려면 어떻게해야합니까?

+0

@ 브루노 엄밀히 말하자면 이것은이 질문이 PDF에 투명도가있는 이미지를 추가하는 것에 관한 것으로 복제본이 아니며 참조 된 중복 질문은 추출하는 것입니다. 틀림없이, 근본적인 오해는 둘 다 똑같습니다 ... – mkl

+0

@ 브루노로 와기, 제발, 어떤 마스크를 써야할까요? 죄송합니다. 한 가지 작업이 있습니다. PDF에 PNG 이미지를 추가하는 것입니다. 나는 PDF 전문가는 아니지만 많은 문서를 공부할 시간이 없다. – Roman

+0

OK, @mkl, 나는 너무 빨리 질문을 마감했다. 나는 보았다 : 검은 배경, 나는 생각했다 : 이미지 마스크가 빠져있다. 이제 코드를보고 있습니다. 나는 보았습니다. * 소년! OP는 어디에서이 clunky 코드를 찾았습니까? * –

답변

0

첫 번째 질문 : iText Software의 정책에 위배됩니다. 이전 버전의 iText를 사용하고 있으며이 정책은 iText 5 또는 이전 버전의 자발적인 지원이 중단되었음을 나타냅니다. iText 7을 사용해야합니다. 아니면 이전 iText 버전에 대한 지원이 필요하면 지원 계약을 맺어야합니다.

그러나 나는 호기심이 많습니다.

Image image = Image.getInstance(ImageIO.read(new File(imagePath)), null); 
PdfImage stream = new PdfImage(image, null, null); 
PdfIndirectObject ref = stamper.getWriter().addToBody(stream);  
image.setDirectReference(ref.getIndirectReference()); 
image.setAbsolutePosition(30, 300); 
PdfContentByte canvas = stamper.getOverContent(1); 
canvas.addImage(image); 

당신은 ImageIO 필요하지 않습니다 그리고 당신은 PdfImage를 만들 필요가 없습니다, 나 당신이해야합니까 :이 투박한 코드를 발견 (또는이 코드를 작성하기로 결정 이유) 어디 있는지 알고 싶어 해당 이미지를 PDF 파일의 본문에 추가하십시오. 사용중인 코드는 코드 전문가가 매우 특정한 목적으로 을 사용합니다. 그 특별한 목적을 알고 있다면 설명하십시오. 절대 위치에 이미지를 추가하는 것은 당신이 원하는 모든 경우

(즉 범용이 아닌 특정 목적에의) 코드가이만큼 간단해야한다 :

이 경우
Image image = Image.getInstance(imagePath); 
image.setAbsolutePosition(30, 300); 
PdfContentByte canvas = stamper.getOverContent(1); 
canvas.addImage(image); 

, 이미지 마스크에 대해 걱정할 필요가 없습니다. iText가 당신을 위해 그것을 돌볼 것입니다.

iText 7 대신 iText의 오래된 버전을 사용하는 이유에 대해서도 설명하십시오. 응용 프로그램의 미래를 보장하려면 iText 7로 업그레이드해야합니다 (나중에 시간 낭비하지 않기 위해).