2015-01-22 3 views
2

XSLT 및 XSL-FO/FOP를 사용하여 XML 파일을 PDF로 변환하려고합니다. 그것은 영어 문자에 대해서만 작동하지만 ı, ş 등과 같은 일본어 및 터키어 문자에 대해서는 각각의 문자 대신 #가 표시됩니다. 또한 다른 인코딩 UTF-8, ISO-8859-9 등을 시도했지만 이것이 나에게 도움이되지 못했습니다.XSLT 및 XSL-FO/FOP를 사용하여 XML 파일을 PDF로 변환

어떤 도움을 주시면 대단히 감사하겠습니다.

감사합니다.

답변

0

FOP 엔진 용으로 어떤 글꼴이 구성되어 있으며 문자가 들어있는 텍스트에 대해 문서에서 어떤 글꼴을 사용하고 있습니까? 특정 언어로 텍스트를 렌더링하려면 다음이 필요합니다

(1) 적절한 문자로 인코딩 된 소스 데이터를

(2) XSL/실제로 해당 문자의 상형 문자를 포함하는 문자 글꼴을 참조 XSL FO

(3) 사용하고있는 특정 글꼴이 사용중인 응용 프로그램이 인식 할 수 있도록 참조 된 글꼴입니다. 당신이 문제를 가지고있는 것처럼

소리가 난다 중 하나 (2) 또는 (3)

당신은이 중 중국어 형식을 돋움을 사용하고 헬 베티가 포함되지 않은 것처럼 XSL FO에서 올바른 글꼴을 (참조되지 중국어 글리프).

아마도 올바른 글꼴 XSL FO를 참조하고 있지만 해당 글꼴을 찾기 위해 Apache FOP를 설정하지 않았을 수 있습니다.

2

설명을 보면 일본어 및 터키어 글꼴이 누락되어있어 응용 프로그램에 추가해야하는 것처럼 보입니다. 당신이 글꼴 파일이 가정

다음 https://xmlgraphics.apache.org/fop/trunk/fonts.html

당신이해야 할 것은 : 당신은 FOP가없는 글꼴을 처리하는 방법에 대한 다음과 같은 링크에서 더 많은 글꼴을 추가하는 방법에 대한 일반적인 정보를 찾을 수 있습니다

<?xml version="1.0" encoding="UTF-8"?> 
<fop version="1.0"> 
    <renderers> 
     <renderer mime="application/pdf"> 
      <fonts> 
       <font metrics-url="verdana.xml" kerning="yes" 
        embed-url="VERDANA.TTF"> 
        <font-triplet name="Verdana" style="normal" weight="normal" /> 
       </font> 
       <font metrics-url="verdanab.xml" kerning="yes" 
        embed-url="VERDANAB.TTF"> 
        <font-triplet name="Verdana-Bold" style="normal" weight="bold" /> 
       </font> 
       <font metrics-url="verdanai.xml" kerning="yes" 
        embed-url="VERDANAI.TTF"> 
        <font-triplet name="Verdana-Italic" style="italic" weight="normal" /> 
       </font> 
       <font metrics-url="verdanaz.xml" kerning="yes" 
        embed-url="VERDANAZ.TTF"> 
        <font-triplet name="Verdana-BoldItalic" style="italic" weight="bold" /> 
       </font>    
      </fonts> 
     </renderer> 
    </renderers> 
</fop> 
:

이것은 샘플 구성 파일 (fopUserConfig.xml)입니다 : 디렉토리에 첨부 된 메트릭 XML 파일, 당신은 당신의 맵시 꾼 구성에서 글꼴을 등록해야

public class PdfReportGenerator { 

    /** 
    * Reference to pdfReportTransformer.xsl 
    */ 
    @Value("classpath:templates/pdfReportTransformer.xsl") 
    private Resource basePathRef; 

    @Value("classpath:templates/fopUserConfig.xml") 
    private Resource fopConfiguration; 

    @Value("classpath:templates/fonts/VERDANA.TTF") 
    private Resource fontBase; 

    public void doPdfTransformation(String xmlInput, File xslFOInput, File outputPDf) throws TransformerException, 
      IOException { 

    // Step 1: Construct a FopFactory 
      // (reuse if you plan to render multiple documents!) 
      FopFactory fopFactory = FopFactory.newInstance(); 
      OutputStream out = null; 

      try { 
       // add the user configuration needed in order to embed the fonts in 
       // the pdf. 
       fopFactory.setUserConfig(fopConfiguration.getFile()); 
       fopFactory.setBaseURL(basePathRef.getFile().getParentFile().getCanonicalPath()); 
       FOUserAgent foUserAgent = fopFactory.newFOUserAgent(); 
       foUserAgent.setBaseURL(fopFactory.getBaseURL()); 

       fopFactory.getFontManager().setFontBaseURL(fontBase.getFile().getParentFile().getCanonicalPath()); 

     ... 
    } 
    catch (SAXException e) { 
     LOGGER.error("Error While initializing fop", e); 
    } 
    finally { 
     // Clean-up 
     if (out != null) { 
      out.close(); 
     } 
    } 
    } 
} 
: 당신이 맵시 꾼 사용

당신은 자바 클래스 (봄 콩)을 가지고 있다고하자 :

그 후,이 config 파일뿐만 아니라 맵시 꾼 공장 초기화에 글꼴을 포함 할 필요가