导出pdf功能
PDF是我们极其常用的文件格式,但对如何生成PDF,个人一直觉得很神秘,其实利用一些公开的PDF库,我们就可以直接生成PDF文件,而不用关注PDF文件的内部细节。我知道的PDF库有如CARIO和HARU。
HARU是一款免费的,跨平台的,开源的生成PDF的库。支持嵌入PNG、JPEG图片,支持CJK字体编码。用C语言编写,因此可以在C/C++中调用。HARU也提供了Ruby,Delphhi,和C#的捆绑(binding)。项目主页见http://libharu.sourceforge.net/index.html
对于HARU这个开源的PDF库,我们没必要深究具体代码的实现, 只需要使用它提供的接口: 如何创建一个PDF, 设置PDF宽高,保存PDF等就可以了。
下面通过一个例子:使用HARU开源库,实现把图片转为pdf功能。
程序运行界面:点击导出pdf,将会把图片转为pdf。

具体导出PDF响应函数过程如下:
void CPdfDlg::OnBtnExportPdf()
{
// TODO: Add your control notification handler code here //生成的pdf名称
CString strDlgPathName = "E:\\123.pdf"; //需要转换的图片
CString strImage = "E:\\002.jpg"; //临时生成的图片
CString strImageTemp = "E:\\000.jpg"; //新建PDF文档,error_handler为错误响应函数
HPDF_Doc pExportPdf = HPDF_New (error_handler, NULL); if (NULL == pExportPdf)
return; CxImage xImage; //E:\\002.jpg图片格式为3,可以用其它函数获取不同类型图片的格式ID
int nType = ;
xImage.Load(strImage,nType); //临时生成jpg图片
xImage.Save(strImageTemp,CXIMAGE_FORMAT_JPG); HPDF_Page page = HPDF_AddPage (pExportPdf);
double imageH = xImage.GetHeight();
double imageW = xImage.GetWidth();
HPDF_Image jpgImage = HPDF_LoadJpegImageFromFile (pExportPdf, strImageTemp);
HPDF_Page_SetWidth (page, HPDF_Image_GetWidth (jpgImage));
HPDF_Page_SetHeight (page, HPDF_Image_GetHeight(jpgImage));
HPDF_Page_DrawImage (page, jpgImage, , ,HPDF_Image_GetWidth (jpgImage),HPDF_Image_GetHeight (jpgImage)); //删除临时生成的图片
DeleteFile(strImageTemp); //保存pdf
HPDF_SaveToFile (pExportPdf,strDlgPathName); if (NULL != pExportPdf)
{
HPDF_Free (pExportPdf);
}
}
在使用HPDF_New (error_handler, NULL)这个函数新建一个PDF时,需要指定错误响应函数,也就是创建失败后会执行的函数。
这个错误处理函数函数原型为:
( HPDF_STDCALL * HPDF_Error_Handler )(HPDF_STATUS error_no, HPDF_STATUS detail_no, void *user_data);
我们可以返照这个函数原型,写出一个错误响应函数:
1 //PDF错误处理回调
void __cdecl CPdfDlg::error_handler(HPDF_STATUS error_no,HPDF_STATUS detail_no,void *user_data)
{
//在此可以抛出异常
}
导出pdf功能的更多相关文章
- java导出pdf功能记录
这几天已在做处理导出pdf文件的功能,摸索了几天总算可以了.记录下这几天遇到的问题. 1.网上基本都是基于Itext5和Itext7来处理的.我最终是在Itext5上成功了,itext7应该是模板出问 ...
- ASP.NET C#根据HTML页面导出PDF
在启明星采购系统里,新增了导出PDF功能.整个功能使用了第三方软件 wkhtmltopdf(下载) 官网 https://wkhtmltopdf.org/ 提供有更多版本下载 他可以把HTML页面转换 ...
- Vue框架下实现导入导出Excel、导出PDF
项目需求:开发一套基于Vue框架的工程档案管理系统,用于工程项目资料的填写.编辑和归档,经调研需支持如下功能: Excel报表的导入.导出 PDF文件的导出 打印表格 经过技术选型,项目组一致决定通过 ...
- 个人永久性免费-Excel催化剂功能第50波-批量打印、导出PDF、双面打印功能
在倡导无纸化办公的今天,是否打印是一个碍眼的功能呢,某些时候的确是,但对于数据的留存,在现在鼓吹区块链技术的今天,仍然不失它的核心价值,数据报表.单据打印出来留存,仍然是一种不可或缺的数据存档和防篡改 ...
- React项目实现导出PDF的功能
在做web项目中,有时候会遇到pdf导出的需求,现根据之前在公司的React项目中遇到的导出PDF需求,整理一个demo出来. 导出PDF需要用到两个依赖包:html2canvas.jspdf 1.安 ...
- JS导出PDF插件(支持中文、图片使用路径)
在WEB上想做一个导出PDF的功能,发现jsPDF比较多人推荐,遗憾的是不支持中文,最后找到pdfmake,很好地解决了此问题.它的效果可以先到http://pdfmake.org/playgroun ...
- iText导出pdf、word、图片
一.前言 在企业的信息系统中,报表处理一直占比较重要的作用,本文将介绍一种生成PDF报表的Java组件--iText.通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超级连接显示或 ...
- Itext导出PDF,word,图片案例
iText导出pdf.word.图片 一.前言 在企业的信息系统中,报表处理一直占比较重要的作用,本文将介绍一种生成PDF报表的Java组件--iText.通过在服务器端使用Jsp或JavaBean生 ...
- FusionChart 导出图片 功能实现(转载)
FusionChart 导出图片 功能实现(转载) http://www.cnblogs.com/jiagoushi/archive/2013/02/05/2893468.html 题目:精美Fusi ...
随机推荐
- 通过 Ansible 安装 Docker
本文的演示环境为 ubuntu 16.04. 先在 Ansible Galaxy 搜索 docker,由 geerlingguy 贡献的 docker role 是目前最受欢迎的: 通过 ansibl ...
- [转]快速新建简单的koa2后端服务
本文转自:https://blog.csdn.net/saucxs/article/details/83788259 既然前端工程化是基于NodeJS,那么选择NodeJs做前后端分离部署也是理所应当 ...
- asp.net 建多个项目实现三层的实例——读取一张表中的记录条数
学习asp.net两周,通过学习发现,.net和php之间的区别还是蛮大的,比php要复杂一些,开始学习的有些吃力,后来跟着传智播客里的老师学习,渐渐的学到了一些东西. 今天要记录一下.net里的简单 ...
- 学JAVA第八天,今天用循环做了个好玩的东西
今天用for循环做了个打印矩形的图案 代码如下: package nf;class Kest{ public static void main(String args[]){ int a=30; in ...
- Java开发笔记(二十)一维数组的用法
之前介绍的各类变量都是单独声明的,倘若要求定义相同类型的一组变量,则需定义许多同类型的变量,显然耗时耗力且不宜维护.为此,编程语言引入了数组的概念,每个数组都由一组相同类型的数据构成,对外有统一的数组 ...
- Java开发笔记(三十八)利用正则表达式校验字符串
前面多次提到了正则串.正则表达式,那么正则表达式究竟是符合什么定义的字符串呢?正则表达式是编程语言处理字符串格式的一种逻辑式子,它利用若干保留字符定义了形形色色的匹配规则,从而通过一个式子来覆盖满足了 ...
- Xamarin 学习笔记 - Page(页面)
本文翻译自CodeProject文章:https://www.codeproject.com/Articles/1226447/Xamarin-Notes-Xamarin-Forms-Pages 转载 ...
- win10系统下安装MySQLdb和pymysql
(1)使用的是Python3.6,想要使用MySQLdb, 需要先在https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient中下载相应版本的包 ...
- 解决一个Ubuntu中编译NEON优化的OpenCV的错误
在Ubuntu 16中编译开启NEON优化的Opencv时,遇到libpng编译是使用汇编代码的错误,完整错误见文章末尾.通过查询发现解决方案是安装跨平台编译器,安装代码如下: sudo apt-ge ...
- 从零学习Fluter(三):Flutter的路由跳转以及state的生命周期
今天继续研究Flutter,我是在flutter1.0发布后,才玩flutter的,发现在此之前,许多人已经先发制人,玩起了flutter,不知不觉中,我已经被别人摔在了起跑线上,玩过flutter后 ...