我在使用 PDFSharp 库打印 PDF 时遇到问题。
我正在使用 PdfPage 类的 Stream 属性来绘制页面。但是,它显示空引用错误,因为流是空的。
我不明白为什么,因为pdf存在并且路径是正确的。
下面是代码:
`public static void PrintPdfWithPrintDocument(string pdfPath)
{
if (!System.IO.File.Exists(pdfPath))
{
MessageBox.Show("Not Found.");
return;
}
pdfDoc = Pdf.IO.PdfReader.Open(pdfPath, Pdf.IO.PdfDocumentOpenMode.Modify);
CurrentPage = 0;
PrintDocument prnPdf = new PrintDocument();
prnPdf.PrintPage += OnPrintPage;
PrintDialog ptdPrinter = new PrintDialog();
ptdPrinter.AllowSomePages = true;
ptdPrinter.Document = prnPdf;
if (ptdPrinter.ShowDialog() == DialogResult.OK)
{
prnPdf.PrinterSettings = ptdPrinter.PrinterSettings;
prnPdf.Print();
}
}
private static void OnPrintPage(object sender, PrintPageEventArgs e)
{
if (CurrentPage < pdfDoc.PageCount)
{
pdfPage = pdfDoc.Pages(CurrentPage);
pdfGraphics = XGraphics.FromPdfPage(pdfPage, XGraphicsUnit.Millimeter);
pdfGraphics.MUH = Pdf.PdfFontEncoding.Unicode;
PdfSharp.Pdf.PdfDictionary.PdfStream pdfStream = (PdfSharp.Pdf.PdfDictionary.PdfStream)pdfPage.Stream;
MemoryStream imageStream = new MemoryStream(pdfStream.Value);
XRect xRect = new XRect(0, 0, e.PageBounds.Width, e.PageBounds.Height);
pdfGraphics.DrawImage(XImage.FromStream(imageStream), xRect);
CurrentPage += 1;
e.HasMorePages = CurrentPage < pdfDoc.PageCount;
}
else
e.HasMorePages = false;
}`
我不想使用其他库或 Acrobat Reader
我尝试寻找其他方法从页面收集字节,但我还没有找到。
从哪里开始?
PDFsharp 常见问题解答指出您无法使用 PDFsharp 打印 PDF。
您创建一个可用于在要打印的页面上绘图的
prnPdf
。但你的代码没有在那里绘制任何东西。
您创建一个可用于修改 PDF 文件页面的
pdfGraphics
。这不是你的本意。
PDF 文件流很少包含可以由 Windows 加载并在任何地方绘制的图像文件。
可以选择使用 Adobe Reader 打印 PDF 文件,但 PDFsharp 则不然。