C++实现添加图片水印到PDF文档

 更新时间:2023年11月24日 14:43:03   作者:E-iceblue  
水印是显示在文档内容后面的淡色文字或图片,可以用于指示文档的状态(保密、草稿等),本文主要为大家介绍了如何使用 Spire.PDF for C++ 在 PDF 文档中添加图片水印,需要的可以参考下

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

到此这篇关于C++实现添加图片水印到PDF文档的文章就介绍到这了,更多相关C++ PDF添加图片水印内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++函数指针详解

    C++函数指针详解

    这篇文章主要介绍了C++函数指针详解,通过文字描述C++函数指针基础概念,内涵详细的代码实现和解析,希望对你能够有所帮助
    2021-06-06
  • C语言数组全面详细讲解

    C语言数组全面详细讲解

    数组是一组有序的数据的集合,数组中元素类型相同,由数组名和下标唯一地确定,数组中数据不仅数据类型相同,而且在计算机内存里连续存放,地址编号最低的存储单元存放数组的起始元素,地址编号最高的存储单元存放数组的最后一个元素
    2022-05-05
  • C++如何解决rand()函数生成的随机数每次都一样的问题

    C++如何解决rand()函数生成的随机数每次都一样的问题

    这篇文章主要介绍了C++如何解决rand()函数生成的随机数每次都一样的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • C/C++中不定参数的使用详解

    C/C++中不定参数的使用详解

    这篇文章主要为大家详细介绍了C/C++中不定参数的使用的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • 学习C和C++的9点经验总结

    学习C和C++的9点经验总结

    本文给大家总结了一下我们在学习C和C++的时候的一些经验和需要注意的事项,希望能给大家一些帮助,少走些弯路
    2015-12-12
  • C语言实现单链表实现方法

    C语言实现单链表实现方法

    这篇文章主要介绍了C语言实现单链表实现方法的相关资料,链表分为单向链表、双向链表、循环链表,需要的朋友可以参考下
    2017-08-08
  • C++实现秒表功能

    C++实现秒表功能

    这篇文章主要为大家详细介绍了C++实现秒表功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • strings命令分析浅谈Go和C++编译时的一点小区别

    strings命令分析浅谈Go和C++编译时的一点小区别

    今天小编就为大家分享一篇关于strings命令分析浅谈Go和C++编译时的一点小区别,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • 使用C语言实现模糊搜索功能

    使用C语言实现模糊搜索功能

    本文所提到的模糊搜索是指输入不完整的关键词即可查询到对应的全部准确结果。下面小编通过实例代码给大家分享使用C语言实现模糊搜索功能,感兴趣的朋友一起看看吧
    2018-08-08
  • C++利用栈实现中缀表达式转后缀表达式

    C++利用栈实现中缀表达式转后缀表达式

    这篇文章主要为大家详细介绍了C++利用栈实现中缀表达式转后缀表达式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04

最新评论