您的位置:首页 > 其它

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

2016-08-21 16:03 357 查看
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 outlines
HPDF_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);///显示字符串方法1

CTime 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、Stroke
int 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_DESCRIPION
HPDF_Page_Stroke (page);

//4.Save PDF//////////////////////////////////////////////////////////////////////////////////////
///字符数组拼接字符串的方法:///char fname[256]; strcpy (fname, argv[0]); strcat (fname, ".pdf");
///文件夹必须是之前创建好的,如果文件夹不存在,不会自动创建
///路径不存在就创建,PathFileExists检验路径是否有效,有效返回true
if (!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文件夹中的内容及相关例程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: