2014-01-29 5 views
1

Wt Web Toolkit과 함께 libHARU library을 사용하여 PDF를 생성하려고합니다. XHTML에서 PDF를 내보내는 Wt 위젯 갤러리 (Wt PDF Renderer)에서 제공하는 예제 코드를 작성하려고합니다.PDF를 Wt 및 libHARU로 렌더링하지 않음 참고

C++ 11 기능을 사용하지 않고 g ++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 을 사용하여 컴파일 중입니다.

나는 아래 사이트의 샘플에서 직접 복사 한 샘플 코드를 제공했다. 내가 만든 내 프로젝트에 libHARU 라이브러리를 연결 한 것처럼

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()' 

내가이 오류에 대한 이유를 이해하지 못하는 다음과 같이 내가 얻고

오류입니다. 온전한 체크와 마찬가지로 - 나는 Wt::Render::WPdfRenderer::WPdfRenderer을 오른쪽 클릭하여 선언문을 엽니 다. (Eclipse IDE에 익숙하다면) 이클립스는이 클래스의 헤더 파일로 바로 이동합니다. "정의되지 않은 참조 오류"의 원인은 무엇입니까?

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); 
     } 
    }; 

답변

1

PDF로는 하루 무료 PDF 라이브러리를 사용하여 생성되며,이 클래스는 libharu 라이브러리의 구축 중에 발견 된 경우에만 라이브러리에 포함되어 있습니다. libharu가 구축되지 않았거나 찾을 수없는 경우

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

, 당신은 오류 메시지가 나타납니다 :이 질문을 찾는

사람은 처음 libharu를 구축하고 다음과 같이 중량을 구축하기 전에 그것에 대해 cmake 말할 필요 비슷한 cmake 출력 :

libharu libraries not found - set HARU_PREFIX after running cmake ../ 
관련 문제