Ejemplo n.º 1
0
    void button1_Click(object sender, EventArgs e)
    {
        PrinterData pd = ps.GetPrinterSettings(PrinterName);

        pd.Size = ((PaperSize)combobox1.SelectedItem).RawKind;
        ps.ChangePrinterSetting(PrinterName, pd);
    }
Ejemplo n.º 2
0
 /// <summary>
 /// 打印图片(单张)
 /// </summary>
 public static string PrintImage(PrinterData printerData)
 {
     try
     {
         if (string.IsNullOrEmpty(printerData.printerName))
         {
             return("请先设置默认打印机");
         }
         if (string.IsNullOrEmpty(printerData.filePath) && string.IsNullOrEmpty(printerData.imgBase64) && printerData.image == null)
         {
             return("要打印的数据不存在");
         }
         var printType = (printerData.printType).ToUpper();
         if (!string.IsNullOrEmpty(printerData.filePath) || !string.IsNullOrEmpty(printerData.imgBase64))
         {
             printerData.image = (printType == "FILEPATH" || printType == "HTML") ? new Bitmap(printerData.filePath) : Base64ToImg((printerData.imgBase64).Replace(@"data:image/jpeg;base64,", ""));
         }
         SetImgWHByReportScaleRatio(ref printerData);
         printerData.direction = DirectionByImageWH(printerData);
         PrintImagePage(printerData);
     }
     catch (Exception ex)
     {
         return("打印出错【" + ex.Message + "】");
     }
     return("打印成功!");
 }
Ejemplo n.º 3
0
        private static void GetPrinters()
        {
            try
            {
                ManagementObjectSearcher myPrinterObject = new ManagementObjectSearcher("select * from Win32_Printer");

                foreach (ManagementObject obj in myPrinterObject.Get())
                {
                    Console.WriteLine("Name  -  " + obj["Name"]);
                    Console.WriteLine("Network  -  " + obj["Network"]);
                    Console.WriteLine("Availability  -  " + obj["Availability"]);
                    Console.WriteLine("Is default printer  -  " + obj["Default"]);
                    Console.WriteLine("DeviceID  -  " + obj["DeviceID"]);
                    Console.WriteLine("Status  -  " + obj["Status"]);

                    var data = new PrinterData()
                    {
                        Name         = obj["Name"].ToString(),
                        Network      = obj["Network"].ToString(),
                        Availability = obj["Availability"] != null ? obj["Availability"].ToString() : "",
                        IsDefault    = obj["Default"].ToString(),
                        DeviceID     = obj["DeviceID"].ToString(),
                        Status       = obj["Status"].ToString(),
                    };

                    _AssetDataService.CreatePrinterData(_MachineData.Id, data);
                }
            }
            catch (Exception e)
            {
                _AssetDataService.CreateError(_MachineData.Id, "GetPrinters", e);
            }
        }
Ejemplo n.º 4
0
        public static BaseResult PrintTxt(PrinterData printerData)
        {
            try
            {
                if (string.IsNullOrEmpty(printerData.printerName))
                {
                    return(BaseResult.Error("请先设置默认打印机"));
                }
                if (string.IsNullOrEmpty(printerData.data))
                {
                    return(BaseResult.Error("要打印的数据不存在"));
                }

                streamToPrint = printerData.printType == "FILEPATH" ? new StreamReader(printerData.data) : new StreamReader(printerData.data);

                try
                {
                    printFont = new Font("Arial", 10);
                    PrintDocument pd = new PrintDocument();
                    pd.PrintPage += new PrintPageEventHandler
                                        (PdPrintPage);
                    pd.Print();
                }
                finally
                {
                    streamToPrint.Close();
                }
            }
            catch (Exception e)
            {
                return(BaseResult.Error(e.Message));
            }
            return(BaseResult.Success(""));
        }
Ejemplo n.º 5
0
 public static void SetImgWHByReportScaleRatio(ref PrinterData printerData)
 {
     if (printerData.direction == "0" && !string.IsNullOrEmpty(printerData.printImageReportScaleRatio))
     {
         printerData.width  = Convert.ToInt32(printerData.image.Width * Convert.ToDecimal(printerData.printImageReportScaleRatio));
         printerData.height = Convert.ToInt32(printerData.image.Height * Convert.ToDecimal(printerData.printImageReportScaleRatio));
     }
 }
        public void CreatePrinterData(int probeDataId, PrinterData data)
        {
            data.ProbeDataId = probeDataId;
            data.CreatedOn   = DateTime.UtcNow;

            _Context.PrinterData.Add(data);
            _Context.SaveChanges();
        }
Ejemplo n.º 7
0
            public bool ChangePrinterSetting(string printerName, ref PrinterData PS, bool bl)
            {
                if ((((int)PS.Duplex < 1) || ((int)PS.Duplex > 3)) && bl)
                {
                    throw new ArgumentOutOfRangeException("nDuplexSetting", "nDuplexSetting is incorrect.");
                }
                else
                {
                    PrintDocument pd = new PrintDocument();
                    dm = this.GetPrinterSettings(printerName);
                    if (bl)
                    {
                        /*dm.dmFields |= (int)DmFields.DM_DUPLEX | (int)DmFields.DM_ORIENTATION
                         | (int)DmFields.DM_DEFAULTSOURCE | (int)DmFields.DM_PAPERSIZE
                         | (int)DmFields.DM_PAPERLENGTH | (int)DmFields.DM_PAPERWIDTH;
                         */
                        dm.dmDuplex      = (short)PS.Duplex;
                        dm.dmOrientation = (short)PS.Orientation;
                    }
                    else
                    {
                        PS.pmFields    = dm.dmFields;
                        PS.Duplex      = (PageDuplex)dm.dmDuplex;
                        PS.Orientation = (PageOrientation)dm.dmOrientation;
                        PS.source      = (PaperSource)dm.dmDefaultSource;
                        PS.Size        = (PaperSize)dm.dmPaperSize;
                        PS.pLength     = dm.dmPaperLength;
                        PS.pWidth      = dm.dmPaperWidth;
                    }
                    Marshal.StructureToPtr(dm, yDevModeData, true);
                    pinfo.pDevMode            = yDevModeData;
                    pinfo.pSecurityDescriptor = IntPtr.Zero;

                    /*update driver dependent part of the DEVMODE
                     * 1 = DocumentProperties(IntPtr.Zero, hPrinter, sPrinterName, yDevModeData
                     * , ref pinfo.pDevMode, (DM_IN_BUFFER | DM_OUT_BUFFER));*/
                    Marshal.StructureToPtr(pinfo, ptrPrinterInfo, true);
                    lastError = Marshal.GetLastWin32Error();
                    nRet      = Convert.ToInt16(SetPrinter(hPrinter, 2, ptrPrinterInfo, 0));
                    if (nRet == 0)
                    {
                        lastError = Marshal.GetLastWin32Error();
                        throw new Win32Exception(Marshal.GetLastWin32Error());
                    }
                    if (hPrinter != IntPtr.Zero)
                    {
                        ClosePrinter(hPrinter);
                    }
                    return(Convert.ToBoolean(nRet));
                }
            }
