前段時間接觸了個操作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新增類和方法 ...