【C/C++】使用PDFLIB创建一个带中文的pdf文件
先放一下效果图
首先需要准备pdflib.h,pdflib.lib,pdflib.dll三个文件。网上资源很多,为了方便,我还是顺便附上链接,不保证长期有效。https://pan.baidu.com/s/1mo2YmOpsyawgs_eJUxO2LQ 提取码:kwko
(直接去官网下载就可以了https://www.pdflib.com/download/pdflib-product-family/,选C/C++版本,下载好后pdflib目录下就有这三个文件)
把三个文件拷贝到项目目录下,然后复制下面的代码,运行。
如果代码有用的话,你可以继续往下看。
#include"pdflib.h"
#include<Windows.h>
#include <iostream>
#include <string>
using namespace std;std::string UnicodeToUtf8(const std::wstring &strUnicode)
{int len = WideCharToMultiByte(CP_UTF8, 0, strUnicode.c_str(), -1, NULL, 0, NULL, NULL);if (len == 0){return "";}char *pRes = new char[len];if (pRes == NULL){return "";}WideCharToMultiByte(CP_UTF8, 0, strUnicode.c_str(), -1, pRes, len, NULL, NULL);pRes[len - 1] = '\0';std::string result = pRes;delete[] pRes;return result;
}std::wstring StringToWString(const std::string &str)
{int len = MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, NULL, 0);if (len == 0){return L"";}wchar_t *pRes = new wchar_t[len];if (pRes == NULL){return L"";}MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, pRes, len);pRes[len - 1] = L'\0';std::wstring result = pRes;delete[] pRes;return result;
}
string toUtf8(const char* str) {string s= UnicodeToUtf8(StringToWString(str));return s;
}int main()
{PDF* pdf = PDF_new();if (PDF_begin_document(pdf, "this.pdf", 0, "") == -1) {cout << "创建pdf文件失败,程序即将退出" << endl;return 1;}PDF_TRY(pdf) {//PDF_set_option(pdf, "SearchPath=./PDFlib-CMap-3.0/resource/cmap");//配置cmapPDF_set_parameter(pdf, "charref", "true");PDF_set_parameter(pdf, "textformat", "utf8");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", "");int font_song = PDF_load_font(pdf, "C:\\Windows\\Fonts\\simsun:1", 0, "unicode", "");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[] = { "你好世界。", "hello world." };for (int i = 0; i < 2; i++){PDF_set_text_pos(pdf, 100 * i, nHeight - 40 * i);//字体坐标char a[100];strcpy(a, toUtf8(DFTitle[i]).c_str());strcpy(a, DFTitle[i]);PDF_show(pdf, toUtf8(DFTitle[i]).c_str());}PDF_end_page_ext(pdf, "");PDF_end_document(pdf, "");}PDF_CATCH(pdf){printf("PDFlib 异常:\n");printf("[%d] %s: %s\n",PDF_get_errnum(pdf), PDF_get_apiname(pdf), PDF_get_errmsg(pdf));}return 0;
}
比英文多的步骤就是,需要把传入PDF的字符串进行utf8编码,就是我上面的toUtf8函数。如果不做这步,输出的中文就会乱码。
网上PDFLIB的代码很多,但对中文支持都不怎么好。
自己查资料,看代码折腾了很久,总算是实现了。
【C/C++】使用PDFLIB创建一个带中文的pdf文件相关推荐
- iText创建一个含有中文的pdf文档
有朋友问我pdfbox支不支持向pdf文档中写入中文.然后试了好多遍都是有乱码,也找了好多资料没有找到解决办法. 但是在查找资料的过程中发现了另一个处理pdf的开源库iText.官方介绍 http:/ ...
- python怎么创建列表_用Python将一个列表分割成小列表的实例讲解 Python 如何创建一个带小数的列表...
python里有一个列表,列表里有几个小列表,小列表#冒泡排序:scoreList = [['a',98],['c',45],['b',70],['d',85],['h',85],['f',92],[ ...
- 微信服务号如何创建一个带参数的微信二维码?
渠道二维码,也称为渠道码,带参二维码,带参统计二维码,顾名思义,渠道二维码的意思就是通过创建一个带参数的二维码来自动统计各渠道数据,是微信公众平台为服务号提供的一种开放接口功能,适用于多种扫码场景,例 ...
- 【区块链实战】如何创建一个带参数的智能合约
目录 一.简介 二.知识点 智能合约 Solidity 公共变量 Solidity 私有变量 以太坊椭圆曲线算法 keccak256 abi 转码 智能合约编译,部署和运行 三.菜鸟实战 四.运行结果 ...
- 「六」创建一个带 weblogic 服务的基础镜像
Weblogic Weblogic 简单介绍以及其在 Docker 环境下的特殊应用 WebLogic是美国Oracle公司出品的一个application server确切的说是一个基于JAVAEE ...
- 创建一个带参数的formgoup_基于原生Fabric-SDK-Go 实现一个简单的学历征信系统,状态数据库使用 CouchDB 来实现...
[TOC] 1. 需求分析与架构设计 我们要基于 原生Fabric-SDK-Go 实现一个简单的学历征信系统(web项目),状态数据库使用 CouchDB 来实现. 1.1 需求分析 现在是一个信息化 ...
- 将HTML文件转换为PDF文件(Thymeleaf模板转换,简单解决中文问题, 解决HTML带图片转换PDF文件问题)
将HTML文件转换为PDF文件 一.导入依赖 <!-- itext生成Pdf --> <dependency><groupId>com.itextpdf</g ...
- Windows上快速创建一个1G以上的大文件
利用fsutil命令 fsutil file createnew e:\b.txt 1073741824 以上命令就是在e盘创建一个1G的b.txt文件
- 如何创建一个没有密码的加密文件夹
就像这样 using System; using System.Collections.Generic; using System.IO; using System.Windows;namespace ...
- Foxit MobilePDF SDK_如何快速创建一个功能丰富的PDF 阅读器
一直以来,我都比较关注福昕的PDF SDK套件,这几天稍微有时间看了下最新发布的4.0版本,然后呢,然后呢,我就被深深的震惊到了,为甚么? 因为这个版本可以很轻松很容易的创建一个功能超级丰富的PDF阅 ...
最新文章
- oracle job使用详解及job不运行的检查方法
- Twitter-Snowflake,64位自增ID算法详解
- mysql5.7rpm安装 force_mysql5.7.27离线安装(基于centos7 ,通过rpm安装)
- [BZOJ 1124][POI 2008] 枪战 Maf
- 浅析ProcessBuilder
- 4G通信技术LTE介绍
- 情报使能 合作共赢 | TI INSIDE计划发布会即将开始
- python 控制流
- c语言 和 运算顺序,二 如何学习C语言的运算符和运算顺序
- 房间匹配机制--自走旗
- linux 服务 ddns,Linux DDNS配置
- 编写一个函数模板,实现两个对象大小的比较,并按照需求返回较大者或较小者。
- processson的文件数量已达到上限如何删除老文件新建新的文件创建流程图
- python全案例学习_Python全案例学习与实践
- vue H5页面调用手机相机拍照/图库上传
- 怎么换头像啊。。。。。
- android手机8g内存够用嘛,安卓手机8G内存和12G内存有啥区别?
- Java编写程序求一个正整数(自然数)的阶乘
- C++单例对象是什么?(单例模式)
- 计算机二级aoa系统安装百度云,计算机二级AOA理论题库.pdf