e.PageNumber 找不到属性
时间: 2023-10-22 16:49:57 浏览: 126
抱歉,我之前给出的代码中确实有错误。在 `PrintPage` 事件处理程序中,`PrintPageEventArgs` 对象并没有 `PageNumber` 属性可用。
如果您想要打印多页的 PDF 文件,可以使用一个全局的变量来跟踪当前打印的页面索引。以下是经过修正的代码示例:
```csharp
using System;
using System.Drawing;
using System.Drawing.Printing;
using System.IO;
public class PdfPrinter
{
private static int currentPageIndex = 0;
public static void PrintPdfFile(string pdfFilePath, string printerName)
{
PrintDocument printDoc = new PrintDocument();
printDoc.PrinterSettings.PrinterName = printerName;
printDoc.PrintPage += PrintPageHandler;
PrintController printController = new StandardPrintController();
printDoc.PrintController = printController;
printDoc.DocumentName = Path.GetFileName(pdfFilePath);
printDoc.Print();
}
private static void PrintPageHandler(object sender, PrintPageEventArgs e)
{
string pdfFilePath = ((PrintDocument)sender).DocumentName;
using (FileStream fileStream = new FileStream(pdfFilePath, FileMode.Open, FileAccess.Read))
{
Image pdfImage = Image.FromStream(fileStream);
e.Graphics.DrawImage(pdfImage, e.MarginBounds);
currentPageIndex++;
if (currentPageIndex < pdfImage.GetFrameCount(FrameDimension.Page))
{
e.HasMorePages = true;
}
else
{
e.HasMorePages = false;
currentPageIndex = 0; // 重置页面索引
}
}
}
}
```
在修正后的代码中,我们添加了一个 `currentPageIndex` 变量来跟踪当前打印的页面索引。在每个打印页面时,我们递增页面索引,并检查是否还有更多页面需要打印。如果有更多页面,我们将 `HasMorePages` 属性设置为 `true`,以便触发下一个 `PrintPage` 事件来打印下一页。如果所有页面都已打印完毕,我们将 `HasMorePages` 属性设置为 `false`,并将当前页面索引重置为0。
希望这次能为您提供正确的信息。如果您还有任何问题,请随时提问。
阅读全文