2013-12-14 2 views
3

이 Java 코드와 함께 JasperReports 및 DynamicReports를 사용하여 utf-8 문자가 포함 된 pdf 형식의 보고서를 만들 때 문제가 발생합니다. pdf 파일에는 utf- 그들이 ""로 대체 된 것처럼 8 문자. UTF-8 파일을 만들기 위해 OutputStream을 사용할 때 알아야 할 것이 있습니까?FileOutputStream을 사용하여 UTF-8 PDF 파일 만들기

public void toPdf(String path){ 
     OutputStream outHtml; 
     try { 
      outHtml = new FileOutputStream(path); 

      jasperBuilder.toPdf(outHtml); 
     } catch (Exception e1) { 
      logger.error("failed to create PDF", e1); 
     } 
} 

이 경우 XLS 및 HTML 파일을 만들면 이러한 문제가 발생하지 않을 수 있습니다.

jasperBuilder.toPdf(outHtml); 아래에는 많은 행이 있으며, 그 행에는 내 utf-8 문자가 제거되고 있지 않습니다. 그래서 나는 악마가 안으로다는 것을 짐작한다 outHtml = new FileOutputStream(path);

+0

"UTF-8 문자"는 무엇을 의미합니까? UTF-8은 인코딩 일 뿐이며 모든 유니 코드 문자를 인코딩 할 수 있습니다. –

+0

일본 문자입니다. 또는 페르시아 문자가 보고서 내에서 제거됩니다. – MoienGK

+1

오른쪽. 'jasperBuilder'를 설정하는 방법을 살펴볼 가치가있는 것 같습니다. 그것은'FileOutputStream'보다는 오히려 그것에 관한 것입니다. –

답변

4

해결 방법은 글꼴 및 인코딩 문제였습니다. 단지 튜토리얼 here을 따라하지만

<fontFamilies> 
    <fontFamily name="FreeUniversal"> 
    <normal>/home/moien/tahoma.ttf</normal> 
    <bold>/home/moien/tahoma.ttf</bold> 
    <italic>/home/moien/tahoma.ttf</italic> 
    <boldItalic>/home/moien/tahoma.ttf</boldItalic> 
    <pdfEncoding>Identity-H</pdfEncoding> 
    <pdfEmbedded>true</pdfEmbedded> 
    </fontFamily> 
</fontFamilies> 

지금은 글꼴 상대 URL을 해결하기 위해 다른 도전을 fonts.xml

<pdfEncoding>Identity-H</pdfEncoding>- <pdfEncoding>UTF-8</pdfEncoding>을 변경!

+0

UTF-8을 Identity-H로 바꾸면 문제가 해결되지만 방법은 다음과 같습니다. – digz6666

2

A FileOutputStream는 그것에 쓰여지는 "재료"를 완전히 불가지론 자이다. 그냥 바이트를 씁니다. 캐릭터가 삭제 또는 맹 글링되고있는 경우, 스트림에 기입 해지는 바이트를 생성하는 것에 의해 발생합니다.

이 코드는이 코드를 실행하기 전에 jasperBuilder 개체를 구성/사용하는 것과 같습니다.

+0

흠. 답변 감사합니다. 내가 어디 재스퍼의 PDF 생성기는 – MoienGK

+0

@dave를 일으키는 것 같아요 - 그건 가능성이있다. 그러나 (IMO) Jasper Reports를 사용하는 방식에 문제가있을 가능성이 큽니다. Jasper Reports가 올바르게 사용되면 유효한 Unicode 문자의 전체 범위를 처리 할 수 ​​있습니다. –

+0

저는 재스퍼와 직접적인 관련이 없습니다. 재스퍼 보고서 생성을 처리하기 위해 다이내믹 리포트를 사용하고 있습니다. http://www.dynamicreports.org/ – MoienGK

관련 문제