C++實(shí)現(xiàn)添加圖片水印到PDF文檔
水印是顯示在文檔內(nèi)容后面的淡色文字或圖片,可以用于指示文檔的狀態(tài)(保密、草稿等),也可以含蓄地展示公司徽標(biāo)。水印有助于提示文檔的來(lái)源,從而避免未經(jīng)允許的復(fù)制和轉(zhuǎn)發(fā)。本文將介紹如何使用 Spire.PDF for C++ 在 PDF 文檔中添加圖片水印。
安裝 Spire.PDF for C++
有兩種方法可以將 Spire.PDF for C++ 集成到您的應(yīng)用程序中。一種方法是通過(guò) NuGet 安裝它,另一種方法是從我們的網(wǎng)站下載包并將庫(kù)復(fù)制到您的程序中。通過(guò) NuGet 安裝更簡(jiǎn)單,更推薦使用。您可以通過(guò)訪問(wèn)以下鏈接找到更多詳細(xì)信息。
如何將 Spire. PDF for C++ 集成到 C++ 程序中
添加單一圖片水印到 PDF 文檔
Sprie.PDF for C++ 提供的 PdfPageBase->GetCanvas()->DrawImage() 方法可以在 PDF 頁(yè)面的任意位置繪制圖片,而通過(guò)對(duì)圖片的透明度進(jìn)行調(diào)節(jié)可以實(shí)現(xiàn)淡色效果,使其不覆蓋文檔內(nèi)容。添加單一圖片水印的操作步驟如下:
- 創(chuàng)建 PdfDocument 的對(duì)象。
- 使用 PdfDocument->LoadFromFile() 方法載入 PDF 文件。
- 使用 PdfImage::FromFile() 方法載入圖片。
- 循環(huán)遍歷文檔頁(yè)面以繪制水印。
- 使用 PdfDocument->GetPages()->GetItem() 方法獲取指定頁(yè)面。
- 使用 PdfPageBase->GetCanvas()->SetTransparency() 方法設(shè)置透明度。
- 使用 PdfPageBase->GetCanvas()->DrawImage() 方法將圖片繪制在頁(yè)面上。
- 使用 PdfDocument->SaveToFile() 方法保存文檔。
#include "Spire.Pdf.o.h" using namespace Spire::Pdf; int main() { //創(chuàng)建PdfDocument的對(duì)象 PdfDocument* document = new PdfDocument(); //載入PDF文件 document->LoadFromFile(L"C:/我們之間的距離.pdf"); //載入圖片 PdfImage* img = PdfImage::FromFile(L"C:/Logo.png"); //獲取圖片的高度和寬度 int imageWidth = img->GetWidth(); int imageHeight = img->GetHeight(); for (int i = 0; i < document->GetPages()->GetCount(); i++) { //獲取指定頁(yè)面 PdfPageBase* page = document->GetPages()->GetItem(i); //獲取頁(yè)面的高度和寬度 float pageWidth = (float)(page->GetActualSize()->GetWidth()); float pageHeight = (float)(page->GetActualSize()->GetHeight()); //設(shè)置透明度 page->GetCanvas()->SetTransparency(0.3f); //將圖片繪制在頁(yè)面中央 page->GetCanvas()->DrawImage(img, pageWidth / 2 - imageWidth / 2, pageHeight / 2 - imageHeight / 2, imageWidth, imageHeight); } //保存文檔 document->SaveToFile(L"Output/單一圖片水印.pdf"); document->Close(); delete document; }
添加平鋪圖片水印到 PDF 文檔
PdfTilingBrush 類表示平鋪畫筆,可以生成重復(fù)平鋪圖案來(lái)填充區(qū)域。以下是插入平鋪水印的詳細(xì)操作步驟:
- 創(chuàng)建一個(gè)自定義方法 InsertTiledImagetWatermark(PdfPageBase* page, PdfImage* image, int rowNum, int columnNum) 來(lái)添加平鋪水印到 PDF 頁(yè)面??赏ㄟ^(guò)參數(shù) rowNum 和 columnNum 來(lái)指定平鋪水印的行數(shù)和列數(shù)。
- 創(chuàng)建 PdfDocument 的對(duì)象。
- 使用 PdfDocument->LoadFromFile() 方法載入 PDF 文檔。
- 遍歷文檔中的所有頁(yè)面,并調(diào)用自定義方法 InsertTiledImageWatermark() 來(lái)給每一頁(yè)添加水印。
- 使用 PdfDocument->SaveToFile() 方法保存文檔。
#include "Spire.Pdf.o.h" using namespace Spire::Pdf; void InsertTiledImageWatermark(PdfPageBase* page, PdfImage* img, int row, int column) { //創(chuàng)建平鋪筆刷 PdfTilingBrush* brush = new PdfTilingBrush(new SizeF(page->GetCanvas()->GetSize()->GetWidth() / (int)(row), page->GetCanvas()->GetSize()->GetHeight() / (int)(column))); //設(shè)置透明度 brush->GetGraphics()->SetTransparency(0.3); //將圖片繪制在筆刷上 brush->GetGraphics()->DrawImage(img, new PointF((brush->GetSize()->GetWidth() - img->GetWidth()) / 2.f, (brush->GetSize()->GetHeight() - img->GetHeight()) / 2.f)); //使用筆刷將圖片繪制在頁(yè)面上 page->GetCanvas()->DrawRectangle(brush, new RectangleF(new PointF(0, 0), page->GetCanvas()->GetSize())); } int main() { //創(chuàng)建PdfDocument的對(duì)象 PdfDocument* pdf = new PdfDocument(); //載入PDF文件 pdf->LoadFromFile(L"C:/我們之間的距離.pdf"); //載入圖片 PdfImage* img = PdfImage::FromFile(L"C:/Logo.png"); //循環(huán)遍歷文檔頁(yè)面以添加水印 for (int i = 0; i < pdf->GetPages()->GetCount(); i++) { //獲取一個(gè)頁(yè)面 PdfPageBase* page = pdf->GetPages()->GetItem(i); //添加水印到頁(yè)面 InsertTiledImageWatermark(page, img, 3, 3); } //保存文檔 pdf->SaveToFile(L"Output/平鋪圖片水印.pdf"); pdf->Close(); delete pdf; }
到此這篇關(guān)于C++實(shí)現(xiàn)添加圖片水印到PDF文檔的文章就介紹到這了,更多相關(guān)C++ PDF添加圖片水印內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++如何解決rand()函數(shù)生成的隨機(jī)數(shù)每次都一樣的問(wèn)題
這篇文章主要介紹了C++如何解決rand()函數(shù)生成的隨機(jī)數(shù)每次都一樣的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08學(xué)習(xí)C和C++的9點(diǎn)經(jīng)驗(yàn)總結(jié)
本文給大家總結(jié)了一下我們?cè)趯W(xué)習(xí)C和C++的時(shí)候的一些經(jīng)驗(yàn)和需要注意的事項(xiàng),希望能給大家一些幫助,少走些彎路2015-12-12C語(yǔ)言實(shí)現(xiàn)單鏈表實(shí)現(xiàn)方法
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)單鏈表實(shí)現(xiàn)方法的相關(guān)資料,鏈表分為單向鏈表、雙向鏈表、循環(huán)鏈表,需要的朋友可以參考下2017-08-08strings命令分析淺談Go和C++編譯時(shí)的一點(diǎn)小區(qū)別
今天小編就為大家分享一篇關(guān)于strings命令分析淺談Go和C++編譯時(shí)的一點(diǎn)小區(qū)別,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-04-04C++利用棧實(shí)現(xiàn)中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式
這篇文章主要為大家詳細(xì)介紹了C++利用棧實(shí)現(xiàn)中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04