参考地址:https://www.cnblogs.com/ibeisha/p/itextsharp-pdf.html
一、先在程序中使用Nuget安装iTextSharp(我是创建的控制台程序)
二、建立静态常量类
1 public class ConstantInfo 2 { 3 /// <summary> 4 /// 证书下载目录 5 /// </summary> 6 public static string _Certificate { get { return "/DownloadResource/Certificate/"; } } 7 8 /// <summary> 9 /// 证书模板目录 10 /// </summary> 11 public static string _CertificateTemplate { get { return "/Resources/"; } } 12 }
三、生成pdf主体代码
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 //生成的pdf文件名称 6 string fileName = "Certificate_test.pdf"; 7 //生成的pdf文件目录 8 string downloadFilePath = AppDomain.CurrentDomain.BaseDirectory + ConstantInfo._Certificate; 9 //生成的pdf文件完整路径 10 string downloadFileName = downloadFilePath + fileName; 11 //如没有,则创建 12 if (!Directory.Exists(downloadFilePath)) 13 { 14 Directory.CreateDirectory(downloadFilePath); 15 } 16 //证书模板目录 17 string templateFilePath = AppDomain.CurrentDomain.BaseDirectory + ConstantInfo._CertificateTemplate + "TemplateCer.pdf"; 18 //可直接写成固定目录 19 //string tempFilePath = "D:\\tmp.pdf"; 20 //字体资源 21 string fontFilePath = AppDomain.CurrentDomain.BaseDirectory + ConstantInfo._CertificateTemplate + "msyhbd.ttf"; 22 23 24 iTextSharp.text.pdf.PdfReader pdfReader = new iTextSharp.text.pdf.PdfReader(templateFilePath); 25 PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(downloadFileName, FileMode.OpenOrCreate)); 26 AcroFields pdfFormFields = pdfStamper.AcroFields; 27 pdfStamper.FormFlattening = true; 28 29 //BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); 30 BaseFont simheiBase = BaseFont.CreateFont(fontFilePath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 31 32 //添加图片 33 //Image image = Image.GetInstance(""); 34 //pdfStamper.Writer.Add(image); 35 36 pdfFormFields.AddSubstitutionFont(simheiBase); 37 //根据pdf中对应的表单域(一定要一致)赋对应的值 38 pdfStamper.AcroFields.SetField("Name", "小红"); 39 pdfStamper.AcroFields.SetField("Score", "600"); 40 pdfStamper.AcroFields.SetField("CompanyName", "测试测试"); 41 pdfStamper.AcroFields.SetField("Date", "2019-7-17"); 42 //pdfStamper.AcroFields.SetField("chk", "yes", true); 43 pdfStamper.Close(); 44 pdfReader.Close(); 45 Console.Read(); 46 //解析文本 47 //PdfReaderContentParser parser = new PdfReaderContentParser(pdfReader); 48 49 //PdfWriter pdfWriter; 50 51 //ITextExtractionStrategy strategy; 52 //strategy = parser.ProcessContent<SimpleTextExtractionStrategy>(1, new SimpleTextExtractionStrategy()); 53 //string ss = strategy.GetResultantText(); 54 55 //byte[] buffer = pdfReader.GetPageContent(1); 56 57 //string strBody = System.Text.Encoding.Default.GetString(buffer); 58 } 59 }
四、文件路径如图:
其中ttf是用到的字体,看自己需要用到什么字体,可直接从网上下载对应的字体
生成的效果图
后记:最近遇到一个问题,在软件中已经用预览功能调整好字体的大小,但是在程序中,如果不用下载字体的话,值赋不上,如果用下载的字体(ttf)的话,和在软件中设置的还是有差别的。最后还是得再调整。有时间一定要看看这个问题。