水印是显示在文档内容后面的淡色文字或图片,可以用于指示文档的状态(保密、草稿等),也可以含蓄地展示公司徽标。水印有助于提示文档的来源,从而避免未经允许的复制和转发。本文将介绍如何使用 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 天的临时许可证。