为什么通过下列代码创建的水印 即使在代码中修改水印文本结果显示的时候还是第一次创建的水印 using (PdfReader reader = new PdfReader(filepath+ filetype_pdf)) { int pageCount = reader.NumberOfPages; // 添加水印 using (PdfStamper stamper = new PdfStamper(reader, new FileStream("temp.pdf", FileMode.Create))) { for (int i = 1; i <= pageCount; i++) { // 水印文本 //string watermarkText = "鲁达LUDA 鲁达LUDA 鲁达LUDA 鲁达LUDA 鲁达LUDA"; // 水印字体 BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); Font font = new Font("Black", 75, FontStyle.Bold); //Brush brush = new SolidBrush(Color.FromArgb(128, Color.LightGray)); // 水印位置 iTextSharp.text.Rectangle rect = reader.GetPageSize(i); float x = rect.Width / 2; float y = rect.Height / 2; // 添加水印 PdfContentByte over = stamper.GetOverContent(i); over.SaveState(); over.SetGState(new PdfGState() { FillOpacity = 0.5f, StrokeOpacity = 0.5f }); over.BeginText(); over.SetFontAndSize(bf, font.Size); over.SetColorFill(BaseColor.LIGHT_GRAY); over.ShowTextAligned(Element.ALIGN_CENTER, watermark, x, y, 45); over.EndText(); over.RestoreState(); } stamper.Close(); pdfViewer1.Document = PdfiumViewer.PdfDocument.Load("temp.pdf"); }
时间: 2023-12-11 07:05:45
浏览: 35
这是因为你在创建水印时,使用了一个固定的文本变量 "watermark",而没有[实时](https://geek.csdn.net/educolumn/020fabea718326d5350ebe5e935f6cdd?spm=1055.2569.3001.10083)更新它。所以,无论你在代码中如何修改文本,都只会显示第一次创建的水印。
要解决这个问题,你需要在循环中动态地更新水印文本变量。例如,你可以将水印文本变量放在一个数组或[列表](https://geek.csdn.net/educolumn/ba94496e6cfa8630df5d047358ad9719?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6NDQ0MDg2MiwiZXhwIjoxNzA3MzcxOTM4LCJpYXQiOjE3MDY3NjcxMzgsInVzZXJuYW1lIjoid2VpeGluXzY4NjQ1NjQ1In0.RrTYEnMNYPC7AQdoij4SBb0kKEgHoyvF-bZOG2eGQvc&spm=1055.2569.3001.10083)中,并在循环中根据当前页数来获取对应的文本。示例代码如下:
[string](https://geek.csdn.net/edu/8802d631b97a4a6af1f4d0bbf8527465?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6NDQ0MDg2MiwiZXhwIjoxNzA3MzcxOTM4LCJpYXQiOjE3MDY3NjcxMzgsInVzZXJuYW1lIjoid2VpeGluXzY4NjQ1NjQ1In0.RrTYEnMNYPC7AQdoij4SBb0kKEgHoyvF-bZOG2eGQvc&spm=1055.2569.3001.10083)[] watermarkTexts = new [string](https://geek.csdn.net/edu/8802d631b97a4a6af1f4d0bbf8527465?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6NDQ0MDg2MiwiZXhwIjoxNzA3MzcxOTM4LCJpYXQiOjE3MDY3NjcxMzgsInVzZXJuYW1lIjoid2VpeGluXzY4NjQ1NjQ1In0.RrTYEnMNYPC7AQdoij4SBb0kKEgHoyvF-bZOG2eGQvc&spm=1055.2569.3001.10083)[] { "水印1", "水印2", "水印3" };
using (PdfStamper stamper = new PdfStamper(reader, new FileStream("temp.pdf", FileMode.Create)))
for (int i = 1; i <= pageCount; i++)
// 获取当前页码对应的水印文本
[string](https://geek.csdn.net/edu/8802d631b97a4a6af1f4d0bbf8527465?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6NDQ0MDg2MiwiZXhwIjoxNzA3MzcxOTM4LCJpYXQiOjE3MDY3NjcxMzgsInVzZXJuYW1lIjoid2VpeGluXzY4NjQ1NjQ1In0.RrTYEnMNYPC7AQdoij4SBb0kKEgHoyvF-bZOG2eGQvc&spm=1055.2569.3001.10083) watermarkText = watermarkTexts[i % watermarkTexts.Length];
// 其他水印代码...
这样,每次循环都会根据当前页数获取对应的水印文本,从而实现动态更新水印的效果。
相关问题
使用itextsharp 在winfrom上先在每一页添加水印再显示pdf
可以使用 iTextSharp 库在每一页添加水印并且显示 PDF,步骤如下:
1. 引入 iTextSharp 库。
2. 在窗体加载时,使用 iTextSharp 库读取 PDF 文件,并在每一页上添加水印。
3. 显示带有水印的 PDF 文件。
下面是一个示例代码:
```c#
using
```