最近遇到一个项目,需要在虚幻中操作完成后输出PDF评估报告。网上找了一圈,大佬推荐了一个库libharu,开源的,索性下载来自己封装成UE的第三方库。为了方便使用,我用Cpp封装了一些常用的操作方法,比如添加文字、图片、表格等。支持页边距、字号、行间距设置,页码采用自动编号(从1开始),可以缩放图片、自适应表格行高等。
库地址:libharu库操作PDF文件-C++文档类资源-CSDN下载
github源码:
https://github.com/libharu/libharu
按照UE第三方库惯例,bin里为动态库文件、include是头文件、lib里是引导文件。
test文件夹里包含一个测试案例。
主要的自定义接口如下,当然本文提供的文件里libharu库也是全的,大家可以自己基于库封装自定义的接口:
#ifndef _PDF_INTERFACE_H
#define _PDF_INTERFACE_H
#include
#include
#include
#include "PdfInterface.h"
int main()
{
PdfInterface* test = NewPdfInterface();
test->SetFrame("libharu简介", true, true);
test->AddText("1.源码获取", 16, 0, 20);
test->AddText(" https://github.com/libharu/libharu");
test->AddText(" 官方网址 http://libharu.org/");
test->AddImage("C:/Users/Administrator/Desktop/demo0.png", "图 1 libharu GitHub首页图");
test->AddText(" ", 16, 0, 12);
test->AddText("2.libharu支持平台", 16, 0, 20);
test->AddText(" Haru 是用 ANSI - C 编写的,应该可以使用任何兼容的 C 轻松编译编译器。我在以下环境中检查了 Haru 并为它们制作了文件环境包含在一个包中。");
std::vector tablewidth{ 30,150,150 };
std::map> tabletitleitems;
tabletitleitems.insert(std::make_pair(0, std::vector{"1", "Cygwin + GCC(微软视窗)", "如果您成功在其他平台上构建 HARU,请将 makefile 发送给我。"}));
tabletitleitems.insert(std::make_pair(1, std::vector{"2", "Cygwin + MinGW(微软视窗)", "Haru 可以用作静态库(.a、.lib)和共享库(.so、.dll)。"}));
tabletitleitems.insert(std::make_pair(2, std::vector{"3", "MSYS + MinGW (微软视窗)", "如果您为其他编程语言编写绑定,请通知我!"}));
std::string tabletitle = "表 1 libharu支持平台";
test->AddTable(tablewidth, tabletitleitems, 16, tabletitle);
test->AddText(" ", 16, 0, 12);
test->AddText("3.版权声明", 16, 0, 20);
test->AddText(" 本软件按“原样”提供,没有任何明示或暗示的保证。在任何情况下,作者均不对因以下原因造成的任何损害负责本软件的使用。允许任何人出于任何目的使用此软件,包括商业应用程序,并对其进行更改和自由重新分发。不得歪曲本软件的出处;你不能声称你写的原始软件。如果您在一个产品,产品文档中的确认将是");
test->AddText("赞赏但不是必需的。更改的源版本必须清楚地标明,并且不得被误认为是原始软件。");
test->SaveToFile("ams.pdf", "C:/Users/Administrator/Desktop/");
DeletePdfInterface(test);
return 0;
}
欢迎各位下载体验,有问题随时私信我。