根据pdf模板文件添加数据生成新的pdf与pdf添加读取二维码
参考文档 :https://www.cnblogs.com/ibeisha/p/itextsharp-pdf.html
程序demo 地址:https://github.com/hudean/itextsharpDemo
我这边收到一份word版的文档,首先,我们将其另存为PDF文件。其次,在https://www.pdfescape.com/open/这个网站,将PDF文件上传上去,进行在线编辑。
也可以通过PDF软件工具,进行编辑。这里,我把需要填写部分的内容,全画上表单元素,设置元素的name,后面根据name 属性对其进行赋值。具体操作,将text放置指定处,然后鼠标右键,看到如下界面:
这里Name属性就是后面我们要用到的。目前它支持的元素有:
1、使用itextsharp 生成pdf文件 引用itextsharp 包
DataTable 转成pdf文件
private static void Method() { DataTable dt = new DataTable(); dt.Columns.Add("id", typeof(int)); dt.Columns.Add("name", typeof(string)); dt.Columns.Add("age", typeof(int)); dt.Columns.Add("address", typeof(string)); dt.Clear(); DataRow dr = dt.NewRow(); dr["id"] = 1; dr["name"] = "cscc"; dr["age"] = 26; dr["address"] = "江西省"; dt.Rows.Add(dr); dt.AcceptChanges(); bool b = ITextSharpHelper2.ConvertDataTableToPDF(dt, @"C:UsersAdministratorDesktop estPDF.pdf", "C://WINDOWS//FONTS//SIMSUN.TTC,1", 9); Console.WriteLine($"{b}"); Console.ReadKey(); }
ITextSharpHelper2帮助类
public class ITextSharpHelper2 { /// <summary> /// 根据pdf模板写入数据生成新的pdf /// </summary> /// <param name="saveFile">保存的新pdf路径</param> /// <param name="sourceFile">原pdf路径</param> public static void AddNewPdf(string saveFile, string sourceFile) { //写入新的pdf地址 //sourceFile = @"C:UsersAdministratorDesktopABC emp.pdf"; //sourceFile = @"C:UsersAdministratorDesktop emp123.pdf"; iTextSharp.text.pdf.PdfDocument document = new iTextSharp.text.pdf.PdfDocument(); //读取的源pdf文件 iTextSharp.text.pdf.PdfReader pdfReader = new iTextSharp.text.pdf.PdfReader(sourceFile); PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(saveFile, FileMode.OpenOrCreate)); AcroFields pdfFormFields = pdfStamper.AcroFields; pdfStamper.FormFlattening = true; //BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); //BaseFont simheiBase = BaseFont.CreateFont(@"C:WindowsFontssimhei.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); BaseFont simheiBase = BaseFont.CreateFont(@"C:WindowsFontssimsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); pdfFormFields.AddSubstitutionFont(simheiBase); Dictionary<string, string> para = new Dictionary<string, string>(); para.Add($"Numbering", "12369999995"); for (int i = 1; i < 38; i++) { para.Add($"Numbering{i}", "12365"); } foreach (KeyValuePair<string, string> parameter in para) { pdfStamper.AcroFields.SetField(parameter.Key, parameter.Value); } //pdfStamper.AcroFields.SetField("Names", "李朝强"); //pdfStamper.AcroFields.SetField("chk", "yes", true); pdfStamper.Close(); pdfReader.Close(); } /// <summary> /// pdf文件添加图片 /// </summary> /// <param name="oldPath">源PDF文件</param> /// <param name="newPath">新PDF文件</param> /// <param name="imPath">图片地址</param> /// <param name="x"></param> /// <param name="y"></param> public static void AddImg(string oldPath, string newPath, string imPath, float x, float y) { iTextSharp.text.pdf.PdfDocument doc = new iTextSharp.text.pdf.PdfDocument(); iTextSharp.text.pdf.PdfReader pdfReader = new iTextSharp.text.pdf.PdfReader(oldPath); PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(newPath, FileMode.OpenOrCreate)); //获取PDF指定页面内容 var pdfContentByte = pdfStamper.GetOverContent(1); //添加图片 Image image = Image.GetInstance(imPath); //设置图片大小 image.ScaleToFit(100, 100); //设置图片位置 image.SetAbsolutePosition(x, y); pdfContentByte.AddImage(image); pdfStamper.FormFlattening = true; pdfStamper.Close(); pdfReader.Close(); } /// <summary> /// DataTable 转成Pdf文件 /// </summary> /// <param name="Data"></param> /// <param name="PDFFile"></param> /// <param name="FontPath"></param> /// <param name="FontSize"></param> /// <returns></returns> public static bool ConvertDataTableToPDF(DataTable Data, string PDFFile, string FontPath, float FontSize) { Document document = new Document(); PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(PDFFile, FileMode.Create)); document.Open(); BaseFont baseFont = BaseFont.CreateFont( FontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); iTextSharp.text.Font font = new iTextSharp.text.Font(baseFont, FontSize); PdfPTable table = new PdfPTable(Data.Columns.Count); for (int i = 0; i < Data.Rows.Count; i++) { for (int j = 0; j < Data.Columns.Count; j++) { table.AddCell(new Phrase(Data.Rows[i][j].ToString(), font)); } } document.Add(table); document.Close(); writer.Close(); return true; } }
调用
static void Main(string[] args) { #region DataTable 转成pdf文件 // Method(); #endregion #region 向pdf文件添加图片 //ITextSharpHelper2.AddImg(@"C:UsersAdministratorDesktop estPDF.pdf", @"C:UsersAdministratorDesktop empPDF.pdf", @"C:UsersAdministratorDesktopQRCode.png", 300, 100); #endregion #region 向pdf模板文件添加数据 ITextSharpHelper2.AddNewPdf(@"C:UsersAdministratorDesktop emp3.pdf", @"C:UsersAdministratorDesktop emp123.pdf"); #endregion Console.ReadKey(); }
(模板文件在程序的文件夹里,模板里要填的数据我在上面所有的属性都填写对应的名称)
Zxing 生成读取二维码帮助类,引用ZXing 包
using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Linq; using System.Text; using System.Threading.Tasks; using ZXing; using ZXing.Common; using ZXing.QrCode; namespace QRCode { public class ZxingHelper { /// <summary> /// 生成二维码,保存成图片 /// </summary> public static void Generate1(string text, string filename) { BarcodeWriter writer = new BarcodeWriter(); writer.Format = BarcodeFormat.QR_CODE; QrCodeEncodingOptions options = new QrCodeEncodingOptions(); options.DisableECI = true; //设置内容编码 options.CharacterSet = "UTF-8"; //设置二维码的宽度和高度 options.Width = 500; options.Height = 500; //设置二维码的边距,单位不是固定像素 options.Margin = 1; writer.Options = options; Bitmap map = writer.Write(text); //string filename = @"H:桌面截图generate1.png"; map.Save(filename, ImageFormat.Png); map.Dispose(); } /// <summary> /// 生成条形码 /// </summary> /// <param name="text"></param> public static void Generate2(string text, string filename) { BarcodeWriter writer = new BarcodeWriter(); //使用ITF 格式,不能被现在常用的支付宝、微信扫出来 //如果想生成可识别的可以使用 CODE_128 格式 //writer.Format = BarcodeFormat.ITF; writer.Format = BarcodeFormat.CODE_128; EncodingOptions options = new EncodingOptions() { Width = 150, Height = 50, Margin = 2 }; writer.Options = options; Bitmap map = writer.Write(text); //string filename = @"H:桌面截图generate2.png"; map.Save(filename, ImageFormat.Png); } /// <summary> /// 读取二维码 /// 读取失败,返回空字符串 /// </summary> /// <param name="filename">指定二维码图片位置</param> public static string Read1(string filename) { BarcodeReader reader = new BarcodeReader(); reader.Options.CharacterSet = "UTF-8"; Bitmap map = new Bitmap(filename); Result result = reader.Decode(map); return result == null ? "" : result.Text; } } }