一,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使用心得 (二)相关推荐

  1. 开源wkhtmltopdf使用心得 (一)

    最近做项目用到要将网页转换为pdf保存,找到了该项目 http://www.oschina.net/p/wkhtmltopdf 在这里记录一下使用心得和部分问题解决方案. 一.首先对该项目进行简单介绍 ...

  2. 开源wkhtmltopdf使用心得 (四)

    修改wkhtmltox源码,使得转PDF.Image时支持中文路径和中文名称的转换 1.VS2010配置QT5.5.0开发环境或者VS2010配置QT5.5.0开发环境 2.找到pdf_c_bindi ...

  3. 学习Coding-iOS开源项目日志(二)

    继续前篇:<学习Coding-iOS开源项目日志(一)>,接着本第二篇<学习Coding-iOS开源项目日志(二)>讲解Coding-iOS开源项目. 前言:作为初级程序员,想 ...

  4. 开源项目Krita学习(二)

    开源项目Krita学习(二) 专有名词记录 nightly版本: 所谓nightly版本,通常是开发者自己维护的一个版本.白天的时候开发者们将各自的修改提交到一个中心代码库,然后在晚上做一次编译得到的 ...

  5. 人人开源 / renren-security/小记(二)

    人人开源 / renren-security/小记(二) 记录使用小结 1.单独的上传文件写法 2.后台shiro请求路径跳过 总结 记录使用小结 版本 v5.2.0: git地址:https://g ...

  6. STM32学习心得二十一:实时时钟RTC和备份寄存器BKP特征、原理及相关实验代码解读

    记录一下,方便以后翻阅~ 主要内容 1) RTC特征与原理: 2) BKP备份寄存器特征与原理: 3) RTC常用寄存器+库函数介绍: 4) 相关实验代码解读. 实验内容: 因为没有买LCD屏,所以计 ...

  7. BT源代码学习心得(二):程序运行参数的获取 -- 转贴自 wolfenstein (NeverSayNever)

    BT源代码学习心得(二):程序运行参数的获取 发信人: wolfenstein (NeverSayNever), 个人文集 标  题: BT源代码学习心得(二):程序运行参数的获取 发信站: 水木社区 ...

  8. STM32学习心得二十六:DAC数模转换实验

    记录一下,方便以后翻阅~ 主要内容: 1) DAC数模转换原理: 2) 寄存器和库函数介绍: 3) 相关实验代码解读. 实验功能:系统启动后,按WK_UP键,输出电压加200点,对应电压值200*3. ...

  9. 【华为昇腾社区、鹏城实验室】中国软件开源创新大赛·赛道二:任务挑战赛(模型王者挑战赛黄金赛段)

    中国软件开源创新大赛·赛道二:任务挑战赛(模型王者挑战赛黄金赛段) [大赛简介] 人工智能作为一种通用目的技术,已经具备进入所有业务主流程的能力,人们的生产与生活必将发生巨大的改变.为了方便开发者们感 ...

最新文章

  1. 穷举n位二进制数 (深搜、回溯_子集树)
  2. c语言 char c1,c2; for (c1='0',C语言-5循环结构(PPT)复习课程.ppt
  3. 前端学习(2554):组件基础和组件注册
  4. CPU特性标志及含义
  5. 网站导航(自定义站点地图)
  6. 量化交易:聚宽,(1)
  7. 《AutoCAD 2014中文版超级学习手册》——1.2 操作界面
  8. win7 梦幻桌面下载地址
  9. idm下载器怎么下载网页视频?如何用idm自动下载网站文件?
  10. SmartUpload问题
  11. Oracle 11g SQL基础入门系列培训-小布作品
  12. 使用VAE(变分自动编码器),来预测用户流失.
  13. OpenCV+Mediapipe人物动作捕捉与Unity引擎的结合
  14. 统治IT行业的定律-安迪-比尔定律
  15. 方舟服务器能不能用ce修改器,方舟生存进化CE修改一览表
  16. 将svg编译成字体图标
  17. HBuilderXHBuilder连接雷电模拟器
  18. movie_recommendation_spark1
  19. UVa 207 - PGA Tour Prize Money(模拟)
  20. 查看redis常用命令

热门文章

  1. A Grain of Sand 一粒沙子
  2. 用python画时序图源代码_使用python实现画AR模型时序图
  3. java 月份起止时间_java已知时间的本周,本月,本年的起始时间
  4. C语言单链成绩表,【查找链表面试题】面试问题:C语言基于单链… - 看准网
  5. 学习一个 Linux 命令:sort 命令
  6. 入门单片机需要购买什么东西,学哪款单片机最好?
  7. mqtt 传文件断开连接的原因_mqtt 发送消息断开链接
  8. 关于学习Python的一点学习总结(14->换一种方法创建字典->访问字典)
  9. poj1273(最大网络流问题模版)
  10. HDU2032(杨辉三角)