论文部分内容阅读
摘要: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格式阅读原文。
关键词: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格式阅读原文。