Ejemplo n.º 8
0
        public static string PrintPdf(PrinterData printerData)
        {
            try
            {
                if (string.IsNullOrEmpty(printerData.printerName))
                {
                    return("请先设置默认打印机");
                }
                if (!Directory.Exists(printerData.filePath) && !File.Exists(printerData.filePath))
                {
                    return("要打印的数据不存在");
                }

                using (var pdfDocument = PdfiumViewer.PdfDocument.Load(printerData.filePath))
                {
                    for (int?pages = 0; pages < pdfDocument.PageCount; pages++)
                    {
                        using (var image = pdfDocument.Render(pages.Value, ConfigDefine.Pdf2JpgResolution, ConfigDefine.Pdf2JpgResolution, PdfiumViewer.PdfRenderFlags.CorrectFromDpi))
                        {
                            PrintDocument pd = new PrintDocument();
                            pd.PrinterSettings.PrinterName = printerData.printerName;
                            pd.DefaultPageSettings.PrinterSettings.PrinterName = printerData.printerName;
                            pd.DefaultPageSettings.PaperSize = getPaperSize(pd.PrinterSettings.PaperSizes, printerData.paperName) ?? pd.DefaultPageSettings.PaperSize;
                            pd.PrintPage += (o, e) =>
                            {
                                PageSettings settings    = e.PageSettings;
                                var          paperHeight = settings.PaperSize.Height;
                                var          paperWidth  = settings.PaperSize.Width;
                                int          margin      = 10;
                                var          imgHeight   = 0;
                                var          imgWidth    = 0;

                                ImageScaling(image, paperHeight, paperWidth, margin, printerData.direction, ref imgHeight, ref imgWidth);
                                if (printerData.direction == "2")                  //2:横向打印(html转pdf的有问题,html转pdf不考虑宽度,转出来标准的pdf页,分页也已经完成,在这部分就处理不了)
                                {
                                    e.Graphics.TranslateTransform(0, paperHeight); //旋转原点
                                    e.Graphics.RotateTransform(-90.0F);            //旋转角度
                                }
                                e.Graphics.DrawImage(image, margin, margin, imgWidth, imgHeight);
                            };
                            pd.Print();
                        }
                    }
                }
                return("打印成功!");
            }
            catch (Exception ex)
            {
                return("打印出错【" + ex.Message + "】");
            }
        }
Ejemplo n.º 9
0
 public static string DirectionByImageWH(PrinterData printerData)
 {
     if (printerData.direction == "0")
     {
         if (printerData.image.Width > printerData.image.Height)
         {
             return("2");
         }
         else
         {
             return("1");
         }
     }
     return(printerData.direction);
 }
Ejemplo n.º 10
0
        public override int GetHashCode()
        {
            int hash = 1;

            if (printerData_ != null)
            {
                hash ^= PrinterData.GetHashCode();
            }
            hash ^= profileCounters_.GetHashCode();
            if (_unknownFields != null)
            {
                hash ^= _unknownFields.GetHashCode();
            }
            return(hash);
        }
Ejemplo n.º 11
0
        public static void PrintImagePage(PrinterData printerData)
        {
            var           eventType = (printerData.eventType).ToUpper();
            PrintDocument pd        = new PrintDocument();

            pd.PrinterSettings.PrinterName = printerData.printerName;
            pd.DefaultPageSettings.PrinterSettings.PrinterName = printerData.printerName;
            PrinterSettings.PaperSizeCollection paperSizes = pd.PrinterSettings.PaperSizes; //获取打印纸张
            if (printerData.customSizeFlag)
            {
                PaperSize ps = new PaperSize("用户选择模版(" + printerData.width + "*" + printerData.height + ")", (int)Millimeters2PixelsUtils.Millimeters2Pixels(printerData.width), (int)Millimeters2PixelsUtils.Millimeters2Pixels(printerData.height));
                pd.DefaultPageSettings.PaperSize = ps;
            }
            else
            {
                pd.DefaultPageSettings.PaperSize = getPaperSize(paperSizes, printerData.paperName) ?? pd.DefaultPageSettings.PaperSize;
            }
            pd.PrintPage += (o, e) =>
            {
                PageSettings settings    = e.PageSettings;
                var          paperHeight = settings.PaperSize.Height;
                var          paperWidth  = settings.PaperSize.Width;
                //Rectangle m = e.MarginBounds;
                int margin = 10, imgHeight = 0, imgWidth = 0;
                ImageScaling(printerData.image, paperHeight, paperWidth, margin, printerData.direction, ref imgHeight, ref imgWidth);
                if (printerData.direction == "2")                  //2:横向打印(html转pdf的有问题,html转pdf不考虑宽度,转出来标准的pdf页,分页也已经完成,在这部分就处理不了)
                {
                    e.Graphics.TranslateTransform(0, paperHeight); //旋转原点
                    e.Graphics.RotateTransform(-90.0F);            //旋转角度
                }
                e.Graphics.DrawImage(printerData.image, margin, margin, imgWidth, imgHeight);
            };
            if (eventType == "PRINT")
            {
                pd.Print();
            }
            else if (eventType == "PREVIEW")
            {
                PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog();
                printPreviewDialog.WindowState = FormWindowState.Maximized;
                printPreviewDialog.Document    = pd;
                printPreviewDialog.TopMost     = true;
                printPreviewDialog.ShowDialog();
            }
            (printerData.image).Dispose();
        }
Ejemplo n.º 12
0
 public void MergeFrom(HloExecutionProfileData other)
 {
     if (other == null)
     {
         return;
     }
     if (other.printerData_ != null)
     {
         if (printerData_ == null)
         {
             PrinterData = new global::Xla.HloProfilePrinterData();
         }
         PrinterData.MergeFrom(other.PrinterData);
     }
     profileCounters_.Add(other.profileCounters_);
     _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
 }
        public static void Start()
        {
            Thread.CurrentThread.Name = "Главный поток";
            CheckThread(Thread.CurrentThread);

            var clock_thread = new Thread(ClockThreadMethod);

            clock_thread.Name     = "Фоновый поток";
            clock_thread.Priority = ThreadPriority.BelowNormal;
            //clock_thread.IsBackground = true;
            clock_thread.Start();

            var message = "Вечер в хату!!!";

            //var printer1_thread = new Thread(new ParameterizedThreadStart(PrinterThread));

            //var printer1_thread = new Thread(PrinterThread);
            //printer1_thread.Start(message);

            //var printer2_thread = new Thread(() => PrintherThread(message));

            //printer2_thread.Start();

            var printer_data    = new PrinterData(message);
            var printer3_thread = new Thread(printer_data.Print);

            printer3_thread.Start();


            Console.WriteLine("Главный поток завершился");
            Console.ReadLine();

            if (!clock_thread.Join(50))
            {
                clock_thread.Interrupt();
            }

            _ClockCanWork = false;
            //clock_thread.Abort();
        }
