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)
{
}
}
}