开发者社区> 问答> 正文

Birt导出pdf时一个很棘手的问题(求救):报错

系统中使用birt作为报表的开发工具,在使用birt的过程中遇到几个问题,

1. 在windows系统中导出pdf格式的文件,文件显示正常,但是将应用发布到 linux系统中,导出的pdf文件居然除了静态的标题能正常的显示,动态的绑定属性值居然不能正常显示(体现在空白值)

尝试更改的方法:

    原先一直怀疑是由于在我们的 linux服务器中没有安装相关的字体文件造成的,于是根据这个思路,安装了pdf所设定的字体【宋体】,并且在org.eclipse.birt.runtime_3.7.0.v20110615-1818.jar中fontsConfig.xml中指定所使用的字体。

结果:安装了字体之后,没有任何的效果,

求解: 希望有过相关birt开发的朋友提供一些关于pdf中文字体的配置 思路,最好是能给出这个问题的checkpoint点。

        谢谢:

2.    由于org.eclipse.birt.runtime_3.7.0.v20110615-1818.jar这个jar包是一个有着数字签名的jar包,所有在本地进行 解压---修改---压缩之后,居然就无法进行再次的运行,

具体异常。【security 类型的异常】。。。。。

但是我将修改后的org.eclipse.birt.runtime_3.7.0.v20110615-1818.jar发布到 linux中的weblogic上面,居然没有任何的异常信息出现,很无解。。。。

求解:
    1. 是不是本地中classloader和weblogic的类加载机制有所不同的原因造成

    2. 有没有一种机制能绕过这个签名机制。让本地环境能正常的启动。

