最近开始接触PDFLib,随手记录下学习历程。使用PDFLib,新手最棘手的问题就是去除水印和显示中文字符。
1.去除水印
最简单也是最直接的方法下载破解版的PDFLib,下载PDFLib-9.1.2-win32。解压缩后,将pdflib中的pdflib.dll pdflib.lib pdflib.h拷贝到项目文件中。并且在VS项目属性->附加依赖项中加入pdflib.lib
2.显示中文字符
PDFlib-CMap为了用PDFlib创建中文,日文或韩文(CJK)文本输出并使用其中一个预定义的CMaps。下载PDFlib-CMap-3.0,并解压缩到任何路径,但是必须在使用时配置CMap文件路径,
eg: p.set_option("SearchPath=/path/to/resource/cmap"); or PDF_set_option(p,"SearchPath=/path/to/resource/cmap")
使用最常用的宋体STSong-Light(PDFLib自带的中文字体),解码方式是 GB-EUC-H(在cmap中)
代码:
#include
#include
#include "pdflib.h"
int main(int argc, char *argv[])
{
PDF *pdf = PDF_new();
// 打开文档
if (PDF_begin_document(pdf, "d://hello.pdf", 0, "") == -1)
{
printf("Error: %sn", PDF_get_errmsg(pdf));
return(0);
}
PDF_TRY(pdf)
{
PDF_set_option(pdf, "SearchPath=./PDFlib-CMap-3.0/resource/cmap");//配置cmap
PDF_set_info(pdf, "Creator", "PDF Creator");
PDF_set_info(pdf, "Title", "Convert to PDF");
PDF_begin_page_ext(pdf, a4_width, a4_height, "");// 开始A4页面
int nHeight = a4_height;//当前高度
int font_song = PDF_load_font(pdf, "STSong-Light", 0, "GB-EUC-H", "");
PDF_setfont(pdf, font_song, 34);// 设置字体为34号宋体
// 设置起始点
nHeight -= 50;
PDF_set_text_pos(pdf, 50, nHeight);
// 设置颜色为蓝色
PDF_setcolor(pdf, "fill", "rgb", 0, 0, 1, 0);
static const char *DFTitle[] = { "你好!", "中国。" };
for (int i = 0; i < 2; i++)
{
PDF_set_text_pos(pdf, 100* i, nHeight-40*i);//字体坐标
PDF_show(pdf, DFTitle[i]);
}
}
PDF_CATCH(pdf)
{
printf("PDFlib exception occurred in sample:/n");
printf("[%d] %s: %s/n",
PDF_get_errnum(pdf), PDF_get_apiname(pdf), PDF_get_errmsg(pdf));
}
PDF_end_page_ext(pdf, "");// 结束本页
PDF_end_document(pdf, "");// 关闭PDF文件
PDF_delete(pdf);
return 0;
结果截图:
彩蛋:
接下来就可以开始PDFLib正式学习,根据PDFLib API查看函数接口及功能,根据官方代码例子可以实现基本功能(划重点: PDFLib API和官方代码例子都能在下载的PDFlib中找到)。这样就很快进行了学习,高效且准确。