Пример #1
0
 public bool pdf_Printer(printerParam param, out string resultString, int copys, bool isFast)
 {
     if (isFast)
     {
         return(pdf_Printer_fast(param, copys, out resultString));
     }
     else
     {
         return(pdf_PrinterLow(param, copys, out resultString));
     }
 }
Пример #2
0
        public bool pdf_Printer_fast(printerParam param, int copys, out string resultString)
        {
            resultString = "";
            PDFFile pdf = PDFFile.Open(param.FileName);

            try
            {
                PrinterSettings settings = new PrinterSettings();
                settings.PrinterName = param.printerName;
                settings.PrintToFile = false;
                if (!settings.IsValid)
                {
                    throw new Exception("打印机:" + param.printerName + "无效");
                }
                //设置纸张大小(可以不设置,取默认设置)3.90 in,  8.65 in
                PaperSize ps = new PaperSize("test", 4, 9);
                ps.RawKind = 9; //如果是自定义纸张,就要大于118,(A4值为9,详细纸张类型与值的对照请看http://msdn.microsoft.com/zh-tw/library/system.drawing.printing.papersize.rawkind(v=vs.85).aspx)
                O2S.Components.PDFRender4NET.Printing.PDFPrintSettings pdfPrintSettings = new O2S.Components.PDFRender4NET.Printing.PDFPrintSettings(settings);
                pdfPrintSettings.PaperSize               = ps;
                pdfPrintSettings.PageScaling             = O2S.Components.PDFRender4NET.Printing.PageScaling.FitToPrinterMarginsProportional;
                pdfPrintSettings.PrinterSettings.Collate = true;
                if (pdf.GetPageSize(0).Width > pdf.GetPageSize(0).Height)
                {
                    pdfPrintSettings.PrinterSettings.DefaultPageSettings.Landscape = true;
                }
                else
                {
                    pdfPrintSettings.PrinterSettings.DefaultPageSettings.Landscape = false;
                }
                pdfPrintSettings.PrinterSettings.Copies = Convert.ToInt16(copys);
                if (!param.isColor)
                {
                    if (pdfPrintSettings.PrinterSettings.PaperSources.Count <= param.PaperSource)
                    {
                        //MessageBox.Show("纸盒参数错误!");
                        throw new Exception("纸盒参数错误!");
                    }
                    else
                    {
                        pdfPrintSettings.PaperSource = pdfPrintSettings.PrinterSettings.PaperSources[param.PaperSource];
                    }
                }
                else
                {
                    for (int i = 0; i < pdfPrintSettings.PrinterSettings.PaperSources.Count; i++)
                    {
                        if (pdfPrintSettings.PrinterSettings.PaperSources[i].SourceName.ToString().Contains("纸盘 " + (param.PaperSource + 1).ToString()))
                        {
                            pdfPrintSettings.PaperSource = pdfPrintSettings.PrinterSettings.PaperSources[i];
                        }
                    }
                    if (pdfPrintSettings.PaperSource == null)
                    {
                        throw new Exception("纸盒参数错误!");
                    }
                }
                pdfPrintSettings.PrinterSettings.DefaultPageSettings.Margins.Left = Math.Max(0, (int)(pdfPrintSettings.PrinterSettings.DefaultPageSettings.PaperSize.Width - pdf.GetPageSize(0).Width) / 2);
                pdfPrintSettings.PrinterSettings.DefaultPageSettings.Margins.Top  = Math.Max(0, (int)(pdfPrintSettings.PrinterSettings.DefaultPageSettings.PaperSize.Height - pdf.GetPageSize(0).Height) / 2);
                if (param.isColor)
                {
                    pdfPrintSettings.PrinterSettings.DefaultPageSettings.Color = true;
                }
                bool isDuplex = pdfPrintSettings.PrinterSettings.CanDuplex;
                if (!isDuplex)
                {
                    if (param.DoubleForm)
                    {
                        throw new Exception("该打印机不支持双面打印!");
                    }
                    else
                    {
                        pdfPrintSettings.PrinterSettings.Duplex = System.Drawing.Printing.Duplex.Simplex;
                    }
                }
                else
                {
                    if (param.DoubleForm)
                    {
                        if (pdf.GetPageSize(0).Width > pdf.GetPageSize(0).Height)
                        {
                            pdfPrintSettings.PrinterSettings.Duplex = System.Drawing.Printing.Duplex.Horizontal;
                        }
                        else
                        {
                            pdfPrintSettings.PrinterSettings.Duplex = System.Drawing.Printing.Duplex.Vertical;
                        }
                    }
                    else
                    {
                        pdfPrintSettings.PrinterSettings.Duplex = System.Drawing.Printing.Duplex.Simplex;
                    }
                }
                pdf.Print(pdfPrintSettings);
                pdf.Dispose();
                resultString = "";
                return(true);
            }
            catch (Exception ex)
            {
                resultString += ex.Message + ";";
                pdf.Dispose();
                return(false);
            }
        }
