我解决了哪怕很小的一个问题,我也想记录下来来见证我的经历。

背景:

一、使用libhuru库生成pdf报告

最近参与一些测试工作,希望测试结束后能够根据测试得到的数据和图像自动生成测试报告,最开始调研到了生成报告的库有libharu和libpdf,libharu是开源库但是很久没有人维护了,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. win+R
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());

如果有效伙伴也遇到了上面的问题,并且最终解决了,请指教,哈哈。

VS2017 C++工程 执行python脚本相关推荐

  1. mac上使用crontab周期性执行python脚本

    这个月买了本书<Linux系统命令及Shell脚本实践指南>, 看到了一个周期性执行任务cron.顿时产生一个想法: mac上有这种机制么? 加上自己也在15年下半年也学了点python脚 ...

  2. 使用sae定时执行Python脚本

    使用sae定时执行Python脚本 使用sae定时执行Python脚本 12,May,2014 | 57 Views 毕设压力略大,必须是桂林游的锅.去之前放松了几天,回来又休闲了几天,加上桂林的一周 ...

  3. python运维脚本部署jdk_Jenkins自动执行Python脚本,并输出测试报告

    这段时间,在家时间自由(除了睡觉8小时,其他时间都在工作和学习),有大把的时间实操练习一些硬技能: 今天,更新一篇利用Jenkins这套框架,调用Python自动化脚本,并输出测试报告的手把手实操文章 ...

  4. python 任务计划_windows 10 设定计划任务自动执行 python 脚本的方法

    我用 python 写了一些脚本,有一些是爬虫脚本,比如爬取知乎特定话题的热门问题,有一些是定期的统计分析脚本,输出统计结果到文档中.之前我都是手动执行这些脚本,现在我希望如何这些脚本能自动定时执行. ...

  5. python能在excel运行吗-使用PyXLL在Excel中执行Python脚本

    PyXLL是一款能够使得在Excel中能够执行Python脚本的插件,不过它是使用Excel扩展库(XLL)的方式,这跟平常加载一些常用的宏方式是一样的. 使用pyXLL,首先你必须安装Python, ...

  6. contOS crontab 定时执行python脚本

    contOS crontab 定时执行python脚本 安装crontab yum install crontabs crontab语法 常用系统命令 ntsysv //查看系统开机启动项 chkco ...

  7. python脚本调度程序_Windows 任务调度程序定时执行Python脚本

    Windows 任务调度程序(Task Scheduler)可以定时执行程序,本文分享使用Task Scheduler定时执行Python脚本的两种方法. 在控制面版->管理员工具中打开 Tas ...

  8. python为运行为何出现乱码_解决执行python脚本出现乱码的问题

    解决执行python脚本出现乱码的问题 发布时间:2020-08-11 09:19:22 来源:亿速云 阅读:111 作者:小新 小编给大家分享一下解决执行python脚本出现乱码的问题,相信大部分人 ...

  9. flask执行python脚本_如何在Flask中运行python脚本

    我有一个Flask脚本,可以创建网站并动态打印一些数据.-打印的数据应来自另一个python脚本. 我目前面临的问题是,如果我将执行python脚本的行放在执行Flask应用程序的行之前,它将运行Py ...

最新文章

  1. python表白程序-python如何写出表白程序
  2. 数据库密码加密 使用的是 druid加密
  3. android 缩放透明动画,Android旋转、平移、缩放和透明度渐变的补间动画
  4. 事务和分布式事务解释
  5. Port already in use: 1099;
  6. python英文词频统计代码_python实现中文和英文的词频统计功能方法汇总
  7. SQL Server – QP的另一个X射线
  8. tomcat发布web项目
  9. Flex 与 Asp.Net 通过 Remoting 方式进行通讯 (三)
  10. 硬盘坏道检测工具对比(DiskGenius/HdTunePro/MHDD等)
  11. EAS后台事物调度时间间隔所用的QuartZ Cron表达式解析。
  12. CodeSmith链接Oracle、MySQL数据库
  13. 使用python turtle绘制简笔画大白
  14. 安全-系统上线安全检查规范
  15. 基于JSP的游泳馆管理系统的设计
  16. 历年医院招计算机考题,2020医院招聘考试历年试题——医学影像学(64)
  17. 操作系统 -- 哲学家就餐问题
  18. AspectJ的使用方法
  19. Kubernetes:(十八)flannel网络
  20. Windows下载使用wget命令

热门文章

  1. win7win10 配置wlan热点
  2. eval函数的工作原理
  3. HTML的target属性中_blank、_self、_parent、_top含义
  4. Vue — 第四天(components组件)
  5. javaScript基础讲义第四天(1)
  6. sql server常用性能计数器
  7. 【C++】如何提高Cache的命中率,示例
  8. link和@import的区别
  9. (转)Shell中获取字符串长度的七种方法
  10. 【bzoj3994】[SDOI2015]约数个数和 莫比乌斯反演