Chinaunix首页 | 论坛 | 博客
  • 博客访问: 536751
  • 博文数量: 576
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5020
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:47
文章分类

全部博文(576)

文章存档

2011年(1)

2008年(575)

我的朋友

分类:

2008-10-14 15:11:02

利用PDFLib生成PDF文档

作者:浙江省温岭电信局 王骏





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


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

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

三、在VC++中使用PDFLib
本文例子中使用的PDFLib是4.0.2版本,与5.0版本差不多。5.0免费版本中有一个的水印,4.0中没有。

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

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

#include "PDFLib.hpp"

#pragma comment(lib, "PDFLib.lib")
3.2.2生成PDF文档的过程
生成PDF文档的过程非常简单,请看如下编码:
int main(void)
{
	try
	{
		PDFlib pdf;

		// 设置兼容参数
		pdf.set_parameter("compatibility", "1.4");	// 兼容Acrobat 5


		// 打开文档
		if(pdf.open("vckbase.pdf") == -1)
			throw("打开文件出错!");

		// 设置文档信息
		pdf.set_info("Creator", "PDF Creator");
		pdf.set_info("Author", "WangJun");
		pdf.set_info("Title", "Convert to PDF");
		pdf.set_info("Subject", "PDF Creator");
		pdf.set_info("Keywords", "vckbase.com");

		// 开始A4页面
		pdf.begin_page(a4_width, a4_height);

		// 设置字体为12号宋体
		int font_song = pdf.findfont("STSong-Light", "GB-EUC-H", 0);
		pdf.setfont(font_song, 12);

		// 设置起始点
		pdf.set_text_pos(50, a4_height - 50);

		// 设置颜色为蓝色
		pdf.setcolor("fill", "rgb", 0, 0, 1, 0);

		// 输出文字
		pdf.show("VCKBASE.COM欢迎您!");

		pdf.setcolor("fill", "rgb", 0, 0, 0, 0);
		pdf.setfont(font_song, 24);
		pdf.continue_text("在线杂志");

		// 画两根绿线
		pdf.setcolor("stroke", "rgb", 0.24f, 0.51f, 0.047f, 0);
		pdf.moveto(50, a4_height - 80);
		pdf.lineto(a4_width - 50, a4_height - 80);
		pdf.moveto(50, a4_height - 78);
		pdf.lineto(a4_width - 50, a4_height - 78);
		pdf.stroke();

		// 填充一个蓝色方框
		pdf.setcolor("fill", "rgb", 0.04f, 0.24f, 0.62f, 0);
		pdf.rect(50, 50, a4_width - 100, 70);
		pdf.fill();

		// 在指定位置输出文字
		pdf.setcolor("fill", "rgb", 0, 1, 1, 0);
		pdf.setfont(font_song, 16);
		pdf.show_xy("版权所有 VCKBASE", a4_width - 280, 60);

		// 打开并显示一个图像
		int img = pdf.open_image_file("jpeg", "vckbase.jpg", "", 0);
		pdf.place_image(img, 200, 400, 1);
		pdf.close_image(img);

		// 添加附件
		pdf.attach_file(a4_width - 50, 0, 0, a4_height - 150,
				"vckbase.zip", "VCKBASE", "wj", "zip", "paperclip");

		// 结束本页
		pdf.end_page();

		// 关闭PDF文件
		pdf.close();

	}
	catch(PDFlib::Exception &ex)
	{
		cerr << "错误信息:" << ex.get_message() << endl;
		return -1;
	}
	catch(char *pStrErr)
	{
		cerr << pStrErr << endl;
		return -1;
	}
	catch(...)
	{
		cerr << "发生未知异常!" << endl;
		return -1;
	}

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

请问为何仅能生成1页pdf,想生成连续几页如何处理,谢谢 ( lfqnet 发表于 2008-10-6 21:38:00)
 
你们知不知道怎样用pdflib库在pdf文档中显示表格 ( tmxulei 发表于 2008-7-8 15:26:00)
 
妙 ( muzimeiwen 发表于 2006-1-18 14:00:00)
 
其它中文字体怎么显示,我试很多,都不行,只能用STSong-Light ( lcftc2 发表于 2004-8-22 21:16:00)
 
请问如何进行“粘贴”操作?多谢! ( shutle 发表于 2004-7-27 13:01:00)
 
如何去掉PDF中的水印,并且书签上如何显示汉字? ( sunrain232 发表于 2004-7-21 16:04:00)
 
谁写了注册机啊,谢谢啦。 ( littlestar 发表于 2004-7-16 21:40:00)
 
PDFLib for COM-NET V5.0.1 
X530602-4321CD-2678EF-B1D77F ( softy 发表于 2004-6-26 16:37:00)
 
免费版里有没有将多也tif文件或多个jpg文件转换成多页pdf的api? ( camel20 发表于 2004-5-19 9:02:00)
 
可以同时产生多份PDF文档 ( whh1017 发表于 2004-5-12 15:56:00)
 
.......................................................

--------------------next---------------------

阅读(620) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~