PDF 图片添加文字,并加入二维码图片 (高质量图片)

  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         }
PDF 图片添加文字,并加入二维码图片

 

注意事项:需要下载 以下几个dll 文件

pdf  图片dll 文件

Spire.License.dll

Spire.Pdf.dll

 

生成二维码dll 文件

ThoughtWorks.QRCode.dll

 

相关DLL 文件已在百度网盘上,可自行提取

链接:https://pan.baidu.com/s/1inVC4MJnNKgpk04ut-kW_g
提取码:30j6
复制这段内容后打开百度网盘手机App,操作更方便哦

 

posted @ 2021-01-15 09:46  情殇メ传说  阅读(211)  评论(0编辑  收藏  举报