# 三天填坑,Web开发中VFP后端将报表生成PDF

猫猫过年前接到一个公众号开发需求,对于实际的业务开发,公众号其实也用的是H5页面BS的开发模式。

有个需求是生成PDF来展示查询结果。

目前在我以前的公众号我写过,就是三种模式来生成PDF报表,我心想生成PDF不是难事。

# 历尽艰辛的开发

  1. PDF打印机的模式生成 借助novapdfPro 将VFP报表无感生成PDF文件 在开发环境一切顺利,但在IIS下,无论我怎么设置权限,程序都卡死,无法生成PDF,心想是跟用户IUSER有关,但还是没有成功。

  2. 使用FoxyPreviewer来生成 我试过,在编译环境IIS下无论是COM模式,还是CGI模式,均无法调用生成。而开发环境用COM模式也无法生成。

  3. 使用PDFxf来生成 无论是开发环境,还是IIS下,都成功的将报表生成了,很是开心。

# 掉进冰窟

于是猫猫兴奋地将程序发布。在发布到实际的生产环境,却发现报表中的图片都不见了,其它的文字信息都很正常,猫猫顿时不开心了。

# 搬砖填坑

做为先行者,总是要填坑的,于是猫猫又开始了填坑之路,我把坑填好之好,后来者才是坦途,做我的VIP,就是有这点好处,我填的坑,我都会源源本本的教你,不藏私,你都不用再填了,这可是大把的时间和精力啊, 这个时间和精力多去赚点钱不好嘛。

好在PDFxf是源码在手的,于是我仔细地打开了源码,看看哪里有问题。 终于黄天不负有心人,突然发现一段代码:

getenv函数输出的目录是系统临时文件夹,IUSR用户是没有读写权限的,于是猫猫在网站根目录下建立了一个hyimg并给IUSR用户添加读写权限。

并将上述代码改为:

lcFile = getwwwrootpath("hyimg") +  Sys(2015) + ".Png"
1

下方还有一处JPG格式的,也照样修改。

VFP调用报表生成代码

lcreport="f1.frx"				
Local loListener As "PdfListener" Of "Pdfx.vcx"
loListener = Newobject('PdfListener', 'PDFx.vcx')
loListener.cCodePage="CP1252" &&CodePage
loListener.cTargetFileName ="f1.PDF"
loListener.Quietmode=.T.
loListener.lCanPrint=.F.
loListener.lCanEdit=.F.
loListener.lCanCopy=.F.
loListener.lCanAddNotes=.F.
loListener.lEncryptDocument=.F.
loListener.cMasterPassword=""
loListener.cUserPassword=""
loListener.lOpenViewer=.F.
Report Form (lcreport) Object loListener
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

正式发布,恩,所有的图片都按要求生成了,甚是开心。

修改完的PDFxf我已经放到微云,关注加菲猫的VFP微信公众号,发送PDF即可获取。