展开
收起
kun坤 2020-06-06 00:28:01 1371 0
1 条回答
写回答
取消 提交回答
  • 这个问题困扰了公司里面很多比较资深的人,尝试过很多方案,都是失败告终,

    希望有类是经验的朋友们献策。

    如果问题描述的不是很清晰的话,可以通过我的QQ【1103205613】进行探讨

    期待您的分享。。。。。

    ######

    将windows下的字体复制一份到linux下面就可以了

     

    ######补充两问题, 1.在fontsConfig.xml中期中的alias 与mapping ,encoding,composite它们之间是如何区别的, 2. 在*.rpt文件中定义的font-famliy的属性名称是如何和系统的字体进行匹配的?在配置文件中是如何体现的, 求解。。。。。。 期待中。。。。######谢谢你的回复,这种方案,尝试过,但是没有效果,######你把那几个签名的xml中的类删掉。不过可能会引起无法访问本地文件。或者你重新签名一下。######谢谢,我尝试过将META-INF中的文件跟清除掉,但是我有个问题,对于jar进行签名的话,是否需要遵循jar签名的机制,还是单独的重新进行签名就可? 同时还有个问题,为什么在weblogic中进行发布的时候,就不会出现这种问题?######

    引用来自“保罗的寓言”的答案

    这个问题困扰了公司里面很多比较资深的人,尝试过很多方案,都是失败告终,

    希望有类是经验的朋友们献策。

    如果问题描述的不是很清晰的话,可以通过我的QQ【1103205613】进行探讨

    期待您的分享。。。。。

    保罗,你好!
    不晓得你这个问题最后怎么解决的呢?
    我也遇到你同样的问题。导出PDF后,字体样式改变,一些没有相应字体的用户电脑打开该PDF文件时,提示需要下载字体包。
    开发环境:Birt3.7.0,Windows。
    在Eclipse Birt环境中,通过修改plugins\org.eclipse.birt.report.engine.fonts_3.7.0.v20110602\fontsConfig_pdf.xml
    <Code>
    <font>
    <font-aliases>
    <mapping name="serif" font-family="SimSun" />
    <mapping name="sans-serif" font-family="SimSun" />
    <mapping name="monospace" font-family="SimSun" />
    </font-aliases>
    <font-encodings>
    <encoding font-family="SimSun" encoding="utf-8" />
    <encoding font-family="Times-Roman" encoding="Cp1252" />
    <encoding font-family="Helvetica" encoding="Cp1252" />
    <encoding font-family="Courier" encoding="Cp1252" />
    <encoding font-family="Zapfdingbats" encoding="Cp1252" />
    <encoding font-family="Symbol" encoding="Cp1252" />
    <encoding font-family="STSong-Light" encoding="UniGB-UCS2-H" />
    <encoding font-family="STSongStd-Light" encoding="UniGB-UCS2-H" />
    <encoding font-family="MHei-Medium" encoding="UniCNS-UCS2-H" />
    <encoding font-family="MSung-Light" encoding="UniCNS-UCS2-H" />
    <encoding font-family="MSungStd-Light" encoding="UniCNS-UCS2-H" />
    <encoding font-family="HeiseiMin-W3" encoding="UniJIS-UCS2-H" />
    <encoding font-family="HeiseiKakuGo-W5" encoding="UniJIS-UCS2-H" />
    <encoding font-family="KozMinPro-Regular" encoding="UniJIS-UCS2-H" />
    <encoding font-family="HYGoThic-Medium" encoding="UniKS-UCS2-H" />
    <encoding font-family="HYSMyeongJo-Medium" encoding="UniKS-UCS2-H" />
    <encoding font-family="HYSMyeongJoStd" encoding="UniKS-UCS2-H" />
    </font-encodings>
    <composite-font name="all-fonts">
    <font font-family="Times-Roman" catalog="Western" />
    <font font-family="SimSun" catalog="Chinese" />
    <font font-family="HeiseiKakuGo-W5" catalog="Japanese" />
    <font font-family="HYGoThic-Medium" catalog="Korean" />
    </composite-font>
    </font>
    </Code>
    在Birt中导出PDF,其字体都转化为宋体。其他用户也可以正常访问。但是无法部署到birt3.7.0环境中。因为只有在org.eclipse.birt.runtime_3.7.0.v20110615-1818.jar修改。把fontsConfig_pdf.xml添加进去后,导出PDF后打开不了。


    我的问题是:怎么去修改org.eclipse.birt.runtime_3.7.0.v20110615-1818.jar这个文件才有效呢?

    ######

    引用来自“小黑哥L”的答案

    引用来自“保罗的寓言”的答案

    这个问题困扰了公司里面很多比较资深的人,尝试过很多方案,都是失败告终,

    希望有类是经验的朋友们献策。

    如果问题描述的不是很清晰的话,可以通过我的QQ【1103205613】进行探讨

    期待您的分享。。。。。

    保罗,你好!
    不晓得你这个问题最后怎么解决的呢?
    我也遇到你同样的问题。导出PDF后,字体样式改变,一些没有相应字体的用户电脑打开该PDF文件时,提示需要下载字体包。
    开发环境:Birt3.7.0,Windows。
    在Eclipse Birt环境中,通过修改plugins\org.eclipse.birt.report.engine.fonts_3.7.0.v20110602\fontsConfig_pdf.xml
    <Code>
    <font>
    <font-aliases>
    <mapping name="serif" font-family="SimSun" />
    <mapping name="sans-serif" font-family="SimSun" />
    <mapping name="monospace" font-family="SimSun" />
    </font-aliases>
    <font-encodings>
    <encoding font-family="SimSun" encoding="utf-8" />
    <encoding font-family="Times-Roman" encoding="Cp1252" />
    <encoding font-family="Helvetica" encoding="Cp1252" />
    <encoding font-family="Courier" encoding="Cp1252" />
    <encoding font-family="Zapfdingbats" encoding="Cp1252" />
    <encoding font-family="Symbol" encoding="Cp1252" />
    <encoding font-family="STSong-Light" encoding="UniGB-UCS2-H" />
    <encoding font-family="STSongStd-Light" encoding="UniGB-UCS2-H" />
    <encoding font-family="MHei-Medium" encoding="UniCNS-UCS2-H" />
    <encoding font-family="MSung-Light" encoding="UniCNS-UCS2-H" />
    <encoding font-family="MSungStd-Light" encoding="UniCNS-UCS2-H" />
    <encoding font-family="HeiseiMin-W3" encoding="UniJIS-UCS2-H" />
    <encoding font-family="HeiseiKakuGo-W5" encoding="UniJIS-UCS2-H" />
    <encoding font-family="KozMinPro-Regular" encoding="UniJIS-UCS2-H" />
    <encoding font-family="HYGoThic-Medium" encoding="UniKS-UCS2-H" />
    <encoding font-family="HYSMyeongJo-Medium" encoding="UniKS-UCS2-H" />
    <encoding font-family="HYSMyeongJoStd" encoding="UniKS-UCS2-H" />
    </font-encodings>
    <composite-font name="all-fonts">
    <font font-family="Times-Roman" catalog="Western" />
    <font font-family="SimSun" catalog="Chinese" />
    <font font-family="HeiseiKakuGo-W5" catalog="Japanese" />
    <font font-family="HYGoThic-Medium" catalog="Korean" />
    </composite-font>
    </font>
    </Code>
    在Birt中导出PDF,其字体都转化为宋体。其他用户也可以正常访问。但是无法部署到birt3.7.0环境中。因为只有在org.eclipse.birt.runtime_3.7.0.v20110615-1818.jar修改。把fontsConfig_pdf.xml添加进去后,导出PDF后打开不了。


    我的问题是:怎么去修改org.eclipse.birt.runtime_3.7.0.v20110615-1818.jar这个文件才有效呢?

    我的邮箱是:alexxr.liu@sodexo.com

    保罗兄如果能给点建议,将不胜感激!谢谢了先!

    ######

    1. 由于birt中的org.eclipse.birt.runtime_3.7.0.v20110615-1818.jar 是进过数字指纹的,一般修改了fontsConfig_pdf.xml都会有问题的,可以在外部引入的方式进行指定birt的报表的字体设置,如果没有很特别的中文的话,是不需要的处理字体的,因为birt pdf中使用的字体中基本上包含sumlight 字体的。即使没有的话,也会自动提示下载字体的。

    2. 针对我题的问题的背景是,birt报表项目进行过运行环境的迁移,具体是有tomcat环境迁移到weblogic下面,造成导出pdf空白的主要原因

    a. 字体的缺失,

    b. birt 中依赖的EMCASCript 相关的包和weblogic中的依赖包中存在版本差异,造成weblogic在启动的时候加载自身的包之后,不在加载项目中的有冲突的包,

          解决: 将birt中的包,加入到启动启动脚本中,



    ######

    引用来自“保罗的寓言”的答案

    1. 由于birt中的org.eclipse.birt.runtime_3.7.0.v20110615-1818.jar 是进过数字指纹的,一般修改了fontsConfig_pdf.xml都会有问题的,可以在外部引入的方式进行指定birt的报表的字体设置,如果没有很特别的中文的话,是不需要的处理字体的,因为birt pdf中使用的字体中基本上包含sumlight 字体的。即使没有的话,也会自动提示下载字体的。

    2. 针对我题的问题的背景是,birt报表项目进行过运行环境的迁移,具体是有tomcat环境迁移到weblogic下面,造成导出pdf空白的主要原因

    a. 字体的缺失,

    b. birt 中依赖的EMCASCript 相关的包和weblogic中的依赖包中存在版本差异,造成weblogic在启动的时候加载自身的包之后,不在加载项目中的有冲突的包,

          解决: 将birt中的包,加入到启动启动脚本中,



    非常感谢保罗兄的详细答复!

    由于导出来的报表是需要发给许多不同的客户查看,有些客户没有安装相应的字体会提示下载AdobePDF的字体包,这给用户带来很大的不便。

    可行的方法是在设计报表的时候,指定所有中文为宋体。但目前有上百个已存在的报表,修改测试均非常耗时,且以后开发也得时刻小心同样的问题。所以想找个一劳永逸的法子。

    你提示的“在外部引入的方式进行指定birt的报表的字体设置”,这个具体些是怎样的办法呢?


    ######给相应的label、text等设置为宋体试试######换成FineReport应该很好解决######

    用FineReport来导出相对没有那么多问题:

    1. 导出格式
    PDF:导出PDF格式文件;
    Excel:导出Excel格式文件,又分为分页导出、原样导出、分页分Sheet导出,详细请查看 Excel多种导出方式文档;
    Word:导出Word格式文件,不支持导出悬浮元素,详细请查看 Word导出
    Image:导出为图片,又分为JPG、PNG、GIF和BMP四种格式。
    注:将报表输出为Word不支持导出悬浮元素和多Sheet下的不同页面设置;excel不支持Html中部分标签,单元格背景只支持纯色,另外在导出为图片时,不建议使用GIF格式,可以采用PNG替代,原因是导出GIF需要的内存比较大。
    另:聚合报表和表单不支持导出。
    2. 步骤
    预览模板,点击工具栏中的 输出,即可以对模板进行多种格式的导出,如下图所示:
    注:若模板有参数,需要查询出数据后才能够点击输出进行导出。
    3. 示例
    下面我们以GettingStarted.cpt导出成PDF样式为例说明导出方法。
    3.1 打开模板
    打开模板: %FR_HOME%\WebReport\WEB-INF\reportlets\GettingStarted.cpt
    3.2 分页预览
    点击分页预览,选择完参数后,点击查询。
    3.3 导出
    点击工具栏上的 输出按钮,然后选择PDF格式,会弹出如下图所示的对话框:
    点击保存,选择保存路径即可将数据导出成PDF格式。

    2020-06-06 00:28:10
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
对象存储实战指南-试读 立即下载
OpenAnolis 龙蜥操作系统开源社区技术创新白皮书 立即下载
使用CNFS搭建弹性Web服务 立即下载