采用PDFRender4NET
//打印机设置
PrinterSettings settings = new PrinterSettings();
settings.PrinterName = printername;
settings.PrintToFile = false;
settings.Copies = 1;
settings.PrintRange = PrintRange.AllPages;
//设置纸张大小(可以不设置取,取默认设置)
PaperSize ps = new PaperSize("Your Paper Name",595,842);
ps.RawKind = 9; //如果是自定义纸张,就要大于118
//打印设置
PDFRender.Printing.PDFPrintSettings pdfPrintSettings = new PDFRender.Printing.PDFPrintSettings(settings);
pdfPrintSettings.AutoRotate = false; //自动旋转
pdfPrintSettings.BitmapPrintResolution = 560; //图片打印精度
pdfPrintSettings.PaperSize = ps; //纸张尺寸
pdfPrintSettings.PageScaling = PDFRender.Printing.PageScaling.FitToPrinterMarginsProportional;
pdfFile.Print(pdfPrintSettings);
代码详见: https://github.com/HiRaygo/DocumentPrint/blob/master/PdfPrint.cs
采用SumatraPDF或Acrobat Reader方案
public static PrintEngine SumatraPDF = new PrintEngine("Sumatra PDF Reader",
((printerName, filePath, documentName) =>
{
string app = Path.Combine(Program.localPath, "SumatraPDF.exe");
string args = string.Format("-silent -exit-on-print -print-to \"{0}\" \"{1}\"", printerName, filePath);
Process p = new Process();
p.StartInfo = new ProcessStartInfo()
{
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden,
FileName = app,
Arguments = args
};
//if (User.isNetworkService())
//{
// p.StartInfo.UserName = Program.config.serviceLogin;
// p.StartInfo.Password = tools.secureString(tools.Decrypt(Program.config.servicePass));
// p.StartInfo.Domain = Program.config.serviceDomain;
// p.StartInfo.LoadUserProfile = true;
// p.StartInfo.UseShellExecute = false;
//}
p.Start();
})){};
/// <summary>
/// Print via external programm Acrobat Reader
/// </summary>
public static PrintEngine AcrobatReader = new PrintEngine("Acrobat Reader",
((printerName, filePath, documentName) =>
{
string app = Registry.LocalMachine.OpenSubKey(
@"SOFTWARE\Microsoft\Windows\CurrentVersion" +
@"\App Paths\AcroRd32.exe"
).GetValue("").ToString()
;
string args = string.Format("/h /t \"{0}\" \"{1}\"", filePath, printerName);
Process p = new Process();
p.StartInfo = new ProcessStartInfo()
{
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden,
FileName = app,
Arguments = args
};
//if (User.isNetworkService())
//{
// p.StartInfo.UserName = Program.config.serviceLogin;
// p.StartInfo.Password = tools.secureString(tools.Decrypt(Program.config.servicePass));
// p.StartInfo.Domain = Program.config.serviceDomain;
// p.StartInfo.LoadUserProfile = true;
// p.StartInfo.UseShellExecute = false;
//}
p.Start();
})){};
代码详见: https://github.com/RepairShopr/AutoPrintr-win/blob/master/AutoPrintr/modules/PrintEngines.cs