程序主入口:
Program.cs
using System; using System.Collections.Generic; using System.Configuration; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks;namespace PdfEditor {public class Program{static void Main(string[] args){#region 单例模式Process[] allProcess = Process.GetProcesses();List<Process> prolist = new List<Process>();foreach (Process p in allProcess){if (p.ProcessName.ToLower() == "pdfeditor"){Console.WriteLine(p.StartTime.ToString() + p.ProcessName);prolist.Add(p);}}Console.WriteLine("当前启动程序进程数:" + prolist.Count);if (prolist.Count > 1){for (int m = 0; m < prolist.Count - 1; m++){try{for (int i = 0; i < prolist[m].Threads.Count; i++)prolist[m].Threads[i].Dispose();prolist[m].Kill();}catch (Exception ex){Console.WriteLine(ex.ToString());continue;}}}Console.WriteLine("启动中~~~请稍等~~");System.Threading.Thread.Sleep(10000);Process[] allProcess1 = Process.GetProcesses();List<Process> prolist1 = new List<Process>();foreach (Process p1 in allProcess1){if (p1.ProcessName.ToLower() == "pdfeditor"){Console.WriteLine(p1.StartTime.ToString() + p1.ProcessName);prolist1.Add(p1);}}Console.WriteLine("进程杀死后,当前启动程序进程数:" + prolist1.Count);Console.WriteLine("线程开始 " + DateTime.Now.ToString());Console.WriteLine("开始删除无用的日志文件完成" + DateTime.Now.ToString());Log.DelateLog();Console.WriteLine("删除无用的日志文件完成" + DateTime.Now.ToString());#endregiontry{//执行主业务逻辑HandlePdf.HandlePdfContent();}catch (Exception exception){//任务失败,重启程序Log.WriteLog("run", exception.ToString());DateTime now = DateTime.Now;int SleepTime = int.Parse(ConfigurationManager.AppSettings["SleepTime"].ToString());Log.WriteLog("run", "替换出现异常,开始休眠" + SleepTime + "分钟.............." + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));while (DateTime.Now.AddMilliseconds(-60000.0 * SleepTime).CompareTo(now) <= 0){}try{Process.Start("pdfeditor");}catch (Exception ex){Log.WriteLog("run", ex.ToString());}}}} }
pdf处理方法:
using Aspose.Pdf.Facades; using Newtonsoft.Json; using Spire.Pdf; using Spire.Pdf.Graphics; using System; using System.Collections.Generic; using System.Configuration; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks;namespace PdfEditor {public class HandlePdf{//休眠时间public static int SleepTime = int.Parse(ConfigurationManager.AppSettings["SleepTime"].ToString());public static string pdfpath = ConfigurationManager.AppSettings["pdfpath"];public static string newpdfpath = ConfigurationManager.AppSettings["newpdfpath"];public static string newpdftohtmlpath = ConfigurationManager.AppSettings["htmlpath"];public static string firstContent = ConfigurationManager.AppSettings["firstContent"];public static string secondContent = ConfigurationManager.AppSettings["secondContent"];public static string thirdContent = ConfigurationManager.AppSettings["thirdContent"];public static string fourthContent = ConfigurationManager.AppSettings["fourthContent"];/// <summary>/// 每到设定好的时间都会自动执行此程序/// </summary>public static void HandlePdfContent(){Log.WriteLog("run", "————————————————————————————————————");Log.WriteLog("run", "************开始替换pdf数据************");Task[] tasks = new Task[1];tasks[0] = Task.Factory.StartNew(() => ExcuteHandle());Task.WaitAll(tasks);Log.WriteLog("run", "pdf数据替换完成,开始休眠" + SleepTime + "分钟..............");DateTime now = DateTime.Now;while (DateTime.Now.AddMilliseconds(-60000.0 * SleepTime).CompareTo(now) <= 0){}#region 重复执行try{HandlePdfContent();}catch (Exception exception){//任务失败,重启程序Log.WriteLog("run", exception.ToString());DateTime now1 = DateTime.Now;Log.WriteLog("run", "pdf替换出现异常,开始休眠" + SleepTime + "分钟.............." + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));while (DateTime.Now.AddMilliseconds(-60000.0 * SleepTime).CompareTo(now1) <= 0){}try{Process.Start("pdfeditor");}catch (Exception ex){Log.WriteLog("run", ex.ToString());}}#endregion}private static void ExcuteHandle(){List<string> resultList = GetAllFiles(pdfpath, null, ".pdf");if (resultList != null){Log.WriteLog("run", "总共获取到符合条件的pdf文件有" + resultList.Count + "个");Log.WriteLog("run", "符合条件的pdf文件路径如下:【" + JsonConvert.SerializeObject(resultList) + "】");List<List<string>> arrays = new List<List<string>>();List<string> contains_str = new List<string>();foreach (var temp in resultList){string FileNameWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(temp);string queryCondition = FileNameWithoutExtension.Split('-')[0] + "-" + FileNameWithoutExtension.Split('-')[1]+ "-" + FileNameWithoutExtension.Split('-')[2];// +"-" + FileNameWithoutExtension.Split('-')[3];if (!contains_str.Contains(queryCondition)){contains_str.Add(queryCondition);}}foreach (var item in contains_str){var queryResults =from n in resultListwhere n.Contains(item)orderby nselect n;arrays.Add(queryResults.ToList());}foreach (var item in arrays){//添加文本域,返回新文件路径string newpdfpath = AddTextField(item[0], item[1]);//EditPdfFiled(newpdfpath);EditPdfFiled(item[1]);}}}private static string AddTextField(string item0, string item1){string filenamewithoutextension = System.IO.Path.GetFileNameWithoutExtension(item1);string date = filenamewithoutextension.Split('-')[2];DateTime dt = DateTime.ParseExact(date, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture);string number = filenamewithoutextension.Split('-')[4];string newfilepath = pdfpath + newpdfpath;if (!Directory.Exists(newfilepath)){Directory.CreateDirectory(newfilepath);}string newfilename = System.IO.Path.GetFileName(item0);Spire.Pdf.PdfDocument document = new Spire.Pdf.PdfDocument();try{System.IO.TextReader tr = new StreamReader(System.AppDomain.CurrentDomain.BaseDirectory + ConfigurationManager.AppSettings["replaceTextPath"], Encoding.UTF8, true);document.LoadFromFile(item0);//新建黑色的画笔PdfPageBase page = document.Pages[0];PdfSolidBrush brush = new PdfSolidBrush(new PdfRGBColor(System.Drawing.Color.Black));//定义字体格式Spire.Pdf.Graphics.PdfTrueTypeFont font = new Spire.Pdf.Graphics.PdfTrueTypeFont(new Font("Arial", 10, System.Drawing.FontStyle.Bold), true);String strLine;while ((strLine = tr.ReadLine()) != null){if (strLine.Contains("bylo")){//获取文本所在区域System.Drawing.RectangleF rec = new System.Drawing.Rectangle(350, 70, 200, 200);System.Drawing.PointF position = new System.Drawing.Point(350, 70);//填充修改后的文本到文本域page.Canvas.DrawString(strLine, font, brush, position);}if (strLine.Contains("dne")){//获取文本所在区域System.Drawing.RectangleF rec = new System.Drawing.Rectangle(350, 83, 200, 200);System.Drawing.PointF position = new System.Drawing.Point(350, 83);string str = strLine.Split(':')[0] + ": " + dt.ToString("dd") + "." + dt.ToString("MM") + "." + dt.ToString("yyyy");//填充修改后的文本到文本域page.Canvas.DrawString(str, font, brush, position);}if (strLine.Contains("DSId")){//获取文本所在区域System.Drawing.RectangleF rec = new System.Drawing.Rectangle(350, 94, 400, 200);System.Drawing.PointF position = new System.Drawing.Point(350, 94);string str = strLine.Split(':')[0] + ": " + strLine.Split(':')[1] + number;//填充修改后的文本到文本域page.Canvas.DrawString(str, font, brush, position);}if (strLine.Contains("Stav")){//获取文本所在区域System.Drawing.RectangleF rec = new System.Drawing.Rectangle(350, 105, 200, 200);System.Drawing.PointF position = new System.Drawing.Point(350, 105);string str = strLine.Split(':')[0] + ": " + strLine.Split(':')[1];//填充修改后的文本到文本域page.Canvas.DrawString(str, font, brush, position);}}//保存文档document.SaveToFile(newfilepath + newfilename, FileFormat.PDF);}catch (Exception ex){Log.WriteLog("run", "出现异常,异常信息为:【" + ex.Message + "】");} document.Dispose();document.Close();return newfilepath + newfilename;}public static void EditPdfFiled(string pdffilepath){try{string Key = "PD94bWwgdmVyc2lvbj0iMS4wIj8+DQo8TGljZW5zZT4NCiAgPERhdGE+DQogICAgPExpY2Vuc2VkVG8+TkIgRlUgTFREPC9MaWNlbnNlZFRvPg0KICAgIDxFbWFpbFRvPm1hcnl6aG91QHRpYW55b3Vjb25zdWx0aW5nLmNvbTwvRW1haWxUbz4NCiAgICA8TGljZW5zZVR5cGU+RGV2ZWxvcGVyIFNtYWxsIEJ1c2luZXNzPC9MaWNlbnNlVHlwZT4NCiAgICA8TGljZW5zZU5vdGU+MSBEZXZlbG9wZXIgQW5kIDEgRGVwbG95bWVudCBMb2NhdGlvbjwvTGljZW5zZU5vdGU+DQogICAgPE9yZGVySUQ+MjExMDE0MTU1OTQ3PC9PcmRlcklEPg0KICAgIDxVc2VySUQ+OTAwNDgwPC9Vc2VySUQ+DQogICAgPE9FTT5UaGlzIGlzIG5vdCBhIHJlZGlzdHJpYnV0YWJsZSBsaWNlbnNlPC9PRU0+DQogICAgPFByb2R1Y3RzPg0KICAgICAgPFByb2R1Y3Q+QXNwb3NlLlBERiBmb3IgLk5FVDwvUHJvZHVjdD4NCiAgICA8L1Byb2R1Y3RzPg0KICAgIDxFZGl0aW9uVHlwZT5Qcm9mZXNzaW9uYWw8L0VkaXRpb25UeXBlPg0KICAgIDxTZXJpYWxOdW1iZXI+NGIwM2U2NjMtMmE2Yy00Y2RiLWFmNjAtYjU4YWY5MDQyMmFjPC9TZXJpYWxOdW1iZXI+DQogICAgPFN1YnNjcmlwdGlvbkV4cGlyeT4yMDIyMTAxNDwvU3Vic2NyaXB0aW9uRXhwaXJ5Pg0KICAgIDxMaWNlbnNlRXhwaXJ5PjIwMjExMTE0PC9MaWNlbnNlRXhwaXJ5Pg0KICAgIDxFeHBpcnlOb3RlPlRoaXMgaXMgYSB0ZW1wb3JhcnkgbGljZW5zZSBmb3Igbm9uLWNvbW1lcmNpYWwgdXNlIG9ubHkgYW5kIGl0IHdpbGwgZXhwaXJlIG9uIDIwMjEtMTEtMTQ8L0V4cGlyeU5vdGU+DQogICAgPExpY2Vuc2VWZXJzaW9uPjMuMDwvTGljZW5zZVZlcnNpb24+DQogICAgPExpY2Vuc2VJbnN0cnVjdGlvbnM+aHR0cHM6Ly9wdXJjaGFzZS5hc3Bvc2UuY29tL3BvbGljaWVzL3VzZS1saWNlbnNlPC9MaWNlbnNlSW5zdHJ1Y3Rpb25zPg0KICA8L0RhdGE+DQogIDxTaWduYXR1cmU+cjZXMWR0OWJkdEgraWlZa2Fpd0FTTjA3VS91OVh2NkZpTDFZS2FGV0puRSt6V3hqbmlyNkw1QitzVjJXZ2JmY00xdUtia2VKVlZheGF3ZHhQNitwUEU0Z3VjbzJ5SndmSFJFQTVHV2l1eWVLZ21odmpldXVydVdMZ2dIS0RvT2JEVDZ1ZytjM2pGeHRVUnJQaXNZaVd4ZjVDeWd4U1ZRRHdEYXNJa2wrMFJnPTwvU2lnbmF0dXJlPg0KPC9MaWNlbnNlPg==";new Aspose.Pdf.License().SetLicense(new MemoryStream(Convert.FromBase64String(Key)));string filename = System.IO.Path.GetFileName(pdffilepath);string newfilepath = pdfpath + newpdfpath;if (!Directory.Exists(newfilepath)){Directory.CreateDirectory(newfilepath);}PdfContentEditor pdfContentEditor = new PdfContentEditor();pdfContentEditor.BindPdf(pdffilepath); pdfContentEditor.ReplaceText("Beijing Tianyouyida Management Consulting Ltd Co", firstContent); pdfContentEditor.ReplaceText("9 9 9 9 9 9 9 9 9 9", secondContent); pdfContentEditor.ReplaceText("T i a n y o u Z h o u / O p r á v n e n á o s o b a", thirdContent); pdfContentEditor.ReplaceText("T i a n y o u Z h o u / a g e n t", fourthContent);pdfContentEditor.Save(newfilepath + filename); }catch (Exception ex){Log.WriteLog("run", "出现异常,异常信息为:【" + ex.Message + "】");}}private static List<string> GetAllFiles(string path, List<string> resultList, string extension){if (resultList == null){resultList = new List<string>();}System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(path);System.IO.FileInfo[] files = di.GetFiles();foreach (System.IO.FileInfo fi in files){if (fi.Extension.ToLower() == extension){resultList.Add(fi.FullName);}}DirectoryInfo[] dirinfo = di.GetDirectories();for (int i = 0; i < dirinfo.Length; i++){if (!dirinfo[i].FullName.Contains("newpdf")){GetAllFiles(dirinfo[i].FullName, resultList, ".pdf");}}return resultList;}} }
配置文件:
<?xml version="1.0" encoding="utf-8"?> <configuration><appSettings><!--pdf存放路径--><add key="pdfpath" value="C:\Users\Administrator\Desktop\pdfeditor" /><!--休眠时间--><add key="SleepTime" value="60" /><!--被替换pdf存放路径--><add key="newpdfpath" value="/newpdf/" /> <!--要替换的内容--><add key="firstContent" value="Tianjin caiwu guanli gongsi" /><add key="secondContent" value="8888888888" /><add key="thirdContent" value="Mary Zhou/Agent" /><add key="fourthContent" value="Mary Zhou/Agent" /><add key="replaceTextPath" value="/需要添加文字.txt" /></appSettings><startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" /></startup><runtime><assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"><dependentAssembly><assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /><bindingRedirect oldVersion="0.0.0.0-13.0.0.0" newVersion="13.0.0.0" /></dependentAssembly><dependentAssembly><assemblyIdentity name="BouncyCastle.Crypto" publicKeyToken="0e99375e54769942" culture="neutral" /><bindingRedirect oldVersion="0.0.0.0-1.8.9.0" newVersion="1.8.9.0" /></dependentAssembly></assemblyBinding></runtime> </configuration>