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)); } }
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); } }
/// <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); } }