网站设计轮播图需要吗,招远网站设计,建设企业网站的流程,邢台123招聘信息网我解决了哪怕很小的一个问题#xff0c;我也想记录下来来见证我的经历。
背景#xff1a;
一、使用libhuru库生成pdf报告
最近参与一些测试工作#xff0c;希望测试结束后能够根据测试得到的数据和图像自动生成测试报告#xff0c;最开始调研到了生成报告的库有libharu和…我解决了哪怕很小的一个问题我也想记录下来来见证我的经历。
背景
一、使用libhuru库生成pdf报告
最近参与一些测试工作希望测试结束后能够根据测试得到的数据和图像自动生成测试报告最开始调研到了生成报告的库有libharu和libpdflibharu是开源库但是很久没有人维护了libpdf商业使用需要授权最后选择使用libharu关于使用libharu库首先是对应的libhpdf.lib库的编译需要依赖zlib和libpng两个库在windows下使用cmake编译的步骤可以参考这篇博客libharu编译过程我按照这篇文章编译了64位的libhpdfs.lib关于基于libharu库可以解决报告中的表格和图像加载的问题的例程可以参考这里基于libharu库生成pdf报告的例程。我使用刚才编译的64位的libhpdf.lib来编译这个例程除了加载png图像失败之外其他我用到的函数都是正常的。我只能先加载jpg图像但是图片压缩严重不够清晰。就无法加载png图像这个问题我咨询过这个例程的作者作者也很友好的测试了我的demo并没有复现我描述的问题后来我使用了他提供的libhpdf.lib竟然成功加载了png图像当然我必须是在x86的模式下而我的大工程是x64的所以这个问题很是不好解决网上也看到很多小伙伴反应使用libhpdf库不能成功加载png图像的问题问题主要出在下面这个函数这个函数调用后返回的img为空所以无法在pdf文件上加载图像。有网友说是分配内存失败但是我一直也没有找到解决这个问题的有效的方法只好先放一下。
img HPDF_LoadPngImageFromFile(pdf, t.path.c_str());
上个月末跟line manager汇报工作他对我生成的报告上的图像很是不满意其实穷自己也不满意实在是不清晰但是这个问题一直没能得到解决我也是很是苦恼他再次给我建议试一下使用python看能不能有好的解决方法一想到我需要使用python重新搞一遍我就有些苦恼担心工作量会很大这又到月末如果做不出效果要影响我这个月的绩效了。但是没有办法谁让我自从五一放假回来后就有些不思进取玩物丧志呢我还是 硬着头皮继续搜索python方法。前几天刚充了会员现在一搜搜到了下面这篇文章使用python生成图文并茂的pdf报告让我耳目一新感叹一句花了钱果然不一样办事效率高了很多。
二、使用python和reportlab库生成pdf报告
1. windows下安装reportlab
首先要保证你电脑上已经安装了python了哈我电脑安装的python版本为3.8.7
pip版本为20.3.3 然后
1. winR
2. 输入cmd #打开命令行窗口
3. 在命令行输入pip install reportlab如果在安装失败请查看这篇文章那你退出那个软件哈哈你懂得再重现安装一下。
三、参考现有的例程
我第一次接触reportlab这个库想在很短的时间内看到让人满意的效果我不得不依赖于一个县城的模板于是我找到了这篇文章python之reportlab生成PDF文件。这个例子对于初学者来说是很具有参考价值的但是唯一不足的地方是调用函数时的输入没有给出因为我对python使用不熟不过经过几次测试和研究也能够搞清楚函数的输入时directory和List类型。因为我已经把测试数据保存到本地的csv文件中所以我读取了csv文件将里面的数据写入到表格中去。
四、在C工程中执行python脚本
我的工作环境是win10,64位VS2017我的测试工程是用C写的我希望的是在测试程序运行结束后但是程序退出之前执行python脚本自动生成pdf测试报告那我面临的一个问题就是如何在C工程中执行python脚本那么你就可以直接使用一个简单直接粗暴有效的方法就可以。这几行代码就是去执行你指定的python脚本 如果你需要将C中的一些参数传递给python脚本那么直接在command后面加上所需要参数就可以了。
std::string filename ./test_report.py;
std::string command python ;
command filename;
system(command.c_str());
五、C工程中调用python函数或者进行数据交换
1. 首先可以参考这篇文章配置相应的python环境Windows10 C(VS2017)调用python(python3.8)python配置
1 2 3 2. 添加环境变量 上面的环境配置好了后可以测试一下上面链接中博主给的例子。我测试的结果存在一个问题就是当执行的是普通的python脚本也就是该python脚本中没有调用第三方库的时候可以成功执行但是当python脚本中有调用第三方的库如通过import numpy as np调用numpy库时demo中的pModule PyImport_ImportModule(helloWorld);就会出错返回的pModule为空。而如果删掉import numpy as np又正常调用了我花了一天的时间一直没有解决这个问题后来考虑到我只是执行单独的一个脚本不需要进行数据交换也不需要在C工程中调用python中的函数那就用最简单直接的方法解决问题吧就是我在上面说到的方法。
std::string filename ./test_report.py;
std::string command python ;
command filename;
system(command.c_str());
如果有效伙伴也遇到了上面的问题并且最终解决了请指教哈哈。