开源wkhtmltopdf使用心得 (二)
一,wkhtmltopdf使用
a、
下载wkhtmltopdf安装包:(本人仅在win7 32位上使用)
http://download.gna.org/wkhtmltopdf/0.12/ 根据系统选择相应安装包
下载安装完成,在命令行中执行转换命令
wkhtmltopdf www.myhomepage.com myhomepage.pdf
能正确转换网页为PDF或者是图片,并且支持中文路径和中文文件名
b、
在自己项目中添加该项目实现转换功能有2种方法
(1)
第一种、在vs项目中添加包含目录和库目录
包含目录:(为wkhtmltopdf的安装目录下的include)
D:\Program Files\wkhtmltopdf\include
库目录为:(为wkhtmltopdf的安装目录下的lib)
D:\Program Files\wkhtmltopdf\lib
在使用的项目中添加头文件以及库文件:
#include <wkhtmltox/pdf.h>
#include <wkhtmltox/image.h>
#pragma comment(lib, "wkhtmltox.lib")
将wkhtmltopdf.exe与wkhtmltox.dll复制到当前项目生成的exe目录下并在项目中使用该exe
char command[1024] = " www.baidu.com 1231.pdf"; //长达1K的命令行,够用了吧
ShellExecute(this->m_hWnd, "open", "D:\\htmltopdf\\wkhtmltopdf.exe", sWebAddress, NULL, SW_HIDE);
注意:如果想要获得该后台程序的返回结果应该使用匿名管道来接收
CString sWebAddress;sWebAddress = "D:\\htmltopdf\\wkhtmltopdf";sWebAddress += " www.baidu.com"; // 注意前面的空格一定不能省略sWebAddress += " D:\\my资料库\\是PDF.pdf";// 注意前面的空格一定不能省略// 创建管道HANDLE hReadPipe, hWritePipe;SECURITY_ATTRIBUTES sa; //安全属性结构 sa.nLength = sizeof(SECURITY_ATTRIBUTES); //结构体大小 sa.lpSecurityDescriptor = NULL;// file://使用系统默认的安全描述符sa.bInheritHandle = TRUE;// file://一定要为TRUE,不然句柄不能被继承。if (!CreatePipe(&hReadPipe, &hWritePipe, &sa, NULL)) {MessageBox("Error On CreatePipe()");return;}//创建进程 STARTUPINFO si; //进程信息PROCESS_INFORMATION pi;si.cb = sizeof(STARTUPINFO); //结构体大小GetStartupInfo(&si); //获取当前进程的信息 si.hStdError = hWritePipe;si.hStdOutput = hWritePipe;si.wShowWindow = SW_HIDE; // SW_HIDE隐藏新建的DOS进程si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;if (!CreateProcess(NULL, sWebAddress.GetBuffer(0),NULL,NULL,TRUE,NORMAL_PRIORITY_CLASS,NULL,NULL, &si, &pi)) {DWORD error = GetLastError();MessageBox("Error on CreateProcess()");CloseHandle(hWritePipe); CloseHandle(hReadPipe); return;}CloseHandle(hWritePipe);WaitForSingleObject(pi.hProcess,INFINITE);CString strContent;//获取管道信息 char buffer[1024] = {0};DWORD bytesRead;while(PeekNamedPipe(hReadPipe, buffer, 1023, &bytesRead, NULL, NULL)){if(bytesRead <= 0)break;RtlZeroMemory( buffer, 1024);if (ReadFile(hReadPipe,buffer,1023,&bytesRead,NULL) == NULL){break;}strContent += buffer;}
// 以下过程是为了解析返回的结果用来显示std::string strData = strContent; std::vector<std::string> vecData;std::string tmpData;std::string::size_type index = 0;do {index = strData.find("\r");if (index != std::string::npos){tmpData = strData.substr(0, index);vecData.push_back(tmpData);CString string;string.Format("%s",CA2W(tmpData.c_str())); m_editPipe.ReplaceSel(string + "\r\n"); // m_editPipe是edit控件关联的变量strData.erase(0, index+1);}} while (std::string::npos != index);CloseHandle(hReadPipe); strContent.ReleaseBuffer();
当然,这样使用也有不便之处:就是在生成的pdf文件中名称中不能有空格否则无法转换
转载于:https://www.cnblogs.com/zxqdlenovo/p/5775634.html
开源wkhtmltopdf使用心得 (二)相关推荐
- 开源wkhtmltopdf使用心得 (一)
最近做项目用到要将网页转换为pdf保存,找到了该项目 http://www.oschina.net/p/wkhtmltopdf 在这里记录一下使用心得和部分问题解决方案. 一.首先对该项目进行简单介绍 ...
- 开源wkhtmltopdf使用心得 (四)
修改wkhtmltox源码,使得转PDF.Image时支持中文路径和中文名称的转换 1.VS2010配置QT5.5.0开发环境或者VS2010配置QT5.5.0开发环境 2.找到pdf_c_bindi ...
- 学习Coding-iOS开源项目日志(二)
继续前篇:<学习Coding-iOS开源项目日志(一)>,接着本第二篇<学习Coding-iOS开源项目日志(二)>讲解Coding-iOS开源项目. 前言:作为初级程序员,想 ...
- 开源项目Krita学习(二)
开源项目Krita学习(二) 专有名词记录 nightly版本: 所谓nightly版本,通常是开发者自己维护的一个版本.白天的时候开发者们将各自的修改提交到一个中心代码库,然后在晚上做一次编译得到的 ...
- 人人开源 / renren-security/小记(二)
人人开源 / renren-security/小记(二) 记录使用小结 1.单独的上传文件写法 2.后台shiro请求路径跳过 总结 记录使用小结 版本 v5.2.0: git地址:https://g ...
- STM32学习心得二十一:实时时钟RTC和备份寄存器BKP特征、原理及相关实验代码解读
记录一下,方便以后翻阅~ 主要内容 1) RTC特征与原理: 2) BKP备份寄存器特征与原理: 3) RTC常用寄存器+库函数介绍: 4) 相关实验代码解读. 实验内容: 因为没有买LCD屏,所以计 ...
- BT源代码学习心得(二):程序运行参数的获取 -- 转贴自 wolfenstein (NeverSayNever)
BT源代码学习心得(二):程序运行参数的获取 发信人: wolfenstein (NeverSayNever), 个人文集 标 题: BT源代码学习心得(二):程序运行参数的获取 发信站: 水木社区 ...
- STM32学习心得二十六:DAC数模转换实验
记录一下,方便以后翻阅~ 主要内容: 1) DAC数模转换原理: 2) 寄存器和库函数介绍: 3) 相关实验代码解读. 实验功能:系统启动后,按WK_UP键,输出电压加200点,对应电压值200*3. ...
- 【华为昇腾社区、鹏城实验室】中国软件开源创新大赛·赛道二:任务挑战赛(模型王者挑战赛黄金赛段)
中国软件开源创新大赛·赛道二:任务挑战赛(模型王者挑战赛黄金赛段) [大赛简介] 人工智能作为一种通用目的技术,已经具备进入所有业务主流程的能力,人们的生产与生活必将发生巨大的改变.为了方便开发者们感 ...
最新文章
- 穷举n位二进制数 (深搜、回溯_子集树)
- c语言 char c1,c2; for (c1='0',C语言-5循环结构(PPT)复习课程.ppt
- 前端学习(2554):组件基础和组件注册
- CPU特性标志及含义
- 网站导航(自定义站点地图)
- 量化交易:聚宽,(1)
- 《AutoCAD 2014中文版超级学习手册》——1.2 操作界面
- win7 梦幻桌面下载地址
- idm下载器怎么下载网页视频?如何用idm自动下载网站文件?
- SmartUpload问题
- Oracle 11g SQL基础入门系列培训-小布作品
- 使用VAE(变分自动编码器),来预测用户流失.
- OpenCV+Mediapipe人物动作捕捉与Unity引擎的结合
- 统治IT行业的定律-安迪-比尔定律
- 方舟服务器能不能用ce修改器,方舟生存进化CE修改一览表
- 将svg编译成字体图标
- HBuilderXHBuilder连接雷电模拟器
- movie_recommendation_spark1
- UVa 207 - PGA Tour Prize Money(模拟)
- 查看redis常用命令
热门文章
- A Grain of Sand 一粒沙子
- 用python画时序图源代码_使用python实现画AR模型时序图
- java 月份起止时间_java已知时间的本周,本月,本年的起始时间
- C语言单链成绩表,【查找链表面试题】面试问题:C语言基于单链… - 看准网
- 学习一个 Linux 命令:sort 命令
- 入门单片机需要购买什么东西,学哪款单片机最好?
- mqtt 传文件断开连接的原因_mqtt 发送消息断开链接
- 关于学习Python的一点学习总结(14->换一种方法创建字典->访问字典)
- poj1273(最大网络流问题模版)
- HDU2032(杨辉三角)