如何使用libharu库将中文文本转换为PDF文件
使用libharu库实现中文文本转PDF
要实现中文文本转PDF,libharu的核心是处理中文字体和编码支持,以下是完整的C++实现代码及关键环节说明:
完整实现代码
bool textConvertToPDF(std::vector<std::string> text, std::string filePath) { HPDF_Doc pdf = HPDF_New(nullptr, nullptr); if (!pdf) { // throw std::runtime_error("Failed to create PDF document"); return true; } std::vector<std::string> lines = text; // lines.push_back(text); try { // 添加一个页面 HPDF_Page page = HPDF_AddPage(pdf); HPDF_UseCNSFonts(pdf); HPDF_UseCNSEncodings(pdf); HPDF_SetCompressionMode(pdf, HPDF_COMP_ALL); // 设置页面尺寸(A4) HPDF_Page_SetSize(page, HPDF_PAGE_SIZE_A4, HPDF_PAGE_PORTRAIT); HPDF_SetCurrentEncoder(pdf, "UTF-8"); // 加载本地中文字体文件(需替换为实际可用的字体路径) HPDF_Font font = HPDF_GetFont(pdf, HPDF_LoadTTFontFromFile(pdf, "/storage/emulated/0/Android/data/com.meitu.MTIKDemo/files/simsun.ttf", HPDF_TRUE), "UTF-8"); HPDF_Page_SetFontAndSize(page, font, 12); // 设置起始位置 float x = 50; // 左边距 float y = HPDF_Page_GetHeight(page) - 50; // 顶部边距 float line_height = 14; // 每行文本的高度(包含行间距) // 绘制每一行文本 HPDF_Page_BeginText(page); for (const auto& line : lines) { HPDF_Page_TextOut(page, x, y, line.c_str()); y -= line_height; // 移动到下一行 if (y < 50) { // 如果超出页面底部,创建新页面 HPDF_Page_EndText(page); page = HPDF_AddPage(pdf); HPDF_Page_SetSize(page, HPDF_PAGE_SIZE_A4, HPDF_PAGE_PORTRAIT); HPDF_Page_SetFontAndSize(page, font, 12); y = HPDF_Page_GetHeight(page) - 50; HPDF_Page_BeginText(page); } } HPDF_Page_EndText(page); // 保存 PDF 文件 HPDF_SaveToFile(pdf, filePath.c_str()); } catch (...) { HPDF_Free(pdf); // throw; return false; } HPDF_Free(pdf); return true; }
关键环节说明
- 文档资源管理:用
HPDF_New初始化PDF文档,无论执行成功或失败,都必须调用HPDF_Free释放资源,避免内存泄漏。 - 中文支持配置:
HPDF_UseCNSFonts和HPDF_UseCNSEncodings启用libharu的中文基础支持组件;HPDF_SetCurrentEncoder(pdf, "UTF-8")设置文档编码为UTF-8,确保中文文本能被正确解析。
- 本地字体加载:libharu默认中文字体覆盖有限,必须加载本地TTF字体(如宋体simsun.ttf)。通过
HPDF_LoadTTFontFromFile加载字体文件,再用HPDF_GetFont关联UTF-8编码,注意替换代码中的字体路径为实际存在的有效路径。 - 页面与文本布局:设置A4竖版页面,定义边距和行高,逐行绘制文本;当文本超出页面底部时,自动创建新页面并延续绘制逻辑。
- 异常处理:用try-catch块捕获异常,确保出错时能及时释放PDF资源,避免资源泄漏。
内容的提问来源于stack exchange,提问作者renzhihe
相关产品推荐
相关产品推荐