Ejemplo n.º 14
0
    /// <summary>
    /// 改变打印机的设置
    /// 张刊
    /// 2016年8月18日
    /// [email protected]
    /// </summary>
    /// <param name="PrinterName">打印机名称,如果为空则使用默认打印机</param>
    /// <param name="PS">需要改变的信息</param>
    /// <returns>是否改变成功</returns>
    public static void ModifyPrintInfo1(string PrinterName, ref PrinterData PS)
    {
        if (PrinterName == string.Empty || PrinterName == null)
        {
            PrinterName = GetDeaultPrinterName();
        }
        IntPtr hDC = CreateDC("WINSPOOL", PrinterName, null, ref dm);

        if (hDC != IntPtr.Zero)
        {
            if ((int)PS.Size != 0)
            {
                dm.dmPaperSize = (short)PS.Size;
                dm.dmFields   |= DM_PAPERSIZE;
            }
            if (PS.pWidth != 0)
            {
                dm.dmPaperWidth = (short)PS.pWidth;
                dm.dmFields    |= DM_PAPERWIDTH;
            }
            if (PS.pLength != 0)
            {
                dm.dmPaperLength = (short)PS.pLength;
                dm.dmFields     |= DM_PAPERLENGTH;
            }
            if (PS.pFormName != null && PS.pFormName != string.Empty)
            {
                dm.dmFormName = PS.pFormName;
                dm.dmFields  |= DM_FORMNAME;
            }
            if ((int)PS.Orientation != 0)
            {
                dm.dmOrientation = (short)PS.Orientation;
                dm.dmFields     |= DM_ORIENTATION;
            }
            ResetDC(hDC, ref dm);
            DeleteDC(hDC);
        }
    }
Ejemplo n.º 15
0
        public static string PreViewPdf(PrinterData printerData)
        {
            try
            {
                if (string.IsNullOrEmpty(printerData.printerName))
                {
                    return("请先设置默认打印机");
                }
                if (!Directory.Exists(printerData.filePath) && !File.Exists(printerData.filePath))
                {
                    return("要打印的数据不存在");
                }

                using (var pdfDocument = PdfiumViewer.PdfDocument.Load(printerData.filePath))
                {
                    int?          pages = 0;
                    PrintDocument pd    = new PrintDocument();
                    pd.PrinterSettings.PrinterName = printerData.printerName;
                    pd.DefaultPageSettings.PrinterSettings.PrinterName = printerData.printerName;
                    pd.DefaultPageSettings.PaperSize = getPaperSize(pd.PrinterSettings.PaperSizes, printerData.paperName) ?? pd.DefaultPageSettings.PaperSize;
                    pd.PrintPage += (o, e) =>
                    {
                        PreViewPage(o, e, pdfDocument, printerData.direction, printerData.customSizeFlag, printerData.width, printerData.height, ref pages);
                    };

                    PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog();
                    printPreviewDialog.WindowState = FormWindowState.Maximized;
                    printPreviewDialog.Document    = pd;
                    printPreviewDialog.TopMost     = true;
                    printPreviewDialog.ShowDialog();
                    //pd.IMCISPrintTool();
                }
                return("打印成功!");
            }
            catch (Exception ex)
            {
                return("打印出错【" + ex.Message + "】");
            }
        }
Ejemplo n.º 16
0
    /// <summary>
    /// 改变打印机的设置
    /// 张刊
    /// 2016年8月18日
    /// [email protected]
    /// </summary>
    /// <param name="PrinterName">打印机名称,如果为空则使用默认打印机</param>
    /// <param name="PS">需要改变的信息</param>
    /// <returns>是否改变成功</returns>
    public static bool ModifyPrintInfo(string PrinterName, ref PrinterData PS)
    {
        if ((((int)PS.Duplex < 0) || ((int)PS.Duplex > 3)))
        {
            throw new ArgumentOutOfRangeException("nDuplexSetting", "nDuplexSetting is incorrect.");
        }
        else
        {
            if (PrinterName == string.Empty || PrinterName == null)
            {
                PrinterName = GetDeaultPrinterName();
            }
            dm = GetPrinterDemode(PrinterName);
            //是否改变纸张类型
            if ((int)PS.Size != 0)
            {
                dm.dmPaperSize = (short)PS.Size;
                dm.dmFields   |= DM_PAPERSIZE;
            }
            if (PS.pWidth != 0)            //师傅改变纸张宽度
            {
                dm.dmPaperWidth = (short)PS.pWidth;
                dm.dmFields    |= DM_PAPERWIDTH;
            }
            if (PS.pLength != 0)            //是否改变纸张高度
            {
                dm.dmPaperLength = (short)PS.pLength;
                dm.dmFields     |= DM_PAPERLENGTH;
            }
            if (PS.pFormName != null && PS.pFormName != string.Empty)            //是否改变纸张名称
            {
                dm.dmFormName = PS.pFormName;
                dm.dmFields  |= DM_FORMNAME;
            }
            if ((int)PS.Orientation != 0)            //是否改变纸张方向
            {
                dm.dmOrientation = (short)PS.Orientation;
                dm.dmFields     |= DM_ORIENTATION;
            }

            if (PS.source != null)
            {
                dm.dmDefaultSource = (short)PS.source;
                dm.dmFields       |= (int)PaperSource.DMBIN_UPPER;
            }
            Marshal.StructureToPtr(dm, yDevModeData, true);

            pinfo.pDevMode            = yDevModeData;
            pinfo.pSecurityDescriptor = IntPtr.Zero;

            /*update driver dependent part of the DEVMODE
             * 1 = DocumentProperties(IntPtr.Zero, hPrinter, sPrinterName, yDevModeData, ref pinfo.pDevMode, (DM_IN_BUFFER | DM_OUT_BUFFER));*/
            Marshal.StructureToPtr(pinfo, ptrPrinterInfo, true);             //写入内存

            lastError = Marshal.GetLastWin32Error();
            nRet      = Convert.ToInt16(SetPrinter(hPrinter, 2, ptrPrinterInfo, 0));
            if (nRet == 0)
            {
                lastError = Marshal.GetLastWin32Error();                //Unable to set shared printer settings.
                //throw new Win32Exception(Marshal.GetLastWin32Error());
            }
            if (hPrinter != IntPtr.Zero)
            {
                ClosePrinter(hPrinter);
            }
            return(Convert.ToBoolean(nRet));
        }
    }
