利用PDFLib生成PDF文档

http://www.vckbase.com/index.php/wv/796


本文代码生成的PDF文档效果图

一、PDF介绍

PDF是Portable Document Format的缩写,PDF文件格式是国际通用的电子文档交换事实标准,被许多国家采用作为电子文档交换。PDF文件可以在各种平台下阅读、编辑、发布。该文件格式支持字体、图像、甚至任何附件的嵌入。您可以通过免费的Adobe Acrobat Reader来阅读、编辑PDF文档。

二、PDFLib介绍

PDFLib是用于创建PDF文档的开发库,提供了简单易用的API,隐藏了创建PDF的复杂细节且不需要第3方软件的支持。PDFLib库对于个人是免费的,对于商业产品需要购买许可, 您可以到VC知识库的工具与资源栏目下载:http://www.vckbase.com/tools/。

三、在VC++中使用PDFLib

本文例子中使用的PDFLib是4.0.2版本,与5.0版本差不多。5.0免费版本中有一个WWW.PDFLIB.COM的水印,4.0中没有。

3.1 前期准备

建立工程后,将except.cpp,except.h,pdflib.cpp,pdflib.h,pdflib.dll,pdflib.lib拷贝到工程目录。

3.2 编码

3.2.1 添加对头文件和库的引用

1. #include "PDFLib.hpp"
2.  
3. #pragma comment(lib, "PDFLib.lib")

3.2.2生成PDF文档的过程

生成PDF文档的过程非常简单,请看如下编码:

01. int main(void)
02. {
03. try
04. {
05. PDFlib pdf;
06.  
07. // 设置兼容参数
08. pdf.set_parameter("compatibility""1.4");  // 兼容Acrobat 5
09.  
10.  
11. // 打开文档
12. if(pdf.open("vckbase.pdf") == -1)
13. throw("打开文件出错!");
14.  
15. // 设置文档信息
16. pdf.set_info("Creator""PDF Creator");
17. pdf.set_info("Author""WangJun");
18. pdf.set_info("Title""Convert to PDF");
19. pdf.set_info("Subject""PDF Creator");
20. pdf.set_info("Keywords""vckbase.com");
21.  
22. // 开始A4页面
23. pdf.begin_page(a4_width, a4_height);
24.  
25. // 设置字体为12号宋体
26. int font_song = pdf.findfont("STSong-Light""GB-EUC-H", 0);
27. pdf.setfont(font_song, 12);
28.  
29. // 设置起始点
30. pdf.set_text_pos(50, a4_height - 50);
31.  
32. // 设置颜色为蓝色
33. pdf.setcolor("fill""rgb", 0, 0, 1, 0);
34.  
35. // 输出文字
36. pdf.show("VCKBASE.COM欢迎您!");
37.  
38. pdf.setcolor("fill""rgb", 0, 0, 0, 0);
39. pdf.setfont(font_song, 24);
40. pdf.continue_text("在线杂志");
41.  
42. // 画两根绿线
43. pdf.setcolor("stroke""rgb", 0.24f, 0.51f, 0.047f, 0);
44. pdf.moveto(50, a4_height - 80);
45. pdf.lineto(a4_width - 50, a4_height - 80);
46. pdf.moveto(50, a4_height - 78);
47. pdf.lineto(a4_width - 50, a4_height - 78);
48. pdf.stroke();
49.  
50. // 填充一个蓝色方框
51. pdf.setcolor("fill""rgb", 0.04f, 0.24f, 0.62f, 0);
52. pdf.rect(50, 50, a4_width - 100, 70);
53. pdf.fill();
54.  
55. // 在指定位置输出文字
56. pdf.setcolor("fill""rgb", 0, 1, 1, 0);
57. pdf.setfont(font_song, 16);
58. pdf.show_xy("版权所有 VCKBASE", a4_width - 280, 60);
59.  
60. // 打开并显示一个图像
61. int img = pdf.open_image_file("jpeg""vckbase.jpg""", 0);
62. pdf.place_image(img, 200, 400, 1);
63. pdf.close_image(img);
64.  
65. // 添加附件
66. pdf.attach_file(a4_width - 50, 0, 0, a4_height - 150,
67. "vckbase.zip""VCKBASE""wj""zip""paperclip");
68.  
69. // 结束本页
70. pdf.end_page();
71.  
72. // 关闭PDF文件
73. pdf.close();
74.  
75. }
76. catch(PDFlib::Exception &ex)
77. {
78. cerr << "错误信息:" << ex.get_message() << endl;
79. return -1;
80. }
81. catch(char *pStrErr)
82. {
83. cerr << pStrErr << endl;
84. return -1;
85. }
86. catch(...)
87. {
88. cerr << "发生未知异常!" << endl;
89. return -1;
90. }
91.  
92. return 0;
93. }

PDFLIB还有许多功能,比如书签、PDF导入等功能,具体可以参考PDFLIB函数手册(可以到VC知识库中下载pdflib5.0,里面包含了该手册)。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
什么是 PDFlibPDFlib 是一个帮助您生成符合 Adobe 的可移植文档格式 (PDF) 文件的中 间件。PDFlib 充当用户自己程序的后端。当应用程序员负责抽取要处理的数据时, PDFlib 承担生成 PDF 输出(图解数据)的任务。PDFlib 让您无需再关注 PDF 的内部细节问题,并 提供了各种方法来帮助您设置输出的格式。发布软件包在同一个二进制文件中包含了不同 的产品: > PDFlib 包含创建 PDF 输出(包括文本、矢量图形和图像以及超文本元素)所必需的所有 函数。PDFlib 为放置单行或多行文本、图像和创建表提供了强大的格式化功能。 > PDFlib+PDI 包括所有 PDFlib 函数,以及用于在输出的文件中嵌入现有的 PDF 文档页的 PDF 输入库 (PDI),及用于查询导入文档中任意 PDF 对象(例如列出页面上的所有字体、 查询元数据等等)的 pCOS 接口。 > PDFlib Personalization Server (PPS) 包括 PDFlib+PDI 以及用于自动填充 PDFlib 块的附 加函数。块是页上的占位矩形,可以用文本、图像或 PDF 页进行填充。可以使用适用于 Adobe Acrobat (Mac 或 Windows)的 PDFlib 块插件交互式创建块,并使用 PPS 自动 进行填充。该插件包含在 PPS 中 如何使用 PDFlibPDFlib 可在多种平台上使用,包括 Unix、Windows、Mac 和基于 EBCDIC 的系统(如 IBM eServer iSeries 和 zSeries)。虽然 PDFlib 自身是用 C 语言编写的, 但也可以从多种其他语言或编程环境访问它。这种情况称为“语言绑定”。这些语言绑定覆 盖了所有当前 Web 和独立应用程序环境。应用程序编程接口 (API) 简单易学,且对于所有的 绑定都是相同的。目前,支持以下的语言绑定: > COM (用于 Visual Basic、带有 VBScript 或 JScript 的 Active Server Page、Borland Delphi、Windows Script Host 和其他环境) > ANSI C > ANSI C++ > Cobol (IBM eServer zSeries) > Java (包括 servlet) > .NET (用于 C#、VB.NET、ASP.NET 和其他环境) > PHP 超文本处理器 > Perl > Python > REALbasic > RPG (IBM eServer iSeries) > Ruby,包括 Ruby on Rails > Tcl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值