using Common.system; using System; using System.Collections.Generic; using System.Data; using System.Drawing; using System.IO; using System.Threading; using System.Windows; using System.Windows.Input; using System.Windows.Media.Imaging; using System.Windows.Threading; namespace XHWK.WKTool { /// /// 打印 /// public partial class PrintWindow : Window { /// /// 下拉框数据源 /// public DataTable data = new DataTable(); private DataTable dtComponentsUniqueNo; private System.Timers.Timer times; public PrintWindow() { InitializeComponent(); double proportion = 1036.0 / 1290.0; double Widths = (PrimaryScreen.ScaleWorkingAreaSize.Height) / proportion - (BorderThickness.Left + BorderThickness.Right); double Heights = PrimaryScreen.ScaleWorkingAreaSize.Height - (BorderThickness.Top + BorderThickness.Bottom); Width = Widths / 1.42; Height = Heights / 1.71; GridContent.Width = Width + 5; GridContent.Height = Height; ResizeMode = ResizeMode.NoResize; string defa = string.Empty; List defaList = LatticeFileHelper.GetPrinterList(out defa); if (defaList.Count > 0) { data.Columns.Add("Value"); data.Columns.Add("Key"); for (int i = 0; i < defaList.Count; i++) { //创建一行 DataRow row = data.NewRow(); //将此行添加到table中 data.Rows.Add(row); data.Rows[i]["Value"] = defaList[i]; data.Rows[i]["Key"] = i.ToString(); } dtComponentsUniqueNo = data.DefaultView.ToTable(); cmbClass.ItemsSource = dtComponentsUniqueNo.DefaultView; cmbClass.SelectedIndex = 0; } } private double wit = 0; private double hei = 0; public void Initialize(string _imgPath, double _wit, double _hei) { wit = _wit; hei = _hei; if (!string.IsNullOrWhiteSpace(_imgPath)) { imgPri.Source = new BitmapImage(new Uri(_imgPath)); } else { imgPri.Source = null; } I = 0; tip_outer.Visibility = Visibility.Collapsed; } /// /// 打印 /// /// /// private void BtnPrint_Click(object sender, RoutedEventArgs e) { if (string.IsNullOrWhiteSpace(cmbClass.Text)) { //MessageWindow.Show("打印机不能为空!"); MessageWindow.Show("请设置打印机!"); return; } //APP.myloading.Show(); btnClose.IsEnabled = false; btnPrint.IsEnabled = false; //APP.BackgroundWorkerHelper.RunWorkerAsync(InvokeServering, InvokeServerCompate); Thread myThread = new Thread(StartPrint); List StrList = new List(); //string imgPath = //FileToolsCommon.CreateFile(imgPath); //string pdf = imgPath + "\\101.pdf"; //PDF位置 //string SourcePath = FileToolsCommon.GetFileAbsolutePath("/temp/101.pdf"); //StrList.Add(SourcePath); int ipdf = 102; string imgPath = FileToolsCommon.GetFileAbsolutePath("temp/"); string tempImgPath = imgPath; imgPath += "101.pdf"; while (File.Exists(imgPath)) { imgPath = tempImgPath + ipdf.ToString() + ".pdf"; ipdf++; } StrList.Add(imgPath); //打印数量 int PrinterNum = Convert.ToInt32(txbNumberOfCopies.Text); StrList.Add(PrinterNum.ToString()); //打印机名称 string PrinterName = cmbClass.Text; StrList.Add(PrinterName); num = 0; tip_outer.Visibility = Visibility.Visible; myThread.Start(StrList); times = new System.Timers.Timer(100); times.Elapsed += Times_ElapsedClick; times.Start(); } private int num = 0; /// /// 计时器 /// /// /// private void Times_ElapsedClick(object sender, System.Timers.ElapsedEventArgs e) { Dispatcher.Invoke(() => { pgbProcess.Value = num; lbProcess.Content = num.ToString() + "%"; if (num < 99) { num++; times.Interval += (num / 2); } else { times.Stop(); } }); } /// /// 开始打印 /// private void StartPrint(object obj) { try { iTextSharp.text.Document document = new iTextSharp.text.Document(iTextSharp.text.PageSize.A4, 0, 0, 0, 0); //iTextSharp.text.Rectangle page = new iTextSharp.text.Rectangle(iTextSharp.text.PageSize.A4., 250f);//cs ////设置纸张横向 //document.SetPageSize(iTextSharp.text.PageSize.A4.Rotate()); List objStr1 = (List)obj; string SourcePath1 = objStr1[0]; iTextSharp.text.pdf.PdfWriter.GetInstance(document, new FileStream(SourcePath1, FileMode.Create, FileAccess.ReadWrite)); document.Open(); iTextSharp.text.Image image; for (int i = 0; i < APP.PageDrawList.Count; i++) { long ii = Timestamp(); string directoryPath = AppDomain.CurrentDomain.BaseDirectory + "Temp\\"; string filePathOutPut = Path.Combine(directoryPath, string.Format("print{0}{1}.jpg", ii, i)); RectangleF rectangleFs = new RectangleF(); MergerImg("", filePathOutPut, rectangleFs, out string errmsg); image = iTextSharp.text.Image.GetInstance(filePathOutPut); if (string.IsNullOrEmpty(APP.PageDrawList[i].PageImagePath))//没有图片 { } else if (APP.PageDrawList[i].ImgDocumentation == true && !APP.PageDrawList[i].Type.Equals("ppt")) { image = iTextSharp.text.Image.GetInstance(APP.PageDrawList[i].PageImagePath); } else { RectangleF rectangleF = new RectangleF(0, 0, 0, 0); Dispatcher.Invoke(() => { rectangleF = new RectangleF { Width = (float)APP.PageDrawList[i].ImageSizes.CenterX, Height = (float)APP.PageDrawList[i].ImageSizes.CenterY, X = (float)APP.PageDrawList[i].ImageLocation.X, Y = (float)APP.PageDrawList[i].ImageLocation.Y }; }); string msgs = string.Empty; bool isImg = MergerImg(APP.PageDrawList[i].PageImagePath, filePathOutPut, rectangleF, out msgs); if (isImg) { image = iTextSharp.text.Image.GetInstance(filePathOutPut); } else { image = iTextSharp.text.Image.GetInstance(APP.PageDrawList[i].PageImagePath); } } if (image.Height > iTextSharp.text.PageSize.A4.Height) { image.ScaleToFit(iTextSharp.text.PageSize.A4.Width, iTextSharp.text.PageSize.A4.Height); } else if (image.Width > iTextSharp.text.PageSize.A4.Width) { image.ScaleToFit(iTextSharp.text.PageSize.A4.Width, iTextSharp.text.PageSize.A4.Height); } image.Alignment = iTextSharp.text.Image.ALIGN_MIDDLE; document.NewPage(); document.Add(image); //iTextSharp.text.Chunk c1 = new iTextSharp.text.Chunk("Hello World"); //iTextSharp.text.Phrase p1 = new iTextSharp.text.Phrase(); //p1.Leading = 150; //行间距 //document.Add(p1); } Console.WriteLine("转换成功!"); document.Close(); } catch (Exception ex) { Dispatcher.Invoke(() => { btnClose.IsEnabled = true; btnPrint.IsEnabled = true; times.Stop(); tip_outer.Visibility = Visibility.Collapsed; MessageWindow.Show(ex.Message); return; }); LogHelper.WriteErrLog("打印转换PDF失败,原因:" + ex.Message, ex); } List objStr = (List)obj; string SourcePath = objStr[0]; int PrinterNum = int.Parse(objStr[1]); string PrinterName = objStr[2]; //TPF文件位置 string TPFPath = FileToolsCommon.GetFileAbsolutePath("temp/"); FileToolsCommon.CreateDirectory(TPFPath); TPFPath += "101.TPF"; //生成点阵文件 LatticeFileHelper.GeneratingPDF(SourcePath, TPFPath, out int pr, out string msg, out string outPut/*, pyte*/); while (!FileToolsCommon.IsExistFile(TPFPath)) { Thread.Sleep(100); } while (string.IsNullOrWhiteSpace(pr.ToString())) { Thread.Sleep(100); } Thread.Sleep(1000); //打印 LatticeFileHelper.PrinterTPFFile(TPFPath, PrinterNum, PrinterName, out int printResult, out string standardError, out string standardOutput); if (printResult == 0) { Dispatcher.Invoke(() => { btnClose.IsEnabled = true; btnPrint.IsEnabled = true; num = 99; times.Stop(); pgbProcess.Value = 100; lbProcess.Content = "100%"; MessageWindow.Show("打印成功!"); tip_outer.Visibility = Visibility.Collapsed; }); } else { Dispatcher.Invoke(() => { btnClose.IsEnabled = true; btnPrint.IsEnabled = true; times.Stop(); tip_outer.Visibility = Visibility.Collapsed; MessageWindow.Show(standardError); }); } } /// /// 返回一个时间戳到毫秒 /// /// public static long Timestamp() { TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0); long timestr = Convert.ToInt64(ts.TotalMilliseconds); return timestr; } /// /// 生成图片 /// /// 图片地址 /// 保存位置 /// 图片位置 /// 错误消息 /// private bool MergerImg(string _path, string _saveimg, RectangleF _rectangle, out string errmsg) { errmsg = null; try { Bitmap bitmap = null; //创建要显示的图片对象,根据参数的个数设置宽度 Bitmap backgroudImg = new Bitmap((int)/*gridM.ActualWidth*/wit, (int)/*gridM.ActualHeight*/hei); Graphics g = Graphics.FromImage(backgroudImg); //清除画布,背景设置为白色 g.Clear(System.Drawing.Color.White); if (!string.IsNullOrWhiteSpace(_path)) { bitmap = ImageHelper.ReadBitmapFile(_path); g.DrawImage(bitmap, _rectangle); } #region 添加箭头 string Str = "↑"; SolidBrush mybrush = new SolidBrush(Color.Black); //设置默认画刷颜色 Font myfont = new Font("黑体", 14); //设置默认字体格式 g.DrawString(Str, myfont, mybrush, new Rectangle((int)wit - 50, 20, 50, 50)); #endregion backgroudImg.Save(_saveimg); g.Dispose(); backgroudImg.Dispose(); if (bitmap != null) { bitmap.Dispose(); } GC.Collect(); return true; } catch (Exception ex) { errmsg = ex.Message; LogHelper.WriteErrLog("【截图合成】(MergerImg)图片合成失败:" + ex.Message, ex); return false; } } /// /// 打印-开始 /// /// private object InvokeServering() { Dispatcher.Invoke(() => { I = 1; pgbProcess.Value = I * 100 / 100; lbProcess.Content = I.ToString() + "%"; tip_outer.Visibility = Visibility.Visible; //I = 0; }); Thread.Sleep(2000); string imgPath = FileToolsCommon.GetFileAbsolutePath("temp"); FileToolsCommon.CreateFile(imgPath); string pdf = imgPath + "\\101.pdf"; string tpf = imgPath + "\\102.TPF"; string msg = string.Empty; string outPut = string.Empty; //if(rbnSquarePoint.IsChecked==false) //{ // pyte = 1; //} LatticeFileHelper.GeneratingPDF(pdf, tpf, out int pr, out msg, out outPut/*, pyte*/); if (pr == 0) { //outPut = outPut.Replace("[", "").Replace("]", "").Replace("\"", "").Trim(); //APP.OutPut = outPut.Split(','); //string []page= outPut.Split(','); //for(int i=0;i defaList = LatticeFileHelper.GetPrinterList(out defa); string standardError = string.Empty; string standardOutput = string.Empty; int frequency = 1; //Dispatcher.Invoke(() => //{ frequency = Convert.ToInt32(txbNumberOfCopies.Text); LatticeFileHelper.PrinterTPFFile(tpf, frequency, cmbClass.Text, out int printResult, out standardError, out standardOutput); if (printResult == 0)// 0为成功 { new Thread(new ThreadStart(new Action(() => { Dispatcher.Invoke(() => { I = 100; pgbProcess.Value = I * 100 / 100; lbProcess.Content = I.ToString() + "%"; APP.myloading.Hide(); I = 0; }); Thread.Sleep(3000); Dispatcher.Invoke(() => { tip_outer.Visibility = Visibility.Collapsed; //tip_outer.Visibility = Visibility.Collapsed; MessageWindow.Show("打印成功"); }); }))).Start(); } else { Dispatcher.Invoke(() => { APP.myloading.Hide(); MessageWindow.Show(standardError); }); } //}); } else { APP.myloading.Hide(); MessageWindow.Show(msg); } return ""; } /// /// 打印-结束 /// /// public void InvokeServerCompate(object obj) { try { GC.Collect(); APP.myloading.Hide(); } catch (Exception) { } } private int I = 0; private void Times_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { Dispatcher.Invoke(() => { if (I <= 90) { try { pgbProcess.Value = I * 100 / 100; lbProcess.Content = I.ToString() + "%"; I++; } catch (Exception ex) { LogHelper.WriteErrLog("【摄像】(Times_Elapsed)生成图片错误:" + ex.Message, ex); } } }); } /// /// 窗口移动 /// /// /// private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { DragMove(); } /// /// 关闭 /// /// /// private void BtnClose_Click(object sender, RoutedEventArgs e) { Hide(); } /// /// 减 /// /// /// private void BtnLess_Click(object sender, RoutedEventArgs e) { int num = Convert.ToInt32(txbNumberOfCopies.Text); if (num > 1) { num = num - 1; txbNumberOfCopies.Text = num.ToString(); } } /// /// 新增 /// /// /// private void BtnAdd_Click(object sender, RoutedEventArgs e) { int num = Convert.ToInt32(txbNumberOfCopies.Text); if (num > 0) { num = num + 1; txbNumberOfCopies.Text = num.ToString(); } } private void Window_MouseLeftButtonDown_1(object sender, MouseButtonEventArgs e) { } } }