Ejemplo n.º 17
0
        public string Print(string data)
        {
            String result = "打印成功!";

            try
            {
                PrinterData printerData  = JsonHelper.DeserializeJsonToObject <PrinterData>(data);
                string      eventType    = (printerData.eventType).ToUpper();
                string      printType    = (printerData.printType).ToUpper();
                string      folderName   = Guid.NewGuid().ToString();                    //pdf转图片所存放的文件夹名称
                string      tempDir      = Path.Combine(dfp.dynamicFilePath, "tempImg"); //生成图片临时存放文件夹
                string      tempImageDir = Path.Combine(tempDir, folderName);
                //string targetPath = Path.Combine(tempDir, fileName + ".jpg");
                int         width          = printerData.width;
                int         height         = printerData.height;
                Boolean     customSizeFlag = printerData.customSizeFlag;
                WebRequest  webreq         = null;
                WebResponse webres         = null;
                Boolean     isUrl          = HttpUtils.IsUrl(Convert.ToString(printerData.data));
                string      fileType       = printerData.fileType.ToUpper();
                #region
                if (File.Exists(Convert.ToString(printerData.data)))   //fileType由于IMCIS没有对应变量,data是路径文件名时取值为其后缀,否则当printType时“BASE64”也是JPG,否则就是HTML打印
                {
                    fileType = Path.GetExtension(Convert.ToString(printerData.data)).Substring(1).ToUpper();
                }
                else if (isUrl) //网络文件,通过ContentType获取
                {
                    webreq = WebRequest.Create(Convert.ToString(printerData.data));
                    webres = webreq.GetResponse();
                    string[] contentType = Convert.ToString(webres.ContentType).Split('/');
                    fileType = contentType.Length > 1 ? contentType[1].ToUpper() : fileType;
                }
                else if (fileType != "PRINTERNAMES" && fileType != "PAGESIZES")
                {
                    fileType = printType == "BASE64" ? "JPG" : "HTML";
                }
                #endregion
                switch (fileType)
                {
                case "JPG":
                case "JPEG":
                case "PNG":
                case "RAW":
                case "BMP":
                    if (isUrl)
                    {
                        using (Stream stream = webres.GetResponseStream())
                        {
                            using (Image image = Image.FromStream(stream))
                            {
                                printerData.image = image;
                                result            = PrintUtils.PrintImage(printerData);
                            }
                        }
                    }
                    else
                    {
                        if (printType == "FILEPATH")
                        {
                            printerData.filePath = printerData.data;
                        }
                        else if (printType == "BASE64")
                        {
                            printerData.imgBase64 = printerData.data;
                        }
                        result = PrintUtils.PrintImage(printerData);
                    }
                    break;

                case "TXT":
                    PrintUtils.PrintTxt(printerData);
                    break;

                    #region pdf转图片打印

                    /*
                     * case "PDF":
                     * string fileName = Path.GetFileNameWithoutExtension(printerData.data);  //通过完整路径取得pdf文件名称作为jpg的文件名
                     * if (isUrl)
                     * {
                     *  using (Stream stream = webres.GetResponseStream())
                     *  {
                     *      MemoryStream ms = HttpUtils.StreamToMemoryStream(stream);
                     *      Pdf2JpgUtils.Pdf2Jpg(ms, Path.Combine(tempDir, fileName + ".jpg"), null, folderName);
                     *  }
                     * }
                     * else
                     * {
                     *  Pdf2JpgUtils.Pdf2Jpg(Convert.ToString(printerData.data), Path.Combine(tempDir, fileName + ".jpg"), null, folderName);
                     * }
                     *
                     * if (eventType == "PRINT")
                     * {
                     *  var files = Directory.GetFiles(tempImageDir).OrderBy(f => Convert.ToInt32(Path.GetFileNameWithoutExtension(f)));
                     *  foreach (var file in files)
                     *  {
                     *      printerData.filePath = file;
                     *      result = PrintUtils.PrintImage(printerData);
                     *  }
                     *  try
                     *  {
                     *      //删除文件夹
                     *      Directory.Delete(tempImageDir, true);
                     *  }
                     *  catch (Exception ex)
                     *  {
                     *      result = string.Format("删除临时目录出错:{0};其他错误信息:{1}", tempImageDir, ex);
                     *  }
                     * }
                     * else if (eventType == "PREVIEW")
                     * {
                     *  printerData.filePath = tempImageDir;
                     *  result = PrintUtils.PreView(printerData);
                     * }
                     * break;
                     * case "HTML":
                     * string tempPdf = Path.Combine(dfp.dynamicFilePath, "tempPdf");
                     * string tempPdfDir = Path.Combine(tempPdf, folderName);
                     * Directory.CreateDirectory(tempPdfDir);
                     * string tempPdfPath = Path.Combine(tempPdfDir, "Html2Pdf.pdf");
                     * Html2PdfUtils.Html2Pdf(Convert.ToString(printerData.data).Trim(), tempPdfPath, printerData.paperName, printerData.direction, customSizeFlag, width, height);
                     * Pdf2JpgUtils.Pdf2Jpg(tempPdfPath, Path.Combine(tempDir, "Html2Pdf.jpg"), null, folderName);
                     * if (eventType == "PRINT")
                     * {
                     *  var files = Directory.GetFiles(tempImageDir).OrderBy(f => Convert.ToInt32(Path.GetFileNameWithoutExtension(f)));
                     *  foreach (var file in files)
                     *  {
                     *      printerData.filePath = file;
                     *      result = PrintUtils.PrintImage(printerData);
                     *  }
                     *  try
                     *  {
                     *      //删除临时文件夹
                     *      Directory.Delete(tempImageDir, true);
                     *      Directory.Delete(tempPdfDir, true);
                     *  }
                     *  catch (Exception ex)
                     *  {
                     *      result = string.Format("删除临时目录出错:{0};其他错误信息:{1}", tempPdfDir, ex);
                     *  }
                     * }
                     * else if (eventType == "PREVIEW")
                     * {
                     *  printerData.filePath = tempImageDir;
                     *  result = PrintUtils.PreView(printerData);
                     * }
                     * break;
                     */
                    #endregion
                    #region pdf不转图片直接打印
                /* * */
                case "PDF":
                    if (isUrl)
                    {
                        using (Stream stream = webres.GetResponseStream())
                        {
                            MemoryStream ms = HttpUtils.StreamToMemoryStream(stream);
                            result = eventType == "PRINT" ? PrintUtils.PrintPdf(ms, printerData) :
                                     PrintUtils.PreViewPdf(ms, printerData);
                        }
                    }
                    else
                    {
                        printerData.filePath = printerData.data;
                        result = eventType == "PRINT" ? PrintUtils.PrintPdf(printerData) :
                                 PrintUtils.PreViewPdf(printerData);
                    }
                    break;

                case "HTML":
                    using (Stream pdfStream = Html2PdfUtils.Html2Pdf(printerData))
                    {
                        result = eventType == "PRINT" ? PrintUtils.PrintPdf(pdfStream, printerData) :
                                 PrintUtils.PreViewPdf(pdfStream, printerData);
                    }
                    break;

                    #endregion
                case "PRINTERNAMES":
                    result = PrintUtils.GetPrinterNames();
                    break;

                case "PAGESIZES":
                    result = PrintUtils.GetPageSizesByName(Convert.ToString(printerData.data));
                    break;

                default:
                    result = "参数异常:fileType字段只能为jpg、pdf、html、getPrinterName、getPageSizes";
                    break;
                }
            }
            catch (Exception ex)
            {
                result = "打印出错【" + ex.Message + "】";
            }
            return(result);
        }
