`
jeho0815
  • 浏览: 25555 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Opentaps(OFBiz)下fop(生成PDF)中文乱码解决方案

阅读更多
(本文来自http://www.yuendong.com.cn/info.asp?id=157
   在使用Opentaps(OFBiz)中,发现所有生成的PDF文件中,所有中文都不能显示,以”#“表示。自己在网上查了一些资料,主要参考http://leomne.iteye.com/blog/684421和http://www.vtimes.net/blog/article/add-chinese-font-for-fop-summary.html这篇文章,自己总结一下。
在ofbiz中,下面以一个例子来说明生成pdf的过程是:
1、访问https://localhost:8443/warehouse/control/shipGroups.pdf?orderId=DEMO_B2C_UK02&shipGroupSeqId=00001
2、再到warehouse 模块controller.xml找到对应的screen为,就是要显示的地方。在controller.xml的上部有如下配置:
说明这个渲染的时候会利用ScreenFopViewHandler。
3、在ScreenFopViewHandler.java中,先把reportTemplate.fo.ftl渲染成xml
        // render and obtain the XSL-FO
        Writer writer = new StringWriter();
        FopFactory fopFactory = ApacheFopFactory.instance();
            ScreenRenderer screens = new ScreenRenderer(writer, null, htmlScreenRenderer);
            screens.populateContextForRequest(request, response, servletContext);
            // this is the object used to render forms from their definitions
            screens.getContext().put("formStringRenderer", new FoFormRenderer(request, response));
            screens.render(page);
  然后由apache的FOP(Formatting Objects Processor)对xml渲染,生成pdf文件,并放回到response中输出:
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        TransformerFactory transFactory = TransformerFactory.newInstance();
        try {
            Fop fop = fopFactory.newFop(contentType, out);
            Transformer transformer = transFactory.newTransformer();
            // set the input source (XSL-FO) and generate the output stream of contentType
            Reader reader = new StringReader(writer.toString());
            Source src = new StreamSource(reader);
            // Get handler that is used in the generation process
            Result res = new SAXResult(fop.getDefaultHandler());
                // Transform the FOP XML source
                transformer.transform(src, res);
                // We don't want to cache the images that get loaded by the FOP engine
                fopFactory.getImageFactory().clearCaches();
                // set the content type and length
                response.setContentType(contentType);
                response.setContentLength(out.size());
                // write to the browser
                    out.writeTo(response.getOutputStream());
                    response.getOutputStream().flush();
由于Apache FOP中不支持任务中文字体,所以我们要把支持中文字体手动加入进来,下面分三步进行使pdf中的中文正常显示:
1、 用FOP生成黑体字体配置文件simhei.xml。这里的作用是字体映射成xml文件使得fop能够识别它们,所以要想Opentaps(OFBiz)能够使用它,你必须得你的操作系统支持这个字体。如果你操作系统不支持这个字体,下面的步骤很难实现。这个也是比较容易混淆和迷茫的地方。我们分成几个小步骤。
①   首先生成simhei.xml文件。生成这个方法比较简单的方法是把fop的依赖包先放进jre的lib的扩展包ext里面,我的路径是C:\Program Files\Java\jre6\lib\ext,后在控制台(cmd)直接执行java org.apache.fop.fonts.apps.TTFReader C:\Windows\Fonts\simhei.ttf D:\simhei.xml.(操作完了记得把他们删掉,因为放在这里了别的项目也会使用,很可能导致冲突,我自己就是,开始没有删除导致后来opentaps启动不了,因为包冲突了。)你会发现在d盘出现了simhei.xml的文件。
②   把C:\Windows\Fonts\simhei.ttf和simhei.xml一起考入到opentaps里面,路径为:${OPENTAPS_HOME}/opentaps/opentaps-common/lib/DejaVu下面。
2、修改ofbiz中fop的配置文件fop.xconf,路径为:${OPENTAPS_HOME}/framework/webapp/config/fop.xconf
添加字体:simhei
      
           
       
3、修改*.fo.ftl模板文件,把font-family改为simhei
重启看到pdf能正常显示中文了!
分享到:
评论

相关推荐

    opentaps (from apache ofbiz) 架构图 (chart of architecture)

    OpenTaps(Open Source Total Appliance for Professional Services)是一款基于Apache OfBiz的企业级开源商务套件,旨在提供全面的企业应用解决方案,包括CRM(客户关系管理)、ERP(企业资源规划)、电子商务、...

    opentaps+ ofbiz

    通过这些组件,opentaps+ ofbiz为企业提供了强大的工具,实现从产品发布、价格策略制定到订单处理和促销活动管理的全面电子商务解决方案。这个系统允许企业高效地管理产品组合,优化客户体验,同时提高运营效率。

    ofbiz-opentaps表关联

    opentaps 所有表关联,HTML的。

    ofbiz中文技术文档

    Opentaps(Open Source Enterprise Applications Suite)是基于Ofbiz构建的一个全面的企业资源规划(ERP)和客户关系管理(CRM)解决方案。Opentaps不仅包含了Ofbiz的所有功能,还添加了更多的企业级特性,如高级...

    Opentaps开发安装、配置、应用文档

    Opentaps是一个开源的企业资源规划(ERP)和客户关系管理(CRM)系统,与Ofbiz紧密集成。这个压缩包文件包含了一系列文档,旨在帮助开发者和用户进行Opentaps的开发、安装、配置以及应用。 1. **安装文档.docx**: ...

    opentaps开发示例.pdf

    根据提供的文件内容,我们可以提炼出关于opentaps开发环境配置与开发流程的知识点。文件内容涉及到opentaps系统中的web应用部署、源代码管理、热部署、界面组件开发以及后端服务调用等多个方面。 1. hot-deploy(热...

    opentaps 结构分析

    OpenTaps(Open Source Enterprise Applications and Processes)是一个开源的企业资源规划(ERP)和客户关系管理(CRM)系统。本文将深入探讨OpenTaps的结构分析,特别是其组件化设计和目录布局。 首先,我们来...

    ofbiz资料大全

    OFBiz API中文版.rar Apache OFBiz Cookbook Sep 2010.rar Opentaps widget使用说明.rar OFBiz.Development.2008.rar Groovy中文教程.rar freemarker中文手册.rar ofbiz10.04表结构.rar OFBiz开发指南.rar ...

    opentaps 1.0.2的partice(练习)例子

    OpenTaps(Open Source Total阿P Solution)是一款开源的企业资源规划(ERP)与客户关系管理(CRM)系统,它结合了电子商务、供应链管理、销售和市场等功能,为企业提供了一站式解决方案。在1.0.2版本中,它为开发者...

    windows 下安装Opentaps

    在Windows环境下安装Opentaps是一项综合性的IT任务,涉及到多个步骤和组件的配置。以下是根据提供的文件信息,详细解析在Windows下安装Opentaps所需的关键知识点: ### 1. 安装并配置JDK 首先,确保安装了JDK1.5或...

    OPENTAPS综合资料文档

    OPENTAPS(Open Source Enterprise Transaction Processing System)是一个全面的开源企业解决方案,它集成了CRM(客户关系管理)、ERP(企业资源规划)以及其他关键业务功能,如供应链管理、财务管理和生产制造等。...

    Apache OFBiz Development The Beginners Tutorial

    学习Opentaps和Ofbiz的经典入门!

    ofbiz架构图

    它的架构图展示了其核心组件和工作原理,而Opentaps(Open Source ERP + CRM)是基于OFBiz进行扩展和增强的另一个开源项目。 OFBiz的架构图主要包括以下几个关键部分: 1. **View Handler和Screen Widget Context*...

    win7 安装Opentaps 1.5

    在Windows 7操作系统中安装...安装OpenTaps 1.5在Windows 7环境下需要一定的技术背景和耐心,但通过上述步骤,你应该能够成功完成安装。如果在安装过程中遇到任何问题,建议查阅官方文档或社区支持,以便获取更多帮助。

    opentaps0.9相关文档

    5. **常见问题解答(FAQ)**:列举了使用过程中可能遇到的问题及其解决方案,帮助用户自行解决一些常见问题。 6. **Release Notes**:记录了0.9版本相对于前一个版本的改变,包括新功能、改进、已知问题和修复的bug...

    ofbiz资料综合

    “Insider View”通常意味着内部视角或深入洞察,这份PDF文件很可能是由Ofbiz项目团队成员或经验丰富的开发者编写的,详细解析了Ofbiz的内部工作原理、设计理念、最佳实践,以及在实际项目中遇到的问题和解决方案。...

    OFBiz教程_初学者的开发指南

    ### OFBiz教程——初学者的开发指南 #### 一、引言 《OFBiz教程——初学者的开发指南》是一份面向初次接触OFBiz框架的开发者们的宝贵资源。OFBiz是一个开源的企业级Java电子商务框架,提供了强大的业务管理工具,...

    一个简单的ofbiz的实例

    别人写的一个ofbiz的一个简单的例子,希望对大家有用,顺便挣点儿积分!

    xp opentaps2.5安装

    ### Openbravo 2.5在Windows XP下的安装与配置指南 #### 一、环境准备与配置 在开始安装Openbravo 2.5之前,我们需要先准备好一系列的基础软件及环境变量。 **1. 安装环境:** - **Oracle数据库:** 使用的是`win...

Global site tag (gtag.js) - Google Analytics