ASP.NET Core 给 PDF 加多组水印
前面讲了如何给PDF文件加水印:https://www.cnblogs.com/sun8134/p/18109237
当我们需要加多组水印的时候,该如何处理呢?
其实很简单,多加点 Paragraph 用 document.ShowTextAligned 加上去就行了
修改下之前的代码,我们加两个 Paragraph ,并且设定不同的透明度看看效果
/// <summary> /// PDF 转 Base64,加水印 /// </summary> /// <param name="inputPath"></param> /// <param name="watermarkImage"></param> /// <param name="watermarkTxt"></param> /// <returns></returns> public static string PdfWatermark2Base64(string inputPath, string watermarkImage, string watermarkTxt) { MemoryStream outputStream = new MemoryStream(); using (PdfReader existingPdf = new PdfReader(inputPath)) { using (PdfWriter newPdf = new PdfWriter(outputStream)) { using (PdfDocument pdfDocument = new PdfDocument(existingPdf, newPdf)) { Document document = new Document(pdfDocument); iText.Kernel.Geom.Rectangle pageSize; PdfCanvas canvas; var image = new iText.Layout.Element.Image(iText.IO.Image.ImageDataFactory.Create(watermarkImage)).ScaleToFit(200, 200); PdfFont fonts = PdfFontFactory.CreateFont(StandardFonts.TIMES_ROMAN); //PdfFont fontChinese; //var path = System.IO.Path.Combine("F:\\pdf", "font.ttf"); //fontChinese = PdfFontFactory.CreateFont(path, PdfEncodings.IDENTITY_H); int red = 51; int green = 53; int blue = 102; Random random = new Random(); for (int i = 1; i <= pdfDocument.GetNumberOfPages(); i++) { PdfPage page = pdfDocument.GetPage(i); pageSize = page.GetPageSize(); canvas = new PdfCanvas(page); Paragraph p1 = new Paragraph(); p1.Add(image); p1.SetFont(fonts); p1.Add(new Text("\r\n")); p1.Add(new Text(watermarkTxt).SetFontSize(90).SetFontColor(new DeviceRgb((float)red / 255f, (float)green / 255f, (float)blue / 255f))); p1.Add(new Text("\r\n")); p1.Add(new Text(DateTime.Now.ToString("yyyy-MM-dd HH:mm")).SetFontSize(60).SetFontColor(ColorConstants.DARK_GRAY)); Paragraph p2 = new Paragraph(); p2.SetFont(fonts); for (int j = 1; j <= 15; j++) { if (j % 2 == 0) { p2.Add(new Text(DateTime.Now.ToString("yyyy-MM-dd HH:mm")).SetFontSize(24).SetFontColor(ColorConstants.BLUE)); } for (int k = 0; k < 3; k++) { for (int l = 0; l < 20; l++) { p2.Add(new Text(("\u00A0")).SetFontSize(24).SetFontColor(ColorConstants.WHITE)); } p2.Add(new Text(DateTime.Now.ToString("yyyy-MM-dd HH:mm")).SetFontSize(24).SetFontColor(ColorConstants.BLUE)); } p2.Add(new Text("\r\n")); p2.Add(new Text("\r\n")); p2.Add(new Text("\r\n")); p2.Add(new Text("\r\n")); } canvas.SaveState(); PdfExtGState gs1 = new PdfExtGState().SetFillOpacity(0.2f); canvas.SetExtGState(gs1); document.ShowTextAligned(p2, pageSize.GetWidth() / 2 - 50, pageSize.GetHeight() / 2 + random.Next(1, 100), pdfDocument.GetPageNumber(page), TextAlignment.CENTER, VerticalAlignment.MIDDLE, 6); gs1 = new PdfExtGState().SetFillOpacity(0.6f); canvas.SetExtGState(gs1); document.ShowTextAligned(p1, pageSize.GetWidth() / 2 - 50, pageSize.GetHeight() / 2 + 50, pdfDocument.GetPageNumber(page), TextAlignment.CENTER, VerticalAlignment.MIDDLE, 45); } document.Close(); pdfDocument.Close(); newPdf.Close(); existingPdf.Close(); } } } byte[] extractedPdfData = ((MemoryStream)outputStream).ToArray(); string base64 = Convert.ToBase64String(extractedPdfData); outputStream.Close(); outputStream.Dispose(); return base64; }
上面代码我们加了两个 Paragraph ,一个设置透明度为0.2,一个社厅透明度为0.6
然后调用下看看效果
public IActionResult Privacy() { DefaultModel dm = new DefaultModel(); dm.PdfBase64 = PdfHelper.PdfWatermark2Base64("F:\\pdf\\compressed.tracemonkey-pldi-09.pdf", "F:\\pdf\\netcore.png", "Asp.Net Core 8.0"); return View(dm); }
运行如下图:
作者:sun8134
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库