/// <summary> /// 打印文件 /// </summary> /// <param name="FileName">原始文件名</param> /// <param name="BarCode">美的条码</param> /// <param name="JiXing">美的机型</param> /// <param name="DingDan">订单名称</param> /// <param name="barTime">条码时间</param> /// <param name="boshiBarCode">博世条码</param> /// <param name="boshiMode">博世机型</param> public bool PrintFile(string FileName, string BarCode, string JiXing, string DingDan, string boshiBarCode, string boshiMode, DateTime barTime, string boshiOrder, string waiXiaoBarCode) { bool result = false; if (App == null) { Load(); } if (App == null) { frmMain.mMain.AddInfo("当前启动Ai失败,请关闭尝试重启程序"); } //替换字符 if (frmMain.mMain.AiReplace == null || (frmMain.mMain.AiReplace.RReplace == null && frmMain.mMain.AiReplace.TReplace == null)) { frmMain.mMain.AddInfo("AI文件替换方案不存在,不能找到须要替换的内容"); return(result); } if ((frmMain.mMain.AiReplace.RReplace == null || frmMain.mMain.AiReplace.RReplace.Count <= 0) && (frmMain.mMain.AiReplace.TReplace == null || frmMain.mMain.AiReplace.TReplace.Count <= 0)) { frmMain.mMain.AiReplace.Load(); } if ((frmMain.mMain.AiReplace.RReplace == null || frmMain.mMain.AiReplace.RReplace.Count <= 0) && (frmMain.mMain.AiReplace.TReplace == null || frmMain.mMain.AiReplace.TReplace.Count <= 0)) { frmMain.mMain.AddInfo("AI文件替换方案为空,不能进行替换指定内容"); return(result); } try { //生成二维码 if (!System.IO.File.Exists(string.Format("{0}\\DEMO{1}.png", fileDirectory, boshiBarCode)) && boshiBarCode.Length > 0) { DataMatrix.net.DmtxImageEncoder de = new DataMatrix.net.DmtxImageEncoder(); DataMatrix.net.DmtxImageEncoderOptions dme = new DataMatrix.net.DmtxImageEncoderOptions(); dme.Scheme = DataMatrix.net.DmtxScheme.DmtxSchemeAscii; dme.MarginSize = 0; dme.SizeIdx = DataMatrix.net.DmtxSymbolSize.DmtxSymbol16x36; Image datamatrix = de.EncodeImage(string.Format("DEMO{0}", boshiBarCode), dme); datamatrix.Save(string.Format("{0}\\DEMO{1}.png", fileDirectory, boshiBarCode), System.Drawing.Imaging.ImageFormat.Png); datamatrix.Dispose(); dme = null; de = null; } //生成条码 ZXing.BarcodeWriter bw; ZXing.Common.EncodingOptions eo; //生成美的条码 if (!System.IO.File.Exists(string.Format("{0}\\{1}.png", fileDirectory, BarCode)) && BarCode.Length > 0) { bw = new ZXing.BarcodeWriter(); bw.Format = ZXing.BarcodeFormat.CODE_128; eo = new ZXing.Common.EncodingOptions(); eo.PureBarcode = true; eo.Width = 45; eo.Height = 20; eo.Margin = 0; bw.Options = eo; bw.Write(BarCode).Save(string.Format("{0}\\{1}.png", fileDirectory, BarCode)); } //生成博世条码 if (!System.IO.File.Exists(string.Format("{0}\\{1}.png", fileDirectory, boshiBarCode)) && boshiBarCode.Length > 0) { bw = new ZXing.BarcodeWriter(); bw.Format = ZXing.BarcodeFormat.CODE_128; eo = new ZXing.Common.EncodingOptions(); eo.PureBarcode = true; eo.Width = 45; eo.Height = 20; eo.Margin = 0; bw.Options = eo; bw.Write(boshiBarCode).Save(string.Format("{0}\\{1}.png", fileDirectory, boshiBarCode)); } //生成美的出口条码 if (!System.IO.File.Exists(string.Format("{0}\\{1}.png", fileDirectory, waiXiaoBarCode)) && waiXiaoBarCode.Length > 0) { bw = new ZXing.BarcodeWriter(); bw.Format = ZXing.BarcodeFormat.CODE_128; eo = new ZXing.Common.EncodingOptions(); eo.PureBarcode = true; eo.Width = 45; eo.Height = 20; eo.Margin = 0; bw.Options = eo; bw.Write(waiXiaoBarCode).Save(string.Format("{0}\\{1}.png", fileDirectory, waiXiaoBarCode)); } //打开AI进行替换文件 Illustrator.Document doc = App.Open(FileName, Illustrator.AiDocumentColorSpace.aiDocumentRGBColor, null); if (doc == null) { frmMain.mMain.AddInfo(string.Format("打开指定AI文件{0}失败,无法打印标贴", FileName)); return(result); } //替换图形 Dictionary <int, RectangleDouble> allReplace = new Dictionary <int, RectangleDouble>(); List <Illustrator.PathItem> allRemovePath = new List <Illustrator.PathItem>(); int allReplaceIndex = 0; if (frmMain.mMain.AiReplace.RReplace != null) { double c = 0, m = 0, y = 0, k = 0; foreach (Illustrator.PathItem pi in doc.PathItems) { if (pi.Filled && pi.FillColor != null) { Illustrator.CMYKColor rgb = pi.FillColor as Illustrator.CMYKColor; if (rgb != null) { c = Convert.ToInt16(rgb.Cyan); m = Convert.ToInt16(rgb.Magenta); y = Convert.ToInt16(rgb.Yellow); k = Convert.ToInt16(rgb.Black); for (int i = 0; i < frmMain.mMain.AiReplace.RReplace.Count; i++) { if (c == frmMain.mMain.AiReplace.RReplace[i].CValue && m == frmMain.mMain.AiReplace.RReplace[i].MValue && y == frmMain.mMain.AiReplace.RReplace[i].YValue && k == frmMain.mMain.AiReplace.RReplace[i].KValue) { allReplace.Add(allReplaceIndex, new RectangleDouble(pi.Left, pi.Top, pi.Width, pi.Height, frmMain.mMain.AiReplace.RReplace[i].NewRegion)); allReplaceIndex++; allRemovePath.Add(pi); break; } } if (allReplaceIndex > 0 && frmMain.mMain.AllDataXml.LocalSettings.TestNo == 9) { break; } } } } allRemovePath.ForEach(//删除所有原始路径 path => { path.Delete(); }); for (int i = 0; i < allReplaceIndex; i++) { if (allReplace.ContainsKey(i)) { Illustrator.PlacedItem placeitem = doc.PlacedItems.Add(); switch (allReplace[i].Region) { case cAiReplace.RegionReplace.RegionList.博世条码: if (System.IO.File.Exists(string.Format("{0}\\{1}.png", fileDirectory, boshiBarCode))) { placeitem.File = string.Format("{0}\\{1}.png", fileDirectory, boshiBarCode); } break; case cAiReplace.RegionReplace.RegionList.美的条码: if (System.IO.File.Exists(string.Format("{0}\\{1}.png", fileDirectory, BarCode))) { placeitem.File = string.Format("{0}\\{1}.png", fileDirectory, BarCode); } break; case cAiReplace.RegionReplace.RegionList.二维码: if (System.IO.File.Exists(string.Format("{0}\\DEMO{1}.png", fileDirectory, boshiBarCode))) { placeitem.File = string.Format("{0}\\DEMO{1}.png", fileDirectory, boshiBarCode); } break; case cAiReplace.RegionReplace.RegionList.出口条码: if (System.IO.File.Exists(string.Format("{0}\\{1}.png", fileDirectory, waiXiaoBarCode))) { placeitem.File = string.Format("{0}\\{1}.png", fileDirectory, waiXiaoBarCode); } break; } placeitem.Left = allReplace[i].Left; placeitem.Top = allReplace[i].Top; placeitem.Width = allReplace[i].Width; placeitem.Height = allReplace[i].Height; placeitem.Embed(); } } } //替换文本 if (frmMain.mMain.AiReplace.TReplace != null) { foreach (Illustrator.TextFrame tf in doc.TextFrames) { Console.WriteLine(tf.Contents); for (int i = 0; i < frmMain.mMain.AiReplace.TReplace.Count; i++) { if (tf.Contents != null && tf.Contents == frmMain.mMain.AiReplace.TReplace[i].OldText) { switch (frmMain.mMain.AiReplace.TReplace[i].NewText) { case cAiReplace.TextReplace.TextList.订单_订单名称: tf.Contents = DingDan; break; case cAiReplace.TextReplace.TextList.机型_博世机型: tf.Contents = boshiMode; break; case cAiReplace.TextReplace.TextList.机型_美的机型: tf.Contents = JiXing; break; case cAiReplace.TextReplace.TextList.日期_3位博世日期: tf.Contents = All.Class.BoShi.GetBoShiTime(barTime); break; case cAiReplace.TextReplace.TextList.日期_年年: tf.Contents = string.Format("{0:yy}", barTime); break; case cAiReplace.TextReplace.TextList.日期_年年年年: tf.Contents = string.Format("{0:yyyy}", barTime); break; case cAiReplace.TextReplace.TextList.日期_年年年年月月日日: tf.Contents = string.Format("{0:yyyyMMdd}", barTime); break; case cAiReplace.TextReplace.TextList.日期_年年月月: tf.Contents = string.Format("{0:yyMM}", barTime); break; case cAiReplace.TextReplace.TextList.日期_日日: tf.Contents = string.Format("{0:dd}", barTime); break; case cAiReplace.TextReplace.TextList.日期_月: tf.Contents = string.Format("{0:X}", barTime.Month); break; case cAiReplace.TextReplace.TextList.日期_月月: tf.Contents = string.Format("{0:MM}", barTime); break; case cAiReplace.TextReplace.TextList.条码_博世条码: tf.Contents = boshiBarCode; break; case cAiReplace.TextReplace.TextList.条码_美的条码: tf.Contents = BarCode; break; case cAiReplace.TextReplace.TextList.订单_出口订单名称: tf.Contents = boshiOrder; break; case cAiReplace.TextReplace.TextList.条码_美的出口条码: tf.Contents = waiXiaoBarCode; break; } break; } } } } doc.SaveAs(string.Format("{0}\\{1}.Ai", fileDirectory, boshiBarCode)); doc.PrintOut(); doc.Close(Illustrator.AiSaveOptions.aiDoNotSaveChanges); doc = null; result = true; } catch (Exception e) { result = false; frmMain.mMain.AddInfo("打印标贴失败,请稍后重新尝试"); All.Class.Error.Add(e); } return(result); }