PDF 图片添加文字,并加入二维码图片 (高质量图片)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 /// <summary> 2 /// 3 /// </summary> 4 /// <param name="sourcePicture">图片地址 @"H:\数据抓取\BrandCheckData\ConsoleApp1\PDF\Test.pdf"</param> 5 /// <param name="keyword">图片中需要加入的文字集合</param> 6 /// <returns></returns> 7 public static UploadResult DrawImgByPDF(string sourcePicture, string[] keyword) 8 { 9 if (!File.Exists(sourcePicture)) 10 { 11 throw new DMSFrame.Exception.WarnException("亲!证书原图片不存在,请先上传模板图片!"); 12 } 13 14 //加载PDF文档 15 Spire.Pdf.PdfDocument sourceDocument = new Spire.Pdf.PdfDocument(); 16 sourceDocument.LoadFromFile(sourcePicture); 17 18 //创建新PDF文档 19 Spire.Pdf.PdfDocument newDocument = new Spire.Pdf.PdfDocument(); 20 //设置新文档页边距0 21 newDocument.PageSettings.Margins.All = 0; 22 //设置文档尺寸和源文件一样 23 newDocument.PageSettings.Width = sourceDocument.Pages[0].Size.Width; 24 newDocument.PageSettings.Height = sourceDocument.Pages[0].Size.Height; 25 //删除第一页,破解水印 26 newDocument.Pages.Add(); 27 newDocument.Pages.RemoveAt(0); 28 //页面格式 29 Spire.Pdf.Graphics.PdfTextLayout format = new Spire.Pdf.Graphics.PdfTextLayout(); 30 format.Break = Spire.Pdf.Graphics.PdfLayoutBreakType.FitPage; 31 format.Layout = Spire.Pdf.Graphics.PdfLayoutType.Paginate; 32 //将源文档每一页绘制到新文档 33 foreach (Spire.Pdf.PdfPageBase sourcePage in sourceDocument.Pages) 34 { 35 //添加新页 36 Spire.Pdf.PdfPageBase newPage = newDocument.Pages.Add(); 37 //创建绘制模板 38 var template = sourcePage.CreateTemplate(); 39 //绘制源内容 40 template.Draw(newPage, new PointF(0, 0), format); 41 // 可以自由在新页绘制矩形、文字等信息 42 //newPage.Canvas.DrawRectangle(Spire.Pdf.Graphics.PdfBrushes.White, new RectangleF(0, 0, 100, 100)); 43 #region 绘制文字 44 Font font_authnumber = new Font("微软雅黑", 15, FontStyle.Regular); 45 PdfTrueTypeFont pdfTrueTypeFont_authnumber = new PdfTrueTypeFont(font_authnumber, true);//true防止中文乱码 46 int width_authnumber = Convert.ToInt32(newDocument.PageSettings.Width / 2); 47 int height_authnumber = Convert.ToInt32(newDocument.PageSettings.Height / 2) - 70; 48 newPage.Canvas.DrawString("认证编号:" + keyword[0] + "", pdfTrueTypeFont_authnumber, PdfBrushes.Black, width_authnumber, height_authnumber, new PdfStringFormat(PdfTextAlignment.Center)); 49 50 // 51 int length = keyword[1].Length - 15; 52 int companynamesize = Convert.ToInt32(Math.Ceiling(length / 5.0)); 53 int size = 35; 54 if (companynamesize > 0) 55 size = size - companynamesize * 5; 56 57 if (size <= 20) 58 size = 20; 59 Font font = new Font("微软雅黑", size, FontStyle.Bold); 60 PdfTrueTypeFont pdfTrueTypeFont = new PdfTrueTypeFont(font, true);//true防止中文乱码 61 newPage.Canvas.DrawString("" + keyword[1] + "", pdfTrueTypeFont, PdfBrushes.Black, Convert.ToInt32(newDocument.PageSettings.Width / 2), Convert.ToInt32(newDocument.PageSettings.Height / 2), new PdfStringFormat(PdfTextAlignment.Center)); 62 63 // 64 Font font_iscptime = new Font("微软雅黑", 15, FontStyle.Regular); 65 PdfTrueTypeFont pdfTrueTypeFont_iscptime = new PdfTrueTypeFont(font_iscptime, true);//true防止中文乱码 66 int width_iscptime = Convert.ToInt32(newDocument.PageSettings.Width / 2); 67 int height_iscptime = Convert.ToInt32(newDocument.PageSettings.Height / 2) + 50; 68 newPage.Canvas.DrawString("认证时效:" + keyword[2] + "", pdfTrueTypeFont_iscptime, PdfBrushes.Black, width_iscptime, height_iscptime, new PdfStringFormat(PdfTextAlignment.Center)); 69 70 // 71 Font font_iscpyear = new Font("微软雅黑", 15, FontStyle.Regular); 72 PdfTrueTypeFont pdfTrueTypeFont_iscpyear = new PdfTrueTypeFont(font_iscpyear, true);//true防止中文乱码 73 int width_iscpyear = Convert.ToInt32(newDocument.PageSettings.Width / 2); 74 int height_iscpyear = Convert.ToInt32(newDocument.PageSettings.Height / 2) + 70; 75 newPage.Canvas.DrawString("认证年限:" + keyword[3] + "年", pdfTrueTypeFont_iscpyear, PdfBrushes.Black, width_iscpyear, height_iscpyear, new PdfStringFormat(PdfTextAlignment.Center)); 76 77 #endregion 78 79 #region 二维码图片合成 80 //PdfRubberStampAnnotation loStamp = new PdfRubberStampAnnotation(new RectangleF(new PointF(-5, -5), new SizeF(60, 60))); 81 //PdfAppearance loApprearance = new PdfAppearance(loStamp); 82 // PdfImage image = PdfImage.FromFile(@"H:\数据抓取\BrandCheckData\ConsoleApp1\PDF\IMG_20200725_130348.jpg"); 83 PdfImage image = PdfImage.FromImage(ImgAndCodeSynthetic(keyword[0])); 84 newPage.Canvas.DrawImage(image, new RectangleF(new PointF(300, 390), new SizeF(40, 40))); 85 #endregion 86 87 88 // 方法一:图片直接导出保存到指定文件夹 89 //newDocument.SaveToFile("d:\\save.pdf"); 90 91 92 //方法二: 此处将图片以流的方式上传到服务器 93 MemoryStream ms = new MemoryStream(); 94 newDocument.SaveToStream(ms); 95 UploadFile file = new UploadFile(); 96 FileM info = new FileM() { FileName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".pdf", FileStream = ms, FileType = 1 }; 97 var result = file.UploadToFDFS(info); 98 if (result.IsSuccessed) 99 { 100 //合成的文字图片 101 string imgpath = result.DomainName + result.FileUrl; 102 } 103 return result; 104 } 105 return null; 106 } 107 108 109 /// <summary> 110 /// 图片和二维码合成 111 /// </summary> 112 /// <param name="originalimg">主图:原图</param> 113 /// <returns></returns> 114 public static Image ImgAndCodeSynthetic(string authnumber) 115 { 116 string url = "http://m.hqew.com/ISCPAuthCenter/Index?keywords=" + authnumber; 117 System.Drawing.Image image = QcCodeCreate(url); 118 return image; 119 } 120 121 122 /// <summary> 123 /// 生成二维码图片 124 /// </summary> 125 /// <param name="url">网址</param> 126 /// <returns></returns> 127 public static Image QcCodeCreate(string url) 128 { 129 QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); 130 qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; 131 qrCodeEncoder.QRCodeScale = 4; 132 qrCodeEncoder.QRCodeVersion = 0; 133 qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M; 134 System.Drawing.Image image = qrCodeEncoder.Encode(url); 135 return image; 136 }
注意事项:需要下载 以下几个dll 文件
pdf 图片dll 文件
Spire.License.dll
Spire.Pdf.dll
生成二维码dll 文件
ThoughtWorks.QRCode.dll
相关DLL 文件已在百度网盘上,可自行提取
链接:https://pan.baidu.com/s/1inVC4MJnNKgpk04ut-kW_g
提取码:30j6
复制这段内容后打开百度网盘手机App,操作更方便哦