您的位置:首页 > 其它

导出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响应函数过程如下:

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)
{
//在此可以抛出异常
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: