使用C++編輯導出pdf文件


  最近由於項目需要,需要用C++編輯Json數據為pdf並導出,記錄一下學習過程。

c++ 第三方pdf庫的選擇

  網上找到的可用C++ pdf庫有libharu和pdflib, 其中libharu是開源的,pdflib個人使用是免費的,商用的則需要授權。一開始我是用的libharu, 從網上下載源碼,然后編譯,編譯過程發現,這個過程比較麻煩,且一直沒有成功,於是換成了pdflib。 我比較推薦使用pdflib, 不用那么折騰,這里貼一下pdflib的官網 pdflib, 但是官網下載的pdflib導出的pdf會有水印,我在網上找到了沒有水印的版本,文末分享給大家。

如何在VS2013中使用pdflib

  • 在VS2013中新建一個空項目,然后進入項目文件夾,新建include文件夾
  • 將pdflib.h、pdflib.hpp和cpp_wrapped.h拷貝到include中,將pdflib.lib和pdflib.dll直接拷貝到項目文件夾
  • 在項目屬性中添加附加包含目錄

  • 在項目屬性中添加附加依賴項 pdflib.lib

 

 

添加中文支持

  從pdflib下載Cmaps, 我也會在文末的分享里加上Cmaps, 將下好的Cmap解壓放到項目路徑,在代碼中加上

p.set_option(L"searchpath=../PDFlib-CMap-4.0/resource/cmap");

測試代碼

// testpdf.cpp : 定義控制台應用程序的入口點。
#include "stdafx.h"
#include <iostream>
#include "include/pdflib.h"
#include "include/pdflib.hpp"
using namespace std;
using namespace pdflib;

int main(void)
{
    try
    {
        PDFlib p;

        // 打開文檔
        if (p.begin_document(L"test.pdf", L"") == -1) {
            wcerr << "Error: " << p.get_errmsg() << endl;
            return 2;
        }
        //配置cmap,用於支持中文字體
        p.set_option(L"searchpath=../PDFlib-CMap-4.0/resource/cmap");
        p.set_info(L"Creator", L"oneclick");
        p.set_info(L"Author", L"Thomas Merz");
        p.set_info(L"Title", L"test");

        p.begin_page_ext(a4_width, a4_height, L"");                    //設置pdf大小為A4

        //    設置中文字體並檢查
        int font = p.load_font(L"STSong-Light", L"UniGB-UCS2-H", L"");;
        if (font == -1) {
            wcerr << L"Error: " << p.get_errmsg() << endl;
            return(2);
        }
        //輸出標題
        p.setfont(font, 24);
        p.set_text_pos(200, 800);
        p.show(L"Hello world");

        p.continue_text(L"你好,世界");
        p.end_page_ext(L"");
        p.end_document(L"");
    }
    catch (PDFlib::Exception &ex) {
        wcerr << L"PDFlib exception occurred in hello sample: " << endl
            << L"[" << ex.get_errnum() << L"] " << ex.get_apiname()
            << L": " << ex.get_errmsg() << endl;
        return 2;
    }
    return 0;
}

  代碼運行成功就會生成一個test.pdf文件,內容如下:

 

 

pdflib和Cmaps分享:

鏈接:https://pan.baidu.com/s/1WPz3pNMtszG5M-gFKQ51-Q 提取碼:z53r

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM