PDFLib庫的使用c

2021-09-26 22:28:06 字數 3440 閱讀 3415

前段時間接觸了個操作pdf的專案,使用pdflib庫對pdf檔案新增水印.這裡整理一些基礎的用法.

vs2015下使用pdflib9.1版本的破解庫,pdf庫在我的網盤中, 無需提取碼

載入pdflib(輸出pdf版本控制)

把源pdf檔案內容繪製到目標pdf檔案

獲取pdf檔案中的引數

線條/文字//透明度/旋轉/座標系

rgb顏色值計算

…(如果有空,後續再補充:一維碼繪製等)

一.載入pdflib

#include "../pdflib/pdflib.hpp"

#pragma comment(lib,"../pdflib/pdflib.lib")

using namespace pdflib;

pdflib m_opdf;
二.把源pdf檔案內容繪製到目標pdf檔案
bool paintpdf()

//開啟源pdf檔案獲取例項id

int nsrcpdfid = m_opdf.open_pdi_document(l"c:/src.pdf", l"");

if (nsrcpdfid == -1)

//m_opdf.set_option(l"searchpath=}");//設定預設路徑

//根據srcpdf例項id獲取pdf中的資訊

int endpage = (int)m_opdf.pcos_get_number(nsrcpdfid, l"length:pages");//總頁數

auto fwidth = (m_opdf.pcos_get_number(nsrcpdfid, l"pages[0]/width"));//寬度595

auto fheight = m_opdf.pcos_get_number(nsrcpdfid, l"pages[0]/height");//高度842

/*設定字型,若有中文,則中文字型必須是中文字型:如

int font = m_opdf.load_font(l"黑體", l"auto", l"");

並且,後續輸出文字內容編碼必須是utf8編碼

或者在後續輸出文字時使用如下字型格式optlist修飾:

fontname=黑體 fontsize=28 encoding=auto

*/int nfontid = m_opdf.load_font(l"微軟雅黑", l"host", l"");

if (nfontid == -1)

//根據原始檔的頁數,繪製新檔案的頁面

for (int pageno = 1; pageno <= endpage; pageno++)

//向文件新增新頁,並指定各種選項 l""

m_opdf.begin_page_ext(fwidth, fheight, l"");

//設定字型

m_opdf.setfont(nfontid, 18);

//中間水印,最先繪製,置於最底層

addmidwatermark();

//頁尾

addheaderwatermark();

//在頁面上放置匯入的pdf頁面,並根據不同的選項進行操作。

m_opdf.fit_pdi_page(page, 0, 0, l"adjustpage");

m_opdf.end_page_ext(l"");

m_opdf.close_pdi_page(page);

} // m_opdf.close_font(font);

m_opdf.close_pdi_document(nsrcpdfid);

m_opdf.end_document(l"");

return true;

} catch (pdflib::exception & e)

catch (...)

}

三.線條/文字//透明度/旋轉/座標系

字型風格:

fontname:字型名

fontsize:字型大小

encoding:編碼

fillcolor:顏色

fontstyle:加粗

underline:下劃線

underlineposition:下劃線位置

underlinewidth:下劃線寬度

strikeout:刪除線

strokecolor:刪除線/下劃線/上劃線顏色

italicangle:斜體(範圍: -90~90)

void wwatermarkwarpper::addheaderwatermark()

position=";

m_opdf.fit_textline(l"我是頁首水印文字!", 100, 600, wssopt.str());//center;

//恢復透明度

gstate = m_opdf.create_gstate(l"opacityfill=1");

m_opdf.set_gstate(gstate);

//恢復座標系

m_opdf.rotate(-nangle);

m_opdf.translate(-(a4_width / 2), -(a4_height / 2));

//繪製

m_opdf.fit_image(ncusimg, 100, 100, wssoptp.str());//option:adjustpage-填充頁;scale-縮放

m_opdf.close_image(ncusimg);

}

四.rgb顏色計算

根據 rgb顏色查詢對照表 可以看到顏色的值,然後把顏色值分三塊擷取轉換成10進製再按照最大值255的比例,即可獲取 fillcolor= 中的三個顏色值

//string(h) -> int(d)

int hextodec(const string s)

else if (s[i] >= 'a'&&s[i] <= 'f')//字母字元的轉換

}return sum;

}string transrgb(string sfontcolor)

sprintf(strfont, "fillcolor="

, colorr, colorg, colorb

);return strfont;

}

PDFlib使用例項

php id hello.php,v 1.00 2009 07 24 tm exp pdflib 使用 php euc jp pdf 生成 方法 euc jp 前提 cmap 配置 指定 define path cmaps c pdflib resource cmap p pdf new 新 pdf...

c 標準模板庫的使用

1.priority queue priority queue,greater q 小根堆,即對頭元素最小 priority queue 預設情況,大根堆,即隊頭元素最大。後續更新 2.deque 雙端佇列 介面類似vector 單向插入刪除 c.pop back 彈出最後乙個元素 c.push b...

使用C 呼叫C 類庫

1.使用c 編寫乙個動態庫 dll 2.將dll內函式匯出 3.使用c 進行呼叫 4.方法呼叫 5.在vs進行除錯 1.1建立專案 x64 在vs2017中新建 專案 visual c windows桌面 動態鏈結庫 在專案屬性中 常規中選擇無公共語言支援,即不建立託管c 類庫 1.2新增類和方法 ...