导出pdf功能
2014-04-03 16:20
260 查看
本程序下载地址:
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响应函数过程如下:
在使用HPDF_New (error_handler, NULL)这个函数新建一个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 = 3; 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, 0, 0,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) { //在此可以抛出异常 }
相关文章推荐
- 鄙人略谈LDA
- C++静态构造函数相关概念解析
- 整合asp.net mvc4,Spring.net,nhibernate实现分层开发
- java 迭代器模式
- Linux内核驱动模块(转载学习)
- 大家好 ,开通了自己的空间
- c++内存分配方式
- sql server 数字字符串的排序
- 将博客搬至CSDN
- Operation queues中多线程的支持
- About dispatch_queue_t的线程调度
- [OC]Singleton的一种简便实现方式
- ObjectARX2012学习笔记一
- ObjectARX2012学习笔记之Autodesk.AutoCAD.AcInfoCenterConn Namespace
- ObjectARX2012学习笔记之Autodesk.AutoCAD.Colors Namespace
- JNA&IOC实现反向动态调用不同dll版本
- Hibernate系列教程之二(SessionFactory配置)
- Hibernate系列教程之一(Hibernate结构)
- 开源文档管理软件Alfresco Content Management 4.0.c使用方法
- Hibernate&Spring对多数据源、多Schema的支持