MFC--利用Haru库生成PDF文件

来源:互联网 发布:mysql-python和mysqldb 编辑:程序博客网 时间:2024/06/06 00:54

haru free pdf类库下载地址:

http://download.csdn.net/detail/u011642774/9616781

解压后我们要用到三个东西:
libhpdf.dll
libhpdf.lib
include整个文件夹

解压后复制libhpdf.dll到项目的release和debug目录下;
libhpdf.lib和include文件夹直接复制到源文件目录下;

在xxxDlg.cpp里添加下面两句:

#include "include/hpdf.h"#pragma comment(lib, "libhpdf.lib")

典型的编程流程:见压缩包中的how_to_use.html文件:

大致分为5个步骤:见下面程序的1~5

BOOL CxxxSystemDlg::GeneratePDF(…… ){//1.初始化文档对象////////////////////////////////////////////////////////////////////////////////HPDF_Doc pdf;pdf=HPDF_New(error_handler,NULL);if(!pdf){AfxMessageBox("错误:创建PDF失败!");return FALSE;}if(setjmp(env) ){HPDF_Free(pdf);AfxMessageBox("错误:生成PDF过程中遇见错误!");return FALSE;}//2.设置文档对象///////////////////////////////////////////////////////////////////////////////////set compression mode HPDF_SetCompressionMode(pdf,HPDF_COMP_ALL);//set page mode to use outlinesHPDF_SetPageMode(pdf,HPDF_PAGE_MODE_USE_OUTLINE);//3.创建Page对象////////////////////////////////////////////////////////////////////////////////HPDF_Page page;page=HPDF_AddPage(pdf);HPDF_Page_SetSize(page,HPDF_PAGE_SIZE_A4,HPDF_PAGE_PORTRAIT);///HPDF_PAGE_SIZE_A4  595*841(in pixel)///HPDF_PAGE_LANDSCAPE A4倒方向 ;HPDF_PAGE_PORTRAIT 正向方向///3.1输出字符串//////////////////////////////////////////////CString str_Showtxt;        HPDF_Page_BeginText (page);    ///使用条件:当前graphics mode为HPDF_GMODE_PAGE_DESCRIPTION,函数将当前模式改为HPDF_GMODE_TEXT_OBJECT///开始text对象,设置当前text的位置到点(0,0)HPDF_Font font;/* get default font */HPDF_UseCNSFonts(pdf);HPDF_UseCNSEncodings(pdf);        font=HPDF_GetFont(pdf,"SimSun","GB-EUC-H");///SimSun宋体、SimHei黑体///显示报告标题HPDF_Page_SetFontAndSize (page, font, 24);//注:字体显示的起始位置指字体左下角的位置HPDF_Page_MoveTextPos (page, HPDF_Page_GetWidth(page)/4, HPDF_Page_GetHeight(page)-60);/////使用条件:graphics mode of the page is in HPDF_GMODE_TEXT_OBJECT/////当前位置(x1,y1),HPDF_Page_MoveTextPos (page, x ,y)移动后的位置(x1+x,y1+y)str_Showtxt="xxx检测结果";HPDF_Page_ShowText (page, str_Showtxt);///显示字符串方法1CTime Curtime;Curtime=CTime::GetCurrentTime();CString strCurT,time1,time2;time1=Curtime.Format("%Y-%m-%d,");time2=Curtime.Format("%H:%M:%S");strCurT=time1+time2;///显示测试时间HPDF_Page_SetFontAndSize (page, font, 12);HPDF_Page_TextOut(page,HPDF_Page_GetWidth(page)*3/4, HPDF_Page_GetHeight(page)-80,strCurT);///显示字符串方法2        HPDF_Page_EndText (page);   ///将graphics mode 改为:HPDF_GMODE_PAGE_DESCRIPTION   ///必须有HPDF_Page_BeginText (page);HPDF_Page_EndText (page);否则保存PDF失败。///3.2 画线////////////////////////////////////////////////////画线4步骤:设置、起点、LineTo、Strokeint i=0;///*3.2.1 Draw horizontal lines. *////设置线宽        HPDF_Page_SetLineWidth (page, 0.5);//起点HPDF_Page_MoveTo (page, 50, HPDF_Page_GetHeight(page)-90);//横线1//画线        HPDF_Page_LineTo (page, HPDF_Page_GetWidth(page)-50, HPDF_Page_GetHeight(page)-90);///* 3.2.2 Draw vertical lines. */HPDF_Page_MoveTo (page, 50, HPDF_Page_GetHeight(page)-90);//第一根竖线HPDF_Page_LineTo (page, 50, HPDF_Page_GetHeight(page)-495);///画线结束///change the graphics to HPDF_GMODE_PAGE_DESCRIPIONHPDF_Page_Stroke (page);//4.Save PDF/////////////////////////////////////////////////////////////////////////////////////////字符数组拼接字符串的方法:///char fname[256]; strcpy (fname, argv[0]); strcat (fname, ".pdf");///文件夹必须是之前创建好的,如果文件夹不存在,不会自动创建///路径不存在就创建,PathFileExists检验路径是否有效,有效返回trueif (!PathFileExists("D:\\MacTestResult\\")){//当天保存目录_mkdir("D:\\MacTestResult\\");}CString Save_path;Save_path="D:\\MacTestResult\\"+time1+"xxx.pdf";///HPDF_SaveToFile(pdf,Save_path);//5.Cleanup////////////////////////////////////////////////////////////////////////////////////////HPDF_Free(pdf);/////////////////////////////////return TRUE;}

使用过程中有如下注意:

      1.Graphics mode :不同的方法需要不同的mode,通过相关函数改变mode。

      2.坐标原点为屏幕左下角

      3.颜色通过(r,g,b)调节,有效值0~1.
更加详尽的使用方法见压缩包中doc文件夹中的内容及相关例程。


1 0
原创粉丝点击