gpt4 book ai didi

c++ - 使用 Wt 和 libHARU 未定义引用渲染 PDF

转载 作者:太空宇宙 更新时间:2023-11-04 11:40:53 28 4
gpt4 key购买 nike

我正在尝试使用 libHARU library 生成 PDF结合Wt Web Toolkit .我正在尝试构建他们在 Wt Widget Gallery ( Wt PDF Renderer ) 中提供的示例代码,该代码从 XHTML 导出 PDF。

我正在使用 g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 启用 C++11 功能进行编译。

我在下面提供了示例代码,它是从他们网站上直接复制的。

我得到的错误如下:

In function `ReportResource::renderPdf(Wt::WString const&, _HPDF_Doc_Rec*)':
undefined reference to `Wt::Render::WPdfRenderer::WPdfRenderer(_HPDF_Doc_Rec*, _HPDF_Dict_Rec*)'
undefined reference to `Wt::Render::WPdfRenderer::setMargin(double, Wt::WFlags<Wt::Side>)'
undefined reference to `Wt::Render::WPdfRenderer::setDpi(int)'
undefined reference to `Wt::Render::WPdfRenderer::~WPdfRenderer()'
undefined reference to `Wt::Render::WPdfRenderer::~WPdfRenderer()'

我不明白这个错误的原因,因为我已经构建了 libHARU 库并将其链接到我的项目中。就像完整性检查一样——我可以右键单击 Wt::Render::WPdfRenderer::WPdfRenderer 并打开声明(如果您熟悉 Eclipse IDE),Eclipse 会将我带到这个类的头文件。是什么导致了“ undefined reference 错误”?

namespace {
void error_handler(HPDF_STATUS error_no, HPDF_STATUS detail_no, void *user_data) {
fprintf(stderr, "libharu error: error_no=%04X, detail_no=%d\n",
(unsigned int) error_no, (int) detail_no);
}
}

class ReportResource : public Wt::WResource
{

public:
ReportResource(Wt::WObject *parent = 0)
: Wt::WResource(parent)
{
suggestFileName("cycle-times.pdf");
}

virtual void handleRequest(const Wt::Http::Request& request,
Wt::Http::Response& response)
{
response.setMimeType("application/pdf");

HPDF_Doc pdf = HPDF_New(error_handler, 0);

// Note: UTF-8 encoding (for TrueType fonts) is only available since libharu 2.3.0 !
HPDF_UseUTFEncodings(pdf);

renderReport(pdf);

HPDF_SaveToStream(pdf);
unsigned int size = HPDF_GetStreamSize(pdf);
HPDF_BYTE *buf = new HPDF_BYTE[size];
HPDF_ReadFromStream (pdf, buf, &size);
HPDF_Free(pdf);
response.out().write((char*)buf, size);
delete[] buf;
}

private:
void renderReport(HPDF_Doc pdf) {
renderPdf(Wt::WString::tr("report.example"), pdf);
}

void renderPdf(const Wt::WString& html, HPDF_Doc pdf)
{
HPDF_Page page = HPDF_AddPage(pdf);
HPDF_Page_SetSize(page, HPDF_PAGE_SIZE_A4, HPDF_PAGE_PORTRAIT);

Wt::Render::WPdfRenderer renderer(pdf, page);

renderer.setMargin(2.54);
renderer.setDpi(96);
renderer.render(html);
}
};

最佳答案

PDF 是使用 The Haru 免费 PDF 库生成的,只有在构建库期间找到 libharu 时,此类才会包含在库中。

任何发现这个问题的人都需要先构建 libharu,然后在构建 Wt 之前告诉 cmake:

 cmake ../ -DHARU_PREFIX=/path/to/libharu

如果 libharu 未构建或找不到,您将在 cmake 的输出中看到类似如下的错误消息:

libharu libraries not found - set HARU_PREFIX after running cmake ../

关于c++ - 使用 Wt 和 libHARU 未定义引用渲染 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21439461/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com