Пример #3
0
        /// <summary>
        /// PDF打印
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        public bool pdf_PrinterLow(printerParam param, int copys, out string resultString)
        {
            resultString = "";
            PdfDocument pdf = new PdfDocument();

            try
            {
                //PdfDocument pdf = new PdfDocument();
                pdf.LoadFromFile(param.FileName);
                pdf.PrintSettings.PrinterName = param.printerName;
                //pdf.PrintSettings.SelectSplitPageLayout();
                pdf.PrintSettings.DocumentName    = param.oldFile;
                pdf.PrintSettings.Collate         = true;
                pdf.PrintSettings.Copies          = Convert.ToInt16(copys);
                pdf.PrintSettings.PrintController = new StandardPrintController();
                if (param.isColor)
                {
                    pdf.PrintSettings.Color = true;
                }
                pdf.PrintSettings.PaperSettings += delegate(object sender, PdfPaperSettingsEventArgs e)
                {
                    if (!param.isColor)
                    {
                        if (e.PaperSources.Count() <= param.PaperSource)
                        {
                            MessageBox.Show("纸盒参数错误!");
                            throw new Exception();
                        }
                        else
                        {
                            e.CurrentPaperSource = e.PaperSources[param.PaperSource];
                        }
                    }
                    else
                    {
                        e.CurrentPaperSource = e.PaperSources.ToList().Find(t => t.SourceName.Contains("纸盘 " + (param.PaperSource + 1).ToString()));
                        if (e.CurrentPaperSource == null)
                        {
                            throw new Exception("纸盒参数错误!");
                        }
                    }
                };
                pdf.PrintSettings.PrintPage += delegate(object sender, PrintPageEventArgs e)
                {
                    if (pdf.Pages[0].Size.Width > pdf.Pages[0].Size.Height)
                    {
                        e.PageSettings.Landscape = true;
                    }
                    else
                    {
                        e.PageSettings.Landscape = false;
                    }
                    //e.PageSettings.Margins.Left = Math.Max(0, (int)(pdf.PrintSettings.PaperSize.Width - pdf.Pages[0].Size.Width) / 2);
                    //e.PageSettings.Margins.Left = Math.Max(0, (int)(pdf.PrintSettings.PaperSize.Height - pdf.Pages[0].Size.Height) / 2);
                };
                //int left = Math.Max(0, (int)(pdf.PrintSettings.PaperSize.Width - pdf.Pages[0].Size.Width) / 2 );
                //int top = Math.Max(0, (int)(pdf.PrintSettings.PaperSize.Height - pdf.Pages[0].Size.Height) / 2);
                //pdf.PrintSettings.SetPaperMargins(top, top,left,left);
                bool isDuplex = pdf.PrintSettings.CanDuplex;
                if (!isDuplex)
                {
                    if (param.DoubleForm)
                    {
                        MessageBox.Show("该打印机不支持双面打印");
                        pdf.Close();
                        return(false);
                    }
                    else
                    {
                        pdf.PrintSettings.Duplex = System.Drawing.Printing.Duplex.Simplex;
                    }
                }
                else
                {
                    if (param.DoubleForm)
                    {
                        if (pdf.Pages[0].Size.Width > pdf.Pages[0].Size.Height)
                        {
                            pdf.PrintSettings.Duplex = System.Drawing.Printing.Duplex.Horizontal;
                        }
                        else
                        {
                            pdf.PrintSettings.Duplex = System.Drawing.Printing.Duplex.Vertical;
                        }
                    }
                    else
                    {
                        pdf.PrintSettings.Duplex = System.Drawing.Printing.Duplex.Simplex;
                    }
                }
                pdf.Print();
                return(true);
            }
            catch (Exception ex)
            {
                resultString += ex.Message + ";";
                pdf.Close();
                return(false);
            }
        }