Ejemplo n.º 18
0
    /// <summary>
    /// 改变打印机的设置
    /// 张刊
    /// 2016年8月18日
    /// [email protected]
    /// </summary>
    /// <param name="PrinterName">打印机名称,如果为空则使用默认打印机</param>
    /// <param name="PS">需要改变的信息</param>
    /// <returns>是否改变成功</returns>
    public static void ModifyPrintInfo2(string PrinterName, ref PrinterData PS)
    {
        PRINTER_INFO_9 printerInfo;

        printerInfo.pDevMode = IntPtr.Zero;
        if (PrinterName == string.Empty || PrinterName == null)
        {
            PrinterName = GetDeaultPrinterName();
        }
        pd.pDatatype     = 0;
        pd.pDevMode      = 0;
        pd.DesiredAccess = PRINTER_ALL_ACCESS;
        if (OpenPrinter(PrinterName, out hPrinter, ref pd))
        {
            try
            {
                //得到结构体DEVMODE的大小
                int iDevModeSize = DocumentProperties(IntPtr.Zero, hPrinter, PrinterName, IntPtr.Zero, IntPtr.Zero, 0);
                if (iDevModeSize < 0)
                {
                    throw new ApplicationException("Cannot get the size of the DEVMODE structure.");
                }
                //分配指向结构体DEVMODE的内存缓冲区
                IntPtr hDevMode = Marshal.AllocCoTaskMem(iDevModeSize + 100);
                //得到一个指向DEVMODE内存缓存的指针
                nRet = DocumentProperties(IntPtr.Zero, hPrinter, PrinterName, hDevMode, IntPtr.Zero, DM_OUT_BUFFER);
                if (nRet < 0)
                {
                    throw new ApplicationException("Cannot get the size of the DEVMODE structure.");
                }
                //給dm賦值
                dm = (DEVMODE)Marshal.PtrToStructure(hDevMode, dm.GetType());

                if ((((int)PS.Duplex < 0) || ((int)PS.Duplex > 3)))
                {
                    throw new ArgumentOutOfRangeException("nDuplexSetting", "nDuplexSetting is incorrect.");
                }
                else
                {
                    //更改printersetting
                    if ((int)PS.Size != 0)
                    {
                        dm.dmPaperSize = (short)PS.Size;
                        dm.dmFields   |= DM_PAPERSIZE;
                    }
                    if (PS.pWidth != 0)
                    {
                        dm.dmPaperWidth = (short)PS.pWidth;
                        dm.dmFields    |= DM_PAPERWIDTH;
                    }
                    if (PS.pLength != 0)
                    {
                        dm.dmPaperLength = (short)PS.pLength;
                        dm.dmFields     |= DM_PAPERLENGTH;
                    }
                    if (PS.pFormName != null && PS.pFormName != string.Empty)
                    {
                        dm.dmFormName = PS.pFormName;
                        dm.dmFields  |= DM_FORMNAME;
                    }
                    if ((int)PS.Orientation != 0)
                    {
                        dm.dmOrientation = (short)PS.Orientation;
                        dm.dmFields     |= DM_ORIENTATION;
                    }
                    Marshal.StructureToPtr(dm, hDevMode, true);

                    //                        pinfo.pDevMode = hDevMode;
                    //                        pinfo.pSecurityDescriptor = IntPtr.Zero;
                    //                        /*update driver dependent part of the DEVMODE
                    //                        1 = DocumentProperties(IntPtr.Zero, hPrinter, sPrinterName, yDevModeData, ref pinfo.pDevMode, (DM_IN_BUFFER | DM_OUT_BUFFER));*/
                    //                        Marshal.StructureToPtr(pinfo,ptrPrinterInfo,true);
                    //得到printer info的大小
                    nRet = DocumentProperties(IntPtr.Zero, hPrinter, PrinterName, printerInfo.pDevMode, printerInfo.pDevMode, DM_IN_BUFFER | DM_OUT_BUFFER);
                    if (nRet < 0)
                    {
                        throw new ApplicationException("Unable to set the PrintSetting for this printer");
                    }
                    GetPrinter(hPrinter, 9, IntPtr.Zero, 0, out nBytesNeeded);
                    if (nBytesNeeded == 0)
                    {
                        throw new ApplicationException("GetPrinter failed.Couldn't get the nBytesNeeded for shared PRINTER_INFO_9 structure");
                    }
                    //分配内存缓冲区大小
                    ptrPrinterInfo = Marshal.AllocCoTaskMem(nBytesNeeded);
                    bool bSuccess = GetPrinter(hPrinter, 9, ptrPrinterInfo, nBytesNeeded, out nJunk);
                    if (!bSuccess)
                    {
                        throw new ApplicationException("GetPrinter failed.Couldn't get the nBytesNeeded for shared PRINTER_INFO_9 structure");
                    }
                    //赋值printerInfo
                    printerInfo          = (PRINTER_INFO_9)Marshal.PtrToStructure(ptrPrinterInfo, printerInfo.GetType());
                    printerInfo.pDevMode = hDevMode;

                    //获取一个指向 PRINTER_INFO_9结构的指针
                    Marshal.StructureToPtr(printerInfo, ptrPrinterInfo, true);
                    //设置打印机
                    bSuccess = SetPrinter(hPrinter, 9, ptrPrinterInfo, 0);
                    if (!bSuccess)
                    {
                        throw new Win32Exception(Marshal.GetLastWin32Error(), "SetPrinter() failed.Couldn't set the printer settings");
                    }

                    PrinterSetting.SendMessageTimeout(new IntPtr(HWND_BROADCAST), WM_SETTINGCHANGE, IntPtr.Zero, IntPtr.Zero, PrinterSetting.SendMessageTimeoutFlags.SMTO_NORMAL, 1000, out hDummy);
                }
            }
            finally
            {
                ClosePrinter(hPrinter);
            }
        }
    }
