调用打印命令打印
这种方法会使用文件在系统中默认的打开工具打开进行打印。
这种方式
缺点在于
- 必须设置文件的默认打开方式。
- 必须在系统里设置默认的打印机。
- 不能同时打印多份。
优点
- 不用安装额外的库。
- 如果打印的精度较高的情况下,调用其他库打印的效果没有这种调用专门软件打印的效果好。
示例
代码语言:javascript复制/// <summary>
/// 调用打印机打印
/// </summary>
/// <param name="PDFPath">PDF文件路径</param>
/// <param name="PrinterName">打印机名称</param>
private void Print2(string PDFPath, string PrinterName)
{
PrintDocument pd = new PrintDocument();
Process p = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = true;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.UseShellExecute = true;
startInfo.FileName = PDFPath;
startInfo.Verb = "print";
Console.WriteLine("PrinterName:" PrinterName);
Console.WriteLine("pd.PrinterSettings.PrinterName", pd.PrinterSettings.PrinterName);
startInfo.Arguments = @"/p /h " PDFPath """" PrinterName """;
p.StartInfo = startInfo;
p.Start();
p.WaitForExit();
}
使用Spire.Pdf库打印
这种方式
缺点
- 需要引用库。
- 精度较高的文件打印的效果不好。
- 进度较高的文件在打印机队列里数据量太大,达到200-300多M。
优点
- 可以设置打印的数量及其他打印参数。
示例
代码语言:javascript复制/// <summary>
/// 调用打印机打印
/// </summary>
/// <param name="PDFPath">PDF文件路径</param>
/// <param name="PrinterName">打印机名称</param>
private void Print(string PDFPath, string PrinterName, short PrinterNum = 1)
{
Console.WriteLine("PDFPath:" PDFPath);
//PDFPath = "D:/123.pdf";
//加载PDF文档
PdfDocument doc = new PdfDocument();
doc.LoadFromFile(PDFPath);
//指定打印机
doc.PrintSettings.PrinterName = PrinterName;
//静默打印PDF文档
doc.PrintSettings.PrintController = new StandardPrintController();
////设置文档打印页码范围
//doc.PrintSettings.SelectPageRange(1, 5);
//打印不连续的页面
//doc.PrintSettings.SelectSomePages(new int[] { 1, 3, 5, 7 });
//设置打印份数为2份
doc.PrintSettings.Copies = PrinterNum;
doc.PrintSettings.PrinterResolutionKind = PdfPrinterResolutionKind.High;
//获取原文档第一页的纸张大小,这里的单位是Point
doc.PrintSettings.SelectSinglePageLayout(PdfSinglePageScalingMode.ActualSize, true);
//打印PDF文档
doc.Print();
}
使用PDFRender4NET打印
这一种和前面的方式优缺点一致
需要引用O2S.Components.PDFRender4NET.dll
代码语言:javascript复制using O2S.Components.PDFRender4NET;
private void Print3(string PDFPath, string PrinterName, short PrinterNum = 1)
{
PDFFile file = PDFFile.Open(PDFPath);
PrinterSettings settings = new PrinterSettings();
settings.PrinterName = PrinterName;
settings.PrintToFile = false;
//设置纸张大小(可以不设置,取默认设置)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)
{
PaperSize = ps,
PageScaling = O2S.Components.PDFRender4NET.Printing.PageScaling.FitToPrinterMarginsProportional
};
pdfPrintSettings.PrinterSettings.Copies = PrinterNum;
try
{
file.Print(pdfPrintSettings);
}
catch (Exception)
{
}
finally
{
file.Dispose();
}
}