Пример #1
0
        /// <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);
        }