Ejemplo n.º 19
0
    /// <summary>
    /// 改变打印机的设置
    /// 张刊
    /// 2016年8月18日
    /// [email protected]
    /// </summary>
    /// <param name="PrinterName">打印机名称,如果为空则使用默认打印机</param>
    /// <param name="PS">需要改变的信息</param>
    /// <returns>是否改变成功</returns>
    public static bool ModifyPrintInfo3(string PrinterName, ref PrinterData PS)
    {
        pd.pDatatype     = 0;
        pd.pDevMode      = 0;
        pd.DesiredAccess = PRINTER_ALL_ACCESS;
        if (PrinterName == string.Empty || PrinterName == null)
        {
            PrinterName = GetDeaultPrinterName();
        }
        nRet = Convert.ToInt32(OpenPrinter(PrinterName, out hPrinter, ref pd));
        if (nRet == 0)
        {
            lastError = Marshal.GetLastWin32Error();
            throw new Win32Exception(Marshal.GetLastWin32Error());
        }
        //调用GetPrinter获取PRINTER_INFO_2在内存的字节数
        GetPrinter(hPrinter, 2, IntPtr.Zero, 0, out nBytesNeeded);
        if (nBytesNeeded <= 0)
        {
            ClosePrinter(hPrinter);
            return(false);
        }
        //为PRINTER_INFO_2分配足够的内存
        ptrPrinterInfo = Marshal.AllocHGlobal(nBytesNeeded);
        if (ptrPrinterInfo == IntPtr.Zero)
        {
            ClosePrinter(hPrinter);
            return(false);
        }

        //调用GetPrinter填充当前设定,所要改变的信息(ptrPrinterInfo中)
        if (!GetPrinter(hPrinter, 2, ptrPrinterInfo, nBytesNeeded, out nBytesNeeded))
        {
            Marshal.FreeHGlobal(ptrPrinterInfo);
            ClosePrinter(hPrinter);
            return(false);
        }
        //把内存中指向PRINTER_INFO_2的指针转化为PRINTER_INFO_2结构
        //如果GetPrinter没有得到DEVMODE结构,尝试调用DocumentProperties得到DEVMODE结构
        pinfo = (PRINTER_INFO_2)Marshal.PtrToStructure(ptrPrinterInfo, typeof(PRINTER_INFO_2));
        IntPtr Temp = new IntPtr();

        if (pinfo.pDevMode == IntPtr.Zero)
        {
            // If GetPrinter didn't fill in the DEVMODE, try to get it by calling
            // DocumentProperties...
            IntPtr ptrZero = IntPtr.Zero;
            //get the size of the devmode structure
            nBytesNeeded = DocumentProperties(IntPtr.Zero, hPrinter, PrinterName, IntPtr.Zero, IntPtr.Zero, 0);
            if (nBytesNeeded <= 0)
            {
                Marshal.FreeHGlobal(ptrPrinterInfo);
                ClosePrinter(hPrinter);
                return(false);
            }
            ptrDM = Marshal.AllocCoTaskMem(nBytesNeeded);
            int i;
            i = DocumentProperties(IntPtr.Zero, hPrinter, PrinterName, ptrDM, ptrZero, DM_OUT_BUFFER);
            if ((i < 0) || (ptrDM == IntPtr.Zero))
            {
                //Cannot get the DEVMODE structure.
                Marshal.FreeHGlobal(ptrDM);
                ClosePrinter(ptrPrinterInfo);
                return(false);
            }
            pinfo.pDevMode = ptrDM;
        }
        dm = (DEVMODE)Marshal.PtrToStructure(pinfo.pDevMode, typeof(DEVMODE));
        //修改打印机的设定信息
        if ((((int)PS.Duplex < 0) || ((int)PS.Duplex > 3)))
        {
            throw new ArgumentOutOfRangeException("nDuplexSetting", "nDuplexSetting is incorrect.");
        }
        else
        {
            if (PrinterName == string.Empty || PrinterName == null)
            {
                PrinterName = GetDeaultPrinterName();
            }
            if ((int)PS.Size != 0)
            {
                dm.dmPaperSize = (short)PS.Size;
                dm.dmFields   |= DM_PAPERSIZE;
            }
            if (PS.pWidth != 0)
            {
                dm.dmPaperWidth = (short)PS.pWidth;
                dm.dmFields    |= DM_PAPERWIDTH;
            }
            if (PS.pLength != 0)
            {
                dm.dmPaperLength = (short)PS.pLength;
                dm.dmFields     |= DM_PAPERLENGTH;
            }
            if (PS.pFormName != null && PS.pFormName != string.Empty)
            {
                dm.dmFormName = PS.pFormName;
                dm.dmFields  |= DM_FORMNAME;
            }
            if ((int)PS.Orientation != 0)
            {
                dm.dmOrientation = (short)PS.Orientation;
                dm.dmFields     |= DM_ORIENTATION;
            }
            Marshal.StructureToPtr(dm, pinfo.pDevMode, true);
            Marshal.StructureToPtr(pinfo, ptrPrinterInfo, true);
            pinfo.pSecurityDescriptor = IntPtr.Zero;
            //Make sure the driver_Dependent part of devmode is updated...
            nRet = DocumentProperties(IntPtr.Zero, hPrinter, PrinterName, pinfo.pDevMode, pinfo.pDevMode, DM_IN_BUFFER | DM_OUT_BUFFER);
            if (nRet <= 0)
            {
                Marshal.FreeHGlobal(ptrPrinterInfo);
                ClosePrinter(hPrinter);
                return(false);
            }

            //SetPrinter 更新打印机信息
            if (!SetPrinter(hPrinter, 2, ptrPrinterInfo, 0))
            {
                Marshal.FreeHGlobal(ptrPrinterInfo);
                ClosePrinter(hPrinter);
                return(false);
            }
            //通知其他应用程序,打印机信息已经更改
            PrinterSetting.SendMessageTimeout(new IntPtr(HWND_BROADCAST), WM_SETTINGCHANGE, IntPtr.Zero, IntPtr.Zero, PrinterSetting.SendMessageTimeoutFlags.SMTO_NORMAL, 1000, out hDummy);

            //释放
            if (ptrPrinterInfo == IntPtr.Zero)
            {
                Marshal.FreeHGlobal(ptrPrinterInfo);
            }
            if (hPrinter == IntPtr.Zero)
            {
                Marshal.FreeHGlobal(hPrinter);
            }

            return(true);
        }
    }
