Grails 2.4插件渲染跳过非拉丁字符并返回空白pdf文件

时间:2014-08-09 15:34:12

标签: pdf grails character-encoding rendering

我认为我有类似的问题,或者至少有一个紧密的解决方案。

**详细说明:

  1. 操作系统 - Windows 7(也试过一个薄荷17,结果相同);
  2. IDE - GGTS(Groovy-Grails Tool Suite 3.2.0.RELEASE)
  3. grails - 2.4;
  4. pluggin - Grails渲染(http://grails.org/plugin/rendering
  5. **

    基本上我正在关注这篇文章,以便根据模板获取pdf文件:http://www.icodeya.com/2012/09/grails-how-do-i-render-gsp-files-in-pdf.html。一切都很顺利,直到有一些不同于拉丁语的人物 - 例如西里尔语或葡萄牙语。我能够绕过这个问题:

    ...  
    def renderer = new ITextRenderer()  
    FontResolver resolver = renderer.getFontResolver() 
        **.getFontResolver.addFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED_SUBSET);**
    ...  
    

    但pdf文件中的文字格式错误 - 原始文字:

      

    快狐

    ,在pdf文件中是:

      

    qu i ck fo x

    。文本中会出现一些额外的空格。

    我找到的所有设置都更改为使用UTF-8:gsp,text,html文件。 预先感谢,              IVO!

1 个答案:

答案 0 :(得分:1)

根据插件文档:

  

解决方案是注册要与特定字体一起使用的字体   编码。因为我们正在使用XHTMLRenderer,所以我们可以在其中指定   CSS而不是以编程方式注册。

所以放在你的gsp页面中,以下是

<style>
    @font-face {
      src: url(path/to/arial.ttf);
      -fs-pdf-font-embed: embed;
      -fs-pdf-font-encoding: cp1250;
    }
    body {
      font-family: "Arial Unicode MS", Arial, sans-serif;
    } </style>

如果还不够,请加入:grails-app \ services \ grails \ plugin \ rendering \ pdf \ PdfRenderingService.groovy

...  
def renderer = new ITextRenderer()  
FontResolver resolver = renderer.getFontResolver() 
    **.getFontResolver.addFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED_SUBSET);**
...