随着 pdf 文档类型的日益多样化,您可能会需要对机密信息进行保护。尽管 pdf 的许多其他安全选项可用于确保机密信息的安全,但最常见的方法是为pdf文档添加自定义水印。在本文中,您将学习如何使用 spire.pdf for c 在 c 中为 pdf 添加单行或多行文本水印。
安装 spire.pdf for c
有两种方法可以将 spire.pdf for c 集成到您的应用程序中。一种方法是通过安装它,另一种方法是从我们的网站下载包并将库复制到您的程序中。通过 nuget 安装更简单,更推荐使用。您可以通过访问以下链接找到更多详细信息。
如何将 spire. pdf for c 集成到 c 程序中
将单行文本水印添加到 pdf
spire.pdf for c 不提供负责在 pdf 文件中插入水印的接口或类。但您可以在每页上绘制类似“机密”、“请勿复制”或“草稿”的文本,以模拟水印效果。以下是向 pdf 文档添加单行文本水印的步骤。
- 创建一个 pdfdocument 对象。
- 使用 pdfdocument->loadfromfile() 方法加载示例 pdf 文档。
- 使用 pdfdocument->getpages()->getitem() 方法从文档中获取特定页面。
- 使用 pdfpagebase->getcanvas()->traslatetransform() 方法将坐标系转换为指定坐标。
- 使用 pdfpagebase->getcanvas()->rotatetransform() 方法将坐标系逆时针旋转45度。 此步骤和上面的步骤确保水印将以45度角出现在页面中间。
- 使用 pdfpagebase->getcanvas()->drawstring() 方法在页面上绘制文本水印。
- 使用 pdfdocument->savetofile() 方法将文档保存到不同的 pdf 文件。
- c
#include "spire.pdf.o.h";
using namespace std;
using namespace spire::pdf;
using namespace spire::common;
int main()
{
//指定输入文件和输出文件路径
wstring inputfilepath = l"c:\\users\\administrator\\desktop\\示例文档.pdf";
wstring outputfilepath = l"output\\添加单行文本水印.pdf";
//创建pdfdocument对象
pdfdocument* doc = new pdfdocument();
//加载pdf文件
doc->loadfromfile(inputfilepath.c_str());
//创建true字体类型
pdftruetypefont* font = new pdftruetypefont(l"宋体", 50.0f, pdffontstyle::bold, true);
//创建一个笔刷
pdfbrush* brush = pdfbrushes::getdarkgray();
//指定水印文本
wstring text = l"请勿复制";
//测量文本大小
sizef textsize = font->measurestring(text.c_str());
//计算两个偏移量,用于计算坐标系的平移量
float offset1 = (float)(textsize.getwidth() * sqrt(2) / 4);
float offset2 = (float)(textsize.getheight() * sqrt(2) / 4);
//遍历文档中的页面
for (size_t i = 0; i < doc->getpages()->getcount(); i )
{
//获取特定页面
pdfpagebase* page = doc->getpages()->getitem(i);
//设置页面透明度
page->getcanvas()->settransparency(0.8);
//将坐标系转换为指定坐标
page->getcanvas()->translatetransform(page->getcanvas()->getsize()->getwidth() / 2 - offset1 - offset2, page->getcanvas()->getsize()->getheight() / 2 offset1 - offset2);
//逆时针旋转坐标系45度
page->getcanvas()->rotatetransform(-45);
//在页面上绘制水印文本
page->getcanvas()->drawstring(text.c_str(), font, brush, 0, 0, new pdfstringformat(pdftextalignment::left));
}
//保存文档
doc->savetofile(outputfilepath.c_str());
doc->close();
delete doc;
}
将多行文本水印添加到 pdf
要实现平铺水印效果,可以使用 pdftilingbrush 类。平铺笔刷生成一个图案,用它重复填充某个图形区域即可实现平铺效果。以下是向 pdf 文档添加平铺文本水印的步骤。
- 创建自定义方法 inserttiledtextwatermark(pdfpagebase* page, wstring watermarktext, pdftruetypefont* font, int rownum, int columnnum) 以将平铺水印添加到 pdf 页面。 参数 rownum 和 columnnum 指定平铺水印的行数和列数。
- 创建一个 pdfdocument 对象。
- 使用 pdfdocument->loadfromfile() 方法加载示例 pdf 文档。
- 遍历文档中的所有页面,调用自定义方法 inserttiledtextwatermark() 为每个页面应用水印。
- 使用 pdfdocument->savetofile() 方法将文档保存到另一个文件。
- c
#include "spire.pdf.o.h";
using namespace std;
using namespace spire::pdf;
using namespace spire::common;
static void inserttiledtextwatermark(pdfpagebase* page, wstring watermarktext, pdftruetypefont* font, int rownum, int columnnum)
{
//测量文本大小
sizef textsize = font->measurestring(watermarktext.c_str());
//计算两个偏移量,用于计算坐标系的平移量
float offset1 = (float)(textsize.getwidth() * sqrt(2) / 4);
float offset2 = (float)(textsize.getheight() * sqrt(2) / 4);
//获取页面高度和宽度
float height = page->getactualsize()->getheight();
float width = page->getactualsize()->getwidth();
//创建平铺笔刷
pdftilingbrush* brush = new pdftilingbrush(new sizef(width / columnnum, height / rownum));
brush->getgraphics()->settransparency(0.5f);
brush->getgraphics()->translatetransform(brush->getsize()->getwidth() / 2 - offset1 - offset2, brush->getsize()->getheight() / 2 offset1 - offset2);
brush->getgraphics()->rotatetransform(-45);
//在画笔上绘制水印文本
brush->getgraphics()->drawstring(watermarktext.c_str(), font, pdfbrushes::getred(), 0, 0, new pdfstringformat(pdftextalignment::left));
//使用平铺笔刷绘制一个矩形(覆盖整个页面)
page->getcanvas()->drawrectangle(brush, new rectanglef(new pointf(0, 0), page->getactualsize()));
}
int main()
{
//指定输入文件和输出文件路径
wstring inputfilepath = l"c:\\users\\administrator\\desktop\\示例文档.pdf";
wstring outputfilepath = l"output\\添加多行文本水印.pdf";
//创建pdfdocument对象
pdfdocument* doc = new pdfdocument();
//加载pdf文件
doc->loadfromfile(inputfilepath.c_str());
//指定水印文本
wstring text = l"请勿复制";
//创建true字体类型
pdftruetypefont* font = new pdftruetypefont(l"宋体", 20.0f, pdffontstyle::bold, true);
//遍历文档中的页面
for (size_t i = 0; i < doc->getpages()->getcount(); i )
{
//调用自定义方法插入多行文本水印
inserttiledtextwatermark(doc->getpages()->getitem(i), text.c_str(), font, 3, 3);
}
//保存文档
doc->savetofile(outputfilepath.c_str());
doc->close();
delete doc;
}
申请临时 license
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用javascript。获取有效期 30 天的临时许可证。