水印是显示在文档内容后面的淡色文字或图片,可以用于指示文档的状态(保密、草稿等),也可以含蓄地展示公司徽标。水印有助于提示文档的来源,从而避免未经允许的复制和转发。本文将介绍如何使用 Spire.PDF for C++ 在 PDF 文档中添加图片水印。
安装 Spire.PDF for C++
有两种方法可以将 Spire.PDF for C++ 集成到您的应用程序中。一种方法是通过 NuGet 安装它,另一种方法是从我们的网站下载包并将库复制到您的程序中。通过 NuGet 安装更简单,更推荐使用。您可以通过访问以下链接找到更多详细信息。
如何将 Spire. PDF for C++ 集成到 C++ 程序中
添加单一图片水印到 PDF 文档
Sprie.PDF for C++ 提供的 PdfPageBase->GetCanvas()->DrawImage() 方法可以在 PDF 页面的任意位置绘制图片,而通过对图片的透明度进行调节可以实现淡色效果,使其不覆盖文档内容。添加单一图片水印的操作步骤如下:
- 创建 PdfDocument 的对象。
- 使用 PdfDocument->LoadFromFile() 方法载入 PDF 文件。
- 使用 PdfImage::FromFile() 方法载入图片。
- 循环遍历文档页面以绘制水印。
- 使用 PdfDocument->GetPages()->GetItem() 方法获取指定页面。
- 使用 PdfPageBase->GetCanvas()->SetTransparency() 方法设置透明度。
- 使用 PdfPageBase->GetCanvas()->DrawImage() 方法将图片绘制在页面上。
- 使用 PdfDocument->SaveToFile() 方法保存文档。
- C++
#include "Spire.Pdf.o.h"
using namespace Spire::Pdf;
int main()
{
	//创建PdfDocument的对象
	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++)
	{
		//获取指定页面
		PdfPageBase* page = document->GetPages()->GetItem(i);
		//获取页面的高度和宽度
		float pageWidth = (float)(page->GetActualSize()->GetWidth());
		float pageHeight = (float)(page->GetActualSize()->GetHeight());
		//设置透明度
		page->GetCanvas()->SetTransparency(0.3f);
		//将图片绘制在页面中央
		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 类表示平铺画笔,可以生成重复平铺图案来填充区域。以下是插入平铺水印的详细操作步骤:
- 创建一个自定义方法 InsertTiledImagetWatermark(PdfPageBase* page, PdfImage* image, int rowNum, int columnNum) 来添加平铺水印到 PDF 页面。可通过参数 rowNum 和 columnNum 来指定平铺水印的行数和列数。
- 创建 PdfDocument 的对象。
- 使用 PdfDocument->LoadFromFile() 方法载入 PDF 文档。
- 遍历文档中的所有页面,并调用自定义方法 InsertTiledImageWatermark() 来给每一页添加水印。
- 使用 PdfDocument->SaveToFile() 方法保存文档。
- C++
#include "Spire.Pdf.o.h"
using namespace Spire::Pdf;
void InsertTiledImageWatermark(PdfPageBase* page, PdfImage* img, int row, int column) {
    //创建平铺笔刷
    PdfTilingBrush* brush = new PdfTilingBrush(new SizeF(page->GetCanvas()->GetSize()->GetWidth() / (int)(row), page->GetCanvas()->GetSize()->GetHeight() / (int)(column)));
    //设置透明度
    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));
    //使用笔刷将图片绘制在页面上
    page->GetCanvas()->DrawRectangle(brush, new RectangleF(new PointF(0, 0), page->GetCanvas()->GetSize()));
}
int main()
{
    //创建PdfDocument的对象
    PdfDocument* pdf = new PdfDocument();
    //载入PDF文件
    pdf->LoadFromFile(L"C:/我们之间的距离.pdf");
    //载入图片
    PdfImage* img = PdfImage::FromFile(L"C:/Logo.png");
    //循环遍历文档页面以添加水印
    for (int i = 0; i < pdf->GetPages()->GetCount(); i++) {
        //获取一个页面
        PdfPageBase* page = pdf->GetPages()->GetItem(i);
        //添加水印到页面
        InsertTiledImageWatermark(page, img, 3, 3);
    }
    //保存文档
    pdf->SaveToFile(L"Output/平铺图片水印.pdf");
    pdf->Close();
    delete pdf;
}
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
 



 
					



