2016-12-05 1 views
0

pdf에 동적 이미지를 표시해야하는 유스 케이스가 있습니다. PDF 생성의 FApacheFOP 2.1을 사용하고 있습니다. API 호출에서 이미지 행을 가져오고 그 이미지를 기본 64 형식으로 변환합니다.xslfo 및 FOP를 사용하여 PDF에서 base64 이미지를 볼 수 없음 2.1

이미지로 변환하는 자바 COE 발견하십시오! 나는 PDF에 이미지를 인쇄 할 수 xslfo에서 64 기수 유형의 데이터를 사용하고

String jpgFileName = ConfigManager.getImageFilePath() + "/jpgImage-"+System.currentTimeMillis()+".jpg"; 
Blob imageDataBlob = (Blob) faesRow.get("imageData"); 

     FileUtil.writeToFile(imageDataBlob, jpgFileName); 

     String base64Result = Base64.getEncoder().encodeToString(FileUtil.readFromFile(jpgFileName).getBytes("utf-8")); 

     result = base64Result; 

을 아래 xslfo를 찾아주세요, 여기에 $ signatureImage에 의해 전송되는 데이터입니다 위의 자바 코드는

템플릿 렌더링의 출력에서 ​​나는 xslfo 파일에 base64 스트림을 가져 왔습니다. 아래 출력물을 찾으십시오 :

<xsl:param name="Name">data:image/jpg;base64,{77+977+977+977+9ABBK... }</xsl:param> 

<fo:block-container absolute-position="absolute" left="3.50in" top="9.25in" width="4.0in" height="2.0in"> 
    <fo:block text-align="left"> 
    <fo:external-graphic content-width="scale-to-fit" 
     content-height="100%" 
     width="100%" 
     scaling="uniform" 
     src="url({$Name})"/> 
    </fo:block> 
</fo:block-container> 

이제는 PDF 출력 생성시 가격이 책정되지 않는 문제가 있습니다. 이미지를 인쇄하는 방법을 알려주십시오.

추가 정보 : 1. PDF를 생성하는 데 오류가 없습니다. 2. PDF는 정적 이미지와 바코드를 인쇄 할 수 있습니다.

+0

콘텐츠 유형이 image/jpg가 아닌'image/jpeg'이어야합니까? 또한 b64 문자열 주변의 {}는 나에게 의심스러워 보입니다. –

+0

jpeg로 시도해 보았습니다. {}도 제거되었습니다. 행운은 없지만 이미지를 표시하지 않습니다. 그것은 문제가 base64 변환으로 보이지만 문제가 무엇인지 확실하지 않은 것처럼 보입니다. –

+0

"base64"데이터의 base64 디코드를 할 때 77 + 977 + 977 + 977 + 9ABB ... 0xef로 시작합니다. 0xbf 0xbd 0xef ... 0xff로 시작하는 jpeg 파일이 아닌 것 같습니다. 아마도 0xff 0xe0. 나에게 잘못 보입니다 ... –

답변

2

이 경우 문제가 발견되었습니다.

<fo:block-container absolute-position="absolute" left="3.50in" top="9.25in" width="4.0in" height="2.0in"> 
    <fo:block text-align="left"> 
    <fo:external-graphic content-width="scale-to-fit" 
     content-height="100%" 
     width="100%" 
     scaling="uniform" 
     src="url('data:image/jpeg;base64,$!signatureImage')"/> 
    </fo:block> 
</fo:block-container> 
: 너무 아래 변화를 찾아주세요 어떤 변화도 xslfo 템플릿에 필요한 이보다

File file= new File(jpgFileName); 
FileInputStream fileInputStream= new FileInputStream(file); 
byte[] b= new byte[(int) file.length()]; 

fileInputStream.read(b); 

String base64Result = new String(Base64.getEncoder().encode(b),"UTF-8"); 

기타 :

첫 번째 문제는 base64로의 변환을했다, 우리는 다음과 같이 변환을 사용할 필요가

+0

그래서 최고의 질문은 OP가 스스로 답을 찾는 곳입니다. –

관련 문제