首页 > 范文大全 > 正文

用C++生成PDF文档

开篇:润墨网以专业的文秘视角,为您筛选了一篇用C++生成PDF文档范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:PDF文件格式是国际通用的电子文档交换事实标准,PDF文档可以在各种平台下阅读、编辑、。通过实例介绍在c++中用PDFLib开发库创建PDF文档的过程, PDFlib 几乎可以在所有计算机操作系统上运行。

关键词:C++;PDF文档;PDFLib开发库

中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)04-11024-02

1 PDF文档简介

PDF是英文Portable Document Format的缩写,其文件格式是国际通用的电子文档交换事实标准,被许多国家采用。PDF文档可以在各种平台下阅读、编辑、。该文件格式支持字体、图像、甚至任何附件的嵌入。可以通过免费的Adobe Acrobat Reader来阅读、编辑PDF文档。Adobe 可移植文档格式 (PDF) 由 Adobe Systems 创立,并在近二十年的时间里日甄完善。使用 Adobe 可移植文档格式,可以捕获和查看来自任何应用程序、任何计算机系统的丰富强大的信息, 并将这些信息与全球各地的任何人共享。

2 生成pdf文档的技术基础

PDFLib是用于创建PDF文档的开发库,提供了简单易用的API,隐藏了创建PDF的复杂细节且不需要第三方软件的支持。PDFlib 程序库包含着各式模块,通过对它们的调用客户可以生成含有文本,矢量图, 图象及超文本等的PDF文档。PDFlib 可以帮助你完成以下任务,根据用户要求生成文本PDF 文档,为数据库生成PDF 格式的报表,将图象转换成PDF 文档。PDFlib 提供了三个系列的软件包:PDFlib, PDFlib+PDI及 PDFlib Personalization Server (PPS)。简单易用的PDFlib 程序接口PDFlib 核心是用ANSI C 语言编写的。在VB6.0、VC++6.0、.NET、Java等程序开发环境中,用户只需通过简单的API 就能实现对不同功能模块的调用。

3 生成PDF文档

PDFLib是用于创建PDF文档的开发库包括pdflib.cpp、pdflib.h、pdflib.dll、pdflib.lib等文件。建立基于对话框的工程(名为:lflpdf)后,将它们拷贝到工程目录中。生成PDF文档的C++主要程序代码如下。

void ClflpdfDlg::OnBnClickedButPdfbrowse()

{// 浏览Button控件通知处理程序代码

int mkp;

CString str,type_page;

str="PDFFH1.PDF";

type_page = "B5";

mkp=makefhpdf(type_page,str);

if (mkp==0){

AfxMessageBox("数据连接失败或无数据!");

return; }

if (mkp==-1){

AfxMessageBox("pdf文件生成失败!");

return;}

ShellExecute(NULL,"open",str,NULL,NULL,SW_SHOW);}

int ClflpdfDlg::makefhpdf(CString m_page,CString gh)

{//生成pdf文档的成员函数

PDF *p;

int font,songfont,heifont,fangfont,i, maxi;

char * chrgh;

CString str,str1,gh1;

CString ll[10][5];

_variant_t var;

gh1 = gh;

chrgh=gh1.GetBuffer(gh1.GetLength());

for(i = 0; i < 10; i++)

for(maxi = 0; maxi < 5; maxi++)

ll[i][maxi] = "";

try

{//连接数据库

m_pConn.CreateInstance(__uuidof(Connection));

m_pConn->CursorLocation=adUseClient;

str_pConn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=jlqj.mdb";

m_pConn->Open((LPCSTR)_bstr_t(str_pConn),"","",adModeUnknown);

str.Format("SELECT * FROM jbsq");

m_pRecordset.CreateInstance(__uuidof(Recordset));

m_pRecordset->Open((LPCSTR)_bstr_t(str), m_pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);

catch(...){

AfxMessageBox("数据库连接失败!");

return FALSE;}

if ((p = PDF_new()) == (PDF *) 0)

{ return -1; }

//下面为生成pdf文档的程序段

PDF_set_parameter(p,"compatibility", "1.4");

PDF_TRY(p) {

if (PDF_begin_document(p, chrgh, 0, "") == -1) {

return -1;}

font = PDF_load_font(p, "Helvetica-Bold", 0, "host", "");//定义字体

songfont = PDF_load_font(p,"STSongStd-Light-Acro",0, "GBK-EUC-H", "");

heifont = PDF_load_font(p,"STSong-Light",0, "GBK-EUC-H", "");

fangfont = PDF_load_font(p,"AdobeSongStd-Light-Acro", 0,"GBK-EUC-H", "");

PDF_set_parameter(p, "hypertextencoding", "host");

PDF_begin_page_ext(p,b5_height ,b5_width , "");}}

PDF_CATCH(p) {

PDF_delete(p);

return -1;}

PDF_delete(p);

return 1;}

4 结束语

以上生成PDF文档的C++程序,在Visual C++.NET2003下调试通过。它可以完成输出汉字及表格,具有选择汉字字体字号等功能。其实,PDFlib还有许多功能,比如输出矢量图, 图象及超文本等功能,具体可以参考PDFlib函数手册(可以到VC知识库中下载pdflib5.0,里面包含了该手册)。

参考文献:

[1]陈坚,陈伟.等.Visual C++网络高级编程[M].北京:人民邮电出版社,2001.8.

[2]Bjarne Stroustrup(美),裘宗燕. C++程序设计语言[M].北京:机械工业出版社,2002.7.

[3]林俊杰.新一代Visual C++ 2005程序设计[M].北京.清华大学出版社,2006.

[4]龚建伟.等. Visual C++/Turbo C串囗通信编程实践[M].北京:电子工业出版社,2004.

本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。