Ejemplo n.º 20
0
 public void addPrinter(string name)
 {
     ReciptPrinter = new PrinterData(name);
 }
        /// <summary>
        /// Loads data.
        /// </summary>
        private void Load()
        {
            // try to load data from server
            if (!LoadRemote())
            {
                // load data from local environment config file
                LoadLocal();
            }

            LogHelper.LogDebug("ColorPageCost " + ColorPageCost.ToString());
            LogHelper.LogDebug("BlackAndWhitePageCost " + BlackAndWhitePageCost.ToString());

            if (BlackAndWhitePageCost <= 0)
            {
                BlackAndWhitePageCost = 1;
            }

            if (ColorPageCost <= 0)
            {
                ColorPageCost = 2;
            }

            // check data and save
            if ((UserPCs != null && UserPCs.Count > 0) && (Printers != null && Printers.Count > 0))
            {
                Save();
            }

            // check
            if (UserPCs == null || UserPCs.Count < 1)
            {
                UserPCs = new PCData()
                {
                    new PCDataEntry {
                        Name = "frontdesk1-pc", Margin = new Thickness(678, 18, 0, 0), MapPosition = MapPosition.Top
                    },
                    new PCDataEntry {
                        Name = "apiserver-pc", Margin = new Thickness(698, 18, 0, 0), MapPosition = MapPosition.Top
                    },
                    new PCDataEntry {
                        Name = "frontdesk2-pc", Margin = new Thickness(728, 18, 0, 0), MapPosition = MapPosition.Top
                    },
                    new PCDataEntry {
                        Name = "conference", Margin = new Thickness(66, 110, 0, 0), MapPosition = MapPosition.Top
                    },
                    new PCDataEntry {
                        Name = "backdesk-pc", Margin = new Thickness(90, 200, 0, 0), MapPosition = MapPosition.Side
                    },
                    new PCDataEntry {
                        Name = "printerleft-pc", Margin = new Thickness(760, 146, 0, 0), MapPosition = MapPosition.Top
                    },
                    new PCDataEntry {
                        Name = "printerright-pc", Margin = new Thickness(696, 146, 0, 0), MapPosition = MapPosition.Top
                    },
                    new PCDataEntry {
                        Name = "cubicle01-pc", Margin = new Thickness(628, 18, 0, 0), MapPosition = MapPosition.Top
                    },
                    new PCDataEntry {
                        Name = "cubicle02-pc", Margin = new Thickness(571, 18, 0, 0), MapPosition = MapPosition.Top
                    },
                    new PCDataEntry {
                        Name = "cubicle03-pc", Margin = new Thickness(514, 18, 0, 0), MapPosition = MapPosition.Top
                    },
                    new PCDataEntry {
                        Name = "cubicle04-pc", Margin = new Thickness(457, 18, 0, 0), MapPosition = MapPosition.Top
                    },
                    new PCDataEntry {
                        Name = "cubicle05-pc", Margin = new Thickness(400, 18, 0, 0), MapPosition = MapPosition.Top
                    },
                    new PCDataEntry {
                        Name = "cubicle06-pc", Margin = new Thickness(343, 18, 0, 0), MapPosition = MapPosition.Top
                    },
                    new PCDataEntry {
                        Name = "cubicle07-pc", Margin = new Thickness(286, 18, 0, 0), MapPosition = MapPosition.Top
                    },
                    new PCDataEntry {
                        Name = "cubicle08-pc", Margin = new Thickness(229, 18, 0, 0), MapPosition = MapPosition.Top
                    },
                    new PCDataEntry {
                        Name = "cubicle09-pc", Margin = new Thickness(172, 18, 0, 0), MapPosition = MapPosition.Top
                    },
                    new PCDataEntry {
                        Name = "cubicle10-pc", Margin = new Thickness(576, 172, 0, 0), MapPosition = MapPosition.Side
                    },
                    new PCDataEntry {
                        Name = "cubicle11-pc", Margin = new Thickness(526, 172, 0, 0), MapPosition = MapPosition.Side
                    },
                    new PCDataEntry {
                        Name = "cubicle12-pc", Margin = new Thickness(470, 172, 0, 0), MapPosition = MapPosition.Side
                    },
                    new PCDataEntry {
                        Name = "cubicle13-pc", Margin = new Thickness(418, 172, 0, 0), MapPosition = MapPosition.Side
                    },
                    new PCDataEntry {
                        Name = "cubicle14-pc", Margin = new Thickness(366, 172, 0, 0), MapPosition = MapPosition.Side
                    },
                    new PCDataEntry {
                        Name = "cubicle15-pc", Margin = new Thickness(314, 172, 0, 0), MapPosition = MapPosition.Side
                    },
                    new PCDataEntry {
                        Name = "cubicle16-pc", Margin = new Thickness(272, 172, 0, 0), MapPosition = MapPosition.Side
                    },
                    new PCDataEntry {
                        Name = "cubicle17-pc", Margin = new Thickness(210, 172, 0, 0), MapPosition = MapPosition.Side
                    },
                    new PCDataEntry {
                        Name = "cubicle18-pc", Margin = new Thickness(158, 172, 0, 0), MapPosition = MapPosition.Side
                    },
                    new PCDataEntry {
                        Name = "cubicle19-pc", Margin = new Thickness(176, 318, 0, 0), MapPosition = MapPosition.Bottom
                    },
                    new PCDataEntry {
                        Name = "cubicle20-pc", Margin = new Thickness(232, 318, 0, 0), MapPosition = MapPosition.Bottom
                    },
                    new PCDataEntry {
                        Name = "cubicle21-pc", Margin = new Thickness(288, 318, 0, 0), MapPosition = MapPosition.Bottom
                    },
                    new PCDataEntry {
                        Name = "cubicle22-pc", Margin = new Thickness(344, 318, 0, 0), MapPosition = MapPosition.Bottom
                    },
                    new PCDataEntry {
                        Name = "cubicle23-pc", Margin = new Thickness(400, 318, 0, 0), MapPosition = MapPosition.Bottom
                    },
                };
            }

            // check valid printer destinations
            if (Printers == null || Printers.Count < 1)
            {
                // load defaults
                Printers = new PrinterData()
                {
                    new PrinterDataEntry()
                    {
                        Name = "backprinter", InternalName = "backprinter", MarginGlow = new Thickness(207.5, 226, 0, 0), MarginLabel = new Thickness(141, 245, 0, 0), ExcludedPCNames = new List <string>()
                        {
                            "backdesk-pc", "frontdesk1-pc", "frontdesk2-pc", "apiserver-pc"
                        }
                    },

                    // COLOR PRINTER $.75 CENTS PER PAGE
                    new PrinterDataEntry()
                    {
                        Name = "COLOR PRINTER $.75 CENTS PER PAGE", InternalName = "colorprinter", MarginGlow = new Thickness(761, 190, 0, 0), MarginLabel = new Thickness(695, 212, 0, 0), ExcludedPCNames = new List <string>()
                        {
                            "printerleft-pc", "printerright-pc", "frontdesk1-pc", "frontdesk2-pc", "apiserver-pc"
                        }
                    },
                    // BLACK & WHITE $.25 CENTS PER PAGE
                    new PrinterDataEntry()
                    {
                        Name = "BLACK & WHITE $.25 CENTS PER PAGE", InternalName = "black-whiteprinter", MarginGlow = new Thickness(787.5, 190, 0, 0), MarginLabel = new Thickness(720, 212, 0, 0), ExcludedPCNames = new List <string>()
                        {
                            "printerleft-pc", "printerright-pc", "frontdesk1-pc", "frontdesk2-pc", "apiserver-pc"
                        }
                    },

                    new PrinterDataEntry()
                    {
                        Name = "cubicle01_printer", InternalName = "cubicle01_printer", MarginGlow = new Thickness(685, 68.5, 0, 0), MarginLabel = new Thickness(618, 92, 0, 0), DoNotShowFootsteps = true
                    },
                    new PrinterDataEntry()
                    {
                        Name = "cubicle02_printer", InternalName = "cubicle02_printer", MarginGlow = new Thickness(629.5, 68.5, 0, 0), MarginLabel = new Thickness(563, 92, 0, 0), DoNotShowFootsteps = true
                    },
                    new PrinterDataEntry()
                    {
                        Name = "cubicle05_printer", InternalName = "cubicle05_printer", MarginGlow = new Thickness(464.5, 69, 0, 0), MarginLabel = new Thickness(398, 92, 0, 0), DoNotShowFootsteps = true
                    },
                };
            }


            /*
             * LogHelper.Log("Environment Data Printers");
             * foreach (var item in Printers)
             *  LogHelper.Log(item.ToString());
             *
             * LogHelper.Log("Environment Data UserPCs");
             * foreach (var item in UserPCs)
             *  LogHelper.Log(item.ToString());*/

            //Save();
        }
