使用C#打印PDF文件
可以使用C#或VB.net在.NET应用程序中自动打印PDF文件。您可以按照以下简单步骤打印PDF文件:
- 创建一个PdfViewer类的对象
- 加载输入的PDF文档
- 打印PDF文件
下面的代码段显示了如何使用C#打印PDF文件:
//Create PdfViewer object
PdfViewer viewer = new PdfViewer();
//Open input PDF file
viewer.BindPdf(dataDir + "Test.pdf");
//Print PDF document
viewer.PrintDocument();
//Close PDF file
viewer.Close();
使用C#打印多个PDF文件
如果由于业务性质需要打印多个文件,则Aspose.PDF for .NET API已支持该功能。使用上面的代码片段一个接一个地打印多个PDF文件可能会有点慢。因此,让我们将PDF打印再进一步迈出一步,以简化流程。在这里,我们将使用列表,同时将每个PDF文件的名称添加到该列表中。以下步骤说明了我们将如何打印多个PDF文件:
- 初始化字符串类型列表
- 将PDF文件添加到列表
- 加载输入PDF文件
- 打印多个PDF文件
该代码段显示了如何使用C#打印多个PDF文件:
var files = new List();
files.Add(dataDir + "First.pdf");
files.Add(dataDir + "Second.pdf");
foreach (String file in files)
{
//Create PdfViewer object
PdfViewer viewer = new PdfViewer();
//Open input PDF file
viewer.BindPdf(file);
//Print PDF document
viewer.PrintDocument();
//Close PDF file
viewer.Close();
}
使用C#打印PDF的特定页面
API中提供了打印PDF文档特定页面的功能。我们将考虑一个示例,其中包括打印多个页面范围。您需要按照以下步骤中的说明指定起始和结束页码:
- 设置文件输入和输出路径
- 通过定义范围来设置特定页面的打印
- 指定打印参数
- 打印以前指定的页面
下面的代码段显示了如何使用C#打印文档的特定页面:
string inPdf = dataDir + "Test.pdf";
string output = dataDir;
IListprintingJobs = new List();
PrintingJobSettings printingJob1 = new PrintingJobSettings();
printingJob1.FromPage = 2;
printingJob1.ToPage = 3;
printingJobs.Add(printingJob1);
PrintingJobSettings printingJob2 = new PrintingJobSettings();
printingJob2.FromPage = 5;
printingJob2.ToPage = 7;
printingJobs.Add(printingJob2);
{
for (var printingJobIndex = 0; printingJobIndex<printingJobs.Count; printingJobIndex++)
{
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
ps.PrinterName = "Microsoft Print to PDF";
ps.PrintRange = System.Drawing.Printing.PrintRange.SomePages;
ps.FromPage = printingJobs[printingJobIndex].FromPage;
ps.ToPage = printingJobs[printingJobIndex].ToPage; System.Console.WriteLine(ps.FromPage);
System.Console.WriteLine(ps.ToPage); System.Console.WriteLine(printingJobIndex);
using (var theViewer = new Aspose.Pdf.Facades.PdfViewer())
{
// Document printing code goes here // Print document using printer and page settings theViewer.BindPdf(inPdf);
theViewer.AutoResize = true;
theViewer.AutoRotate = true;
theViewer.PrintPageDialog = false;
theViewer.PrintDocumentWithSettings(pgs, ps);
theViewer.Close();
}
}
}
使用C#打印安全的PDF文件
PDF文件可以用密码保护和保护。但是,密码可以有两种类型,即用户密码和所有者密码。使用用户密码保护的PDF文件需要密码才能打开和查看加密的PDF文件。另一方面,需要所有者密码来修改受保护和受密码保护的PDF文件的内容。以下步骤说明了安全PDF的打印:
- 使用密码加载受保护的PDF
- 创建PdfViewer对象
- 打印安全的PDF文件
以下代码段显示了如何使用C#打印受保护的PDF文件:
//Load secure PDF document while specifying User or Owner password
Document document = new Document(dataDir + "Password.pdf" , "userORowner");
//Create PdfViewer object
PdfViewer viewer = new PdfViewer();
//Open input PDF file
viewer.BindPdf(document);
//Print PDF document
viewer.PrintDocument();
//Close PDF file
viewer.Close();
使用C#将PDF打印到打印机的特定纸盘
使用Aspose.PDF for .NET API将PDF打印到特定的纸盒。例如,您可能希望将包含大量照片的PDF打印到另一个纸盒,将文本PDF文件打印到另一个纸盒。请按照以下步骤设置用于打印PDF文件的出纸盘或纸槽:
- 加载输入PDF文件
- 设置打印属性
- 指定PageSettings和PaperSource
- 调用 PrintDocumentWithSettings方法
这里值得注意的是,您可以更改打印机的名称。在这里,我们将使用Microsoft Print to PDF作为示例。以下代码段遵循以下步骤,并说明如何使用C#将文档打印到特定的纸盒或打印机的纸槽中:
Document doc = new Document("Test.pdf");
PdfViewer viewer = new PdfViewer();
viewer.BindPdf(doc);
viewer.PrinterJobName = System.IO.Path.GetFileName(doc.FileName);
viewer.Resolution = 110;
// Set attributes for printing
viewer.AutoResize = true; // Print the file with adjusted size
viewer.AutoRotate = false; // Print the file with adjusted rotation
viewer.PrintPageDialog = false; // Do not produce the page number dialog when printing
viewer.RenderingOptions.UseNewImagingEngine = true;
// Create objects for printer and page settings and PrintDocument
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
// Set printer name
ps.PrinterName = "Microsoft Print to PDF";
pgs.PaperSize = new System.Drawing.Printing.PaperSize(paperTypeName, paperWidth, paperHeight);
pgs.Margins = new System.Drawing.Printing.Margins(margins.Left, margins.Right, margins.Top, margins.Bottom);
pgs.PaperSource = GetPaperSource(printerName, trayName);
// Print document using printer and page settings
viewer.PrintDocumentWithSettings(pgs, ps);
// Return the PaperSource object for the provided printer and tray name.
public static System.Drawing.Printing.PaperSource GetPaperSource(string printerName, string trayName)
{
System.Drawing.Printing.PaperSource ps = null;
System.Drawing.Printing.PrintDocument prtDoc = new System.Drawing.Printing.PrintDocument();
prtDoc.PrinterSettings.PrinterName = printerName;
for (int i = 0; i < prtDoc.PrinterSettings.PaperSources.Count; i++) { if (prtDoc.PrinterSettings.PaperSources[i].SourceName.ToLower().Equals(trayName.ToLower())) { ps = prtDoc.PrinterSettings.PaperSources[i]; break; } } return ps; }
使用C#将页面范围打印到不同的纸张来源
在某些情况下,您可能需要将一个PDF文档的不同页面打印到不同的纸盒或纸槽中。例如,封面的纸张来源不同,其他页面的纸张来源不同。您当然可以按照以下步骤在同一打印作业中将页面范围打印到不同的纸张来源:
- 初始化PdfViewer类的对象
- 使用PdfQueryPageSettings事件处理程序委托
- 设置页面和打印机设置
- 调用PrintDocumentWithSettings方法
以下代码段显示了如何执行以下步骤,以及如何使用C#将不同的页面范围打印到不同的纸张来源或纸盘:
Aspose.Pdf.Facades.PdfViewer pdfv = new Aspose.Pdf.Facades.PdfViewer();
pdfv.PdfQueryPageSettings += PdfvOnPdfQueryPageSettings;
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
System.Drawing.Printing.PrinterSettings prin = new System.Drawing.Printing.PrinterSettings();
pdfv.BindPdf(dataDir + "Print-PageRange.pdf");
prin.PrinterName = "HP LaserJet M9050 MFP PCL6";
prin.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
Aspose.Pdf.Facades.PdfPageEditor pageEditor = new Aspose.Pdf.Facades.PdfPageEditor();
pageEditor.BindPdf(dataDir + "input.pdf");
pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
pgs.PaperSize = prin.DefaultPageSettings.PaperSize;
pdfv.PrintDocumentWithSettings(pgs, prin);
pdfv.Close();
private static void PdfvOnPdfQueryPageSettings(object sender, System.Drawing.Printing.QueryPageSettingsEventArgs queryPageSettingsEventArgs, PdfPrintPageInfo currentPageInfo)
{
bool isOdd = currentPageInfo.PageNumber % 2 != 0;
System.Drawing.Printing.PrinterSettings.PaperSourceCollection paperSources = queryPageSettingsEventArgs.PageSettings.PrinterSettings.PaperSources;
if (isOdd)
queryPageSettingsEventArgs.PageSettings.PaperSource = paperSources[0];
else
queryPageSettingsEventArgs.PageSettings.PaperSource = paperSources[1];
使用C#打印PDF时检查打印作业状态
可以将PDF文件打印到其他打印机。例如,Microsoft Print to PDF,Microsoft XPS Document Writer或任何物理打印机。但是,大型PDF文档的打印可能会花费很长时间,或者由于某种原因打印可能会失败。因此,API提供了一项功能,可让您通过以下步骤检查打印作业的状态:
- 加载输入PDF文件
- 指定页面设置
- 设置打印机名称
- 使用PrintDocumentWithSettings打印PDF文档
下面的代码片段显示了如何使用C#检查打印作业状态或PDF的打印进度:
// Instantiate PdfViewer object
PdfViewer viewer = new PdfViewer();
// Bind source PDF file
viewer.BindPdf(dataDir + "Sample Document with Bookmark.pdf");
viewer.AutoResize = true;
// Hide printing dialog
viewer.PrintPageDialog = false;
// Create Printer Settings object
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
System.Drawing.Printing.PrintDocument prtdoc = new System.Drawing.Printing.PrintDocument();
// Specify the printer anme
//ps.PrinterName = "Microsoft XPS Document Writer";
ps.PrinterName = "Microsoft Print to PDF";
// Resultant Printout name
//ps.PrintFileName = "ResultantPrintout.xps";
ps.PrintFileName = "ResultantPrintout.pdf";
// Print the output to file
ps.PrintToFile = true;
ps.FromPage = 1;
ps.ToPage = 2;
ps.PrintRange = System.Drawing.Printing.PrintRange.SomePages;
// Specify the page size of printout
pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
ps.DefaultPageSettings.PaperSize = pgs.PaperSize;
pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
// Print the document with settings specified above
viewer.PrintDocumentWithSettings(pgs, ps);
// Check the print status
if (viewer.PrintStatus != null)
{
// An exception was thrown
Exception ex = viewer.PrintStatus as Exception;
if (ex != null)
{
// Get exception message
}
}
else
{
// No errors were found. Printing job has completed successfully
Console.WriteLine("printing completed without any issue..");
}