我无法使用 PdfSharp 打印 PDF

问题描述 投票:0回答:1

我在使用 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

我尝试寻找其他方法从页面收集字节,但我还没有找到。

c# pdf printing pdfsharp
1个回答
0
投票

从哪里开始?

PDFsharp 常见问题解答指出您无法使用 PDFsharp 打印 PDF。

您创建一个可用于在要打印的页面上绘图的

prnPdf
。但你的代码没有在那里绘制任何东西。

您创建一个可用于修改 PDF 文件页面的

pdfGraphics
。这不是你的本意。

PDF 文件流很少包含可以由 Windows 加载并在任何地方绘制的图像文件。

可以选择使用 Adobe Reader 打印 PDF 文件,但 PDFsharp 则不然。

© www.soinside.com 2019 - 2024. All rights reserved.