GLPI生成中文PDF报表

2024-05-13 18:05:35

GLPI生成中文PDF报表

授权方式:署名,非商业用途,保持一致,转载时请务必以超链接(http://www.fwolf.com/blog/post/434)的形式标明文章原始出处和作者信息及本声明。
 
PDF,好东西,就是麻烦,以前鼓捣ThingkingRock的时候打过交道,感觉挺复杂,现在捣鼓GLPI时又遇到了,GLPI用的是ezpdf。
先说点闲话,有些比较偏门的东西是真难找啊,比如今天要说的,算不上是学术问题,也没有企业级的支持(如果你愿意打电话咨询GLPI官方又懂法语我没话说),只能在网上大海捞针的找,一方面这是很辛苦的,查阅各类资料几十篇(前提还是你得能找到),写下来也就寥寥百余字,所以我一般愿意把我翻到的资料列在后面作为参考,或许能为别人省点力气;另一方面就是搜索引擎的功劳了,记得还没有google和百度的时候,只有一个yahoo分类目录,要搜问题就得到几个大型论坛比如CSDN里去翻,信息量就窄多了,另外搜索引擎的质量在这里也起到了很大的作用,信息重复率高不高、能否最快速度找到原创内容、信息关联度、是否有用等因素都关系到用户花费时间的多少,这也是我很少用百度的原因之一,还有就是感觉百度的英文资料差太多了。────谨以此纪念我几乎24小时的连续工作以及疲惫的眼睛和脖子。

EZPDF

EZPDF一般是不支持unicode多字节编码的,不过还是作了一些尝试,毕竟是GLPI内置的,搞定了用着方便。首先EZPDF使用afm字体,要得到afm字体,需要用到ttf2tex,在pdfTeX包里:

转换字体,这次我不用宋体了,用于打印的,还是仿宋看着舒服,用了个方正仿宋简体:

试了试不能用,然后用afm2font处理:

得到php_fzfangsong.font等文件,但这些文件无论怎么套上ezpdf都是不行,什么文字都没了,pdf文件中倒是显示了正确的字体名:
再在网上翻资料,简直就是钻到TeX用户堆儿里去了,忽然发现windows字体应该是TrueType字体,而ezpdf使用的难道是Type1字体,两者之间还需要转换?终于查到基于texlive2008的中文绿色免安装tex系统中有打包的字体,这里面有给TeX用的Type1字体,就是大了点,“dottexlive2008.tar.bz2 仅包含全部字体包和相关宏包”一共是685M,拉下来,好在网速还算很快。把里面的afm字体单独解压出来:

拿这个gbkfs.afm配置到ezpdf里,能打出字来了,但中文还是问号,估计是因为数据是utf-8编码,而字体是gbk编码的?修改class.ezpdf.php,在function ezProcessText的第一行加上(参考:ezpdf打印德文的处理):
还是问号,难道字体要嵌入pdf才行?
结果又查到一篇Choosing a PHP PDF generation library for Dokeos,说ezpdf根本、确实、100%就不支持utf-8编码,合着白折腾了。
到ezpdf官网确认一下,最近的新闻是17 June 2006的,比上面那篇文章还晚,看来ezpdf确实是没法用了。用tcpdf吧,不过在glpi的roadmap里,换上tcpdf是要在0.80实现的,前面还有100+ ticket没完成,也是遥遥无期啊,只好自己动手,丰衣足食了。

TCPDF

从官网下载tcpdf放到php的include路径下,对照字体设置方法来准备字体:

现在弄个简单的例子,能够用tcpdf输出pdf文件了,里面要有这么一句:
现在文件尺寸还是太大,因为字体依然是全嵌入的(如果是embedded subset更好,不过TCPDF现在还做不到)。按照那篇文章修改fzfangsong.php文件:

现在生成的pdf文件尺寸倒是很小了,但用eivnce看文字全部是空白,这是在Linux下看,跑到windows下看正常,而且完美,gb和big5编码都能显示。又用其它一些字体试了试,都是windows正常但linux下看不了,应该是刚才作的步骤正确,但与平台配合起来还欠点什么。
仔细对比了上面生成的两种pdf文件,以及另外一个用openoffice.org生成的pdf文件(这个应该比较标准吧),发现还是openoffice.org生成的文件又小、效果又好,用的是“已嵌入子集/embedded subset”方式,
最终查到,我基本上已经作好了,问题出在evince身上,安装poppler-data包(evince用这个来处理中文)后,完美解决,字体为非嵌入not embedded方式。生成的pdf文件非常小,用windows和evince浏览也都正常。混合gb2312和big5编码的内容也没问题:evince下中文出西欧字符不出,windows下Adobe Reader只出gb2312的字,Foxit Reader全部中文和西欧字符完美。而在全内嵌字体的情况下,用evince查看big5字符都是小黑块。

hack GLPI

接下来是大工程,把ezpdf换成tcpdf。修改inc/export.function.phpfunction displaySearchFooter函数,把case PDF_OUTPUT_LANDSCAPEcase PDF_OUTPUT_PORTRAIT两部分的内容都换成TCPDF的处理,源数据还借用原来的$PDF_HEADER,$PDF_ARRAY。除了纸张参数不一样,两部分的处理是相同的,下面是一个简单的例子:

总体上这个例子是照着官网Colored Tables例子来的。
最后,把这个文件中所有的utf8_decode处理都去掉,完成。

转载于:https://blog.51cto.com/coolfire/293780

GLPI生成中文PDF报表相关推荐

  1. php采用fpdf生成中文pdf

    php采用fpdf生成中文pdf fpdf官方网站大陆无法打开. 特意下载了一份,放入我的网盘.需要的朋友去下载 1.小测试 发生一个错误 Deprecated: Function set_magic ...

  2. 使用CTEX生成中文pdf

    使用CTEX生成中文pdf 一.Latex的中文使用 二.利用CTEX实现中文pdf生成 第一步,下载CTEX 第二步,安装 第三步,TeXworks! 第四步,测试代码 三.总结 一.Latex的中 ...

  3. Ruby Ruport实践—中文PDF报表之PRAWN

    FPDF能支持PDF的中文打印,然而却存在不少的不如意之处,据我目前的使用,总结出几点: 1)FPDF提供的Pdf_Chinese字体,将GB这种字体写入了代码中,若我们希望引入其他的中文字体,则不能 ...

  4. JAVA生成PDF标点符号不换行_iText生成中文PDF行首标点处理

    我用的是iText-5.5.10,版本差别不是很大的话,应该都可以这么修改 最近在使用iText生成PDF时,遇到了行首标点问题,可是找了半天,也没找到一个明确的可行解决方案,后来找到一个看着比较靠谱 ...

  5. linux 下生成中文pdf,Linux itex pdf生成中文不显示

    要查看系统中已经安装的字体,我们可以使用fc-list命令进行查看.如果系统中没有该命令的话,我们需要先安装相关的软件包. 在centos上,使用如下命令进行安装: yum install -y fo ...

  6. 又重新让aspspider.net支持中文PDF输出了

    经过一番努力,再次看到中文PDF的输出: aspspider.net经过这次更新后,不知道什么原因,使用 BaseFont.AddToResourceSearch(MapPath(@".\i ...

  7. c# 使用 itextsharp 实现生成Pdf报表

    由于项目需要,所以学习Itextsharp   此项目需求是   某一角色提交申请,然后从后台查出数据生成pdf报表 打印出来用于查看 以下是代码: string sql = "select ...

  8. Flying Saucer生成pdf报表

    使用Flying Saucer生成pdf报表: 1.首先看一下Flying Saucer的官方介绍: https://github.com/flyingsaucerproject/flyingsauc ...

  9. Itext5生成Pdf报表

    公司OA项目即将上线,需要一系列请假.加班和财务等PDF报表的支持! 点我!实战实例 1.引入maven依赖 <!-- https://mvnrepository.com/artifact/co ...

最新文章

  1. mybatis简化实现思路
  2. 慕课网_《Java微信公众号开发进阶》学习总结
  3. python访问memcached
  4. pythonturtle画点的指令_简述python的turtle绘画命令及解释
  5. mysql 多条件统计
  6. vuex webpack 配置_vue+webpack切换环境和打包之后服务器配置
  7. Unity界面插件NGUI核心组件说明
  8. sleep与wait的区别? 以及wait(long timeout)中timeout的含义
  9. jupyter notebook快捷键使用指南
  10. 万人血书的前端开发自学资料(书籍+教程),它来了~
  11. 如何打印身份证的正反面
  12. 《系统集成项目管理工程师》必背知识点
  13. 5000头奶牛的数字化之旅
  14. TP-link 路由器 L2TP站点到站点VPN设置
  15. dll文件删不掉怎么办
  16. 一元线性回归方程的参数估计
  17. 在抖音里怎么快速涨粉,抖音视频怎么发最容易上热门
  18. QuickTime的桌面录制
  19. 实用创意马赛克效果短视频转场过渡pr模板
  20. 【华为云技术分享】敏捷设计,高效协同,凸显设计端云协同价值

热门文章

  1. 重要通知 | WanaCrypt0r 2.0及Onion等勒索软件安全建议
  2. Mac下SVN的使用
  3. 最新行政区划编码数据
  4. [bzoj 4199][NOI 2015]品酒大会
  5. BCH与BCE共享比特币之名
  6. 源码篇——AsyncTask机制
  7. linux 查找目录或文件详解
  8. Sublime Text 2/3 配置文件详解
  9. nodejs安装jsdom模块出现MSB4025错误
  10. 那些为“自主”的研发“