Ejemplo n.º 22
0
        public static Stream Html2Pdf(PrinterData printerData)
        {
            string htmlText = printerData.data.Trim();

            if (string.IsNullOrEmpty(htmlText))
            {
                throw new Exception("传入的html无内容:" + htmlText);
            }
            MemoryStream outputStream = new MemoryStream();       //实例化MemoryStream,用于存PDF

            byte[]       data = Encoding.UTF8.GetBytes(htmlText); //字串转成byte[]
            MemoryStream msInput = new MemoryStream(data);
            int          width = 0, height = 0;

            width  = (int)Millimeters2PixelsUtils.Millimeters2Pixels(printerData.width);
            height = (int)Millimeters2PixelsUtils.Millimeters2Pixels(printerData.height);
            if (!printerData.customSizeFlag)
            {
                PrintUtils.getPaperSize(printerData.paperName ?? "A4", ref width, ref height);
            }
            Rectangle pageSize = new Rectangle(width, height); //设置pdf模板大小

            if (printerData.direction == "2")                  //2:横向打印
            {
                pageSize = new Rectangle(height, width);
            }
            Document  doc    = new Document(pageSize); //要写PDF的文件 document = new Document(PageSize.A4, 25, 25, 30, 30);
            PdfWriter writer = PdfWriter.GetInstance(doc, outputStream);
            //指定文件预设开档时的缩放为100%
            PdfDestination pdfDest = new PdfDestination(PdfDestination.XYZ, 0, doc.PageSize.Height, 1f);

            //开启Document文件
            doc.Open();

            //使用XMLWorkerHelper把Html parse到PDF档里
            XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, msInput, null, Encoding.UTF8, new UnicodeFontFactory());
            //XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, msInput, null, Encoding.UTF8);

            //将pdfDest设定的资料写到PDF档
            PdfAction action = PdfAction.GotoLocalPage(1, pdfDest, writer);

            writer.SetOpenAction(action);
            doc.Close();
            msInput.Close();
            outputStream.Close();
            //回传PDF档案
            var bytes = outputStream.ToArray();

            var ret = Convert.ToBase64String(bytes);

            try
            {
                string strbase64 = ret;
                strbase64 = strbase64.Replace(' ', '+');
                return(new MemoryStream(Convert.FromBase64String(strbase64)));
            }
            catch (Exception ex)
            {
                throw new Exception("html转pdf文件失败:" + ex.Message);
            }
        }
Ejemplo n.º 23
0
        public static string PreView(PrinterData printerData)
        {
            try
            {
                if (string.IsNullOrEmpty(printerData.printerName))
                {
                    return("请先设置默认打印机");
                }
                var eventType = (printerData.eventType).ToUpper();
                var filePath  = printerData.filePath;
                if (!Directory.Exists(filePath) && !File.Exists(filePath))
                {
                    return("要打印的数据不存在");
                }

                PrintDocument pd = new PrintDocument();
                pd.PrinterSettings.PrinterName = printerData.printerName;
                pd.DefaultPageSettings.PrinterSettings.PrinterName = printerData.printerName;

                if (printerData.customSizeFlag)
                {
                    PaperSize ps = new PaperSize("用户选择模版(" + printerData.width + "*" + printerData.height + ")", (int)Millimeters2PixelsUtils.Millimeters2Pixels(printerData.width), (int)Millimeters2PixelsUtils.Millimeters2Pixels(printerData.height));
                    pd.DefaultPageSettings.PaperSize = ps;
                }
                else
                {
                    pd.DefaultPageSettings.PaperSize = getPaperSize(pd.PrinterSettings.PaperSizes, printerData.paperName) ?? pd.DefaultPageSettings.PaperSize;
                }
                var fileListIndex = 0;

                List <string> fileList = new List <string>();
                if (File.Exists(filePath)) //路径是jpg图片
                {
                    fileList.Add(filePath);
                }
                else
                {
                    fileList = new List <string>(Directory.GetFiles(filePath).OrderBy(f => Convert.ToInt32(Path.GetFileNameWithoutExtension(f))));
                }
                if (fileList.Count == 0)
                {
                    return("要打印的数据不存在");
                }
                pd.PrintPage += (o, e) =>
                {
                    PageSettings settings = e.PageSettings;
                    var          paperHeight = settings.PaperSize.Height;
                    var          paperWidth = settings.PaperSize.Width;
                    int          margin = 10, imgHeight = 0, imgWidth = 0;

                    using (Image image = new Bitmap(fileList[fileListIndex]))
                    {
                        ImageScaling(image, paperHeight, paperWidth, margin, printerData.direction, ref imgHeight, ref imgWidth);
                        if (printerData.direction == "2")                  //2:横向打印(html转pdf的有问题,html转pdf不考虑宽度,转出来标准的pdf页,分页也已经完成,在这部分就处理不了)
                        {
                            e.Graphics.TranslateTransform(0, paperHeight); //旋转原点
                            e.Graphics.RotateTransform(-90.0F);            //旋转角度
                        }
                        e.Graphics.DrawImage(image, margin, margin, imgWidth, imgHeight);
                    }
                    if (fileListIndex < fileList.Count - 1)
                    {
                        e.HasMorePages = true;  //HaeMorePages属性为True时,PrintPage的回调函数就会被再次调用,打印一个页面。
                        fileListIndex++;
                    }
                    else
                    {
                        //预览界面点击打印需要把索引重新初始化
                        fileListIndex = 0;
                    }
                };

                //打印结束-删除一些创建的文件
                //pd.EndPrint += new PrintEventHandler();

                if (eventType == "PRINT")
                {
                    pd.Print();
                }
                else if (eventType == "PREVIEW")
                {
                    PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog();
                    printPreviewDialog.WindowState = FormWindowState.Maximized;
                    printPreviewDialog.Document    = pd;
                    printPreviewDialog.TopMost     = true;
                    printPreviewDialog.ShowDialog();
                }
                deleteTemFile();
                return("打印成功!");
            }
            catch (Exception e)
            {
                return(e.Message);
            }
        }