【问题标题】:How to print a PDF file stored in MemoryStream or PdfDocument or PdfPage object to a printer?如何将存储在 MemoryStream 或 PdfDocument 或 PdfPage 对象中的 PDF 文件打印到打印机?
【发布时间】:2016-03-21 15:01:43
【问题描述】:

我正在使用Essential Objects 将 HTML 文件转换为 PDF,它运行良好,我可以使用以下方法将 PDF 保存到硬盘。

HtmlToPdf.ConvertUrl(htmlFileName, outputFileName);

除了将其转换为文件外,它还可以将其转换为任何 .NET Stream 对象。例如,您可以将其转换为MemoryStream 对象,然后从 MemoryStream 中检索 PDF 文件的原始字节并将其附加到电子邮件或任何其他用途,完全无需使用以下方法创建任何物理文件.

HtmlToPdf.ConvertHtml(htmlCode, memoryStream or pdfDocument or pdfPage);

现在我的问题是如何将存储在MemoryStreamPdfDocumentPdfPage 中的PDF 文件打印到打印机上?

【问题讨论】:

    标签: c# pdf printing


    【解决方案1】:

    看看PrintDocument,它是在 c# 中打印时要走的路。引用 msdn 网站

    通常,您会创建 PrintDocument 类的实例,设置 DocumentName 和 PrinterSettings 等属性,然后调用 Print 方法来启动打印过程。使用 PrintPageEventArgs 的 GraphicsGraphics 属性处理您指定要打印的输出的 PrintPage 事件。

    【讨论】:

    • 我已经在内存中创建了一个 pdf 文件,所以我无法使用 PrintDocument 提供的 Graphics 对象打印它!图形对象仅用于绘制图形和字符串,不用于pdf文件。
    【解决方案2】:

    也许这个方法会有帮助。

        public void Print(string printerName, string fileName)
        {
            if (String.IsNullOrEmpty(fileName))
                return;
    
            var url = fileName;
            var filePath = String.Format(@"{0}\{1}.pdf", Application.StartupPath, Guid.NewGuid().ToString());
    
            using (var client = new WebClient())
            {
                client.Proxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
                client.DownloadFile(url, filePath);
            }
    
            if (String.IsNullOrEmpty(Form1.SelectedPrinter))
                return;
    
            PrintDocument pdoc = new PrintDocument();
    
            pdoc.DefaultPageSettings.PrinterSettings.PrinterName = printerName;
            pdoc.DefaultPageSettings.Landscape = true;
            pdoc.DefaultPageSettings.PaperSize.Height = 140;
            pdoc.DefaultPageSettings.PaperSize.Width = 104;
    
    
            try
            {
                ProcessStartInfo gsProcessInfo;
                Process gsProcess;
    
                gsProcessInfo = new ProcessStartInfo();
                gsProcessInfo.Verb = "PrintTo";
                gsProcessInfo.CreateNoWindow = true; //The default is false.
                gsProcessInfo.WindowStyle = ProcessWindowStyle.Hidden;
                gsProcessInfo.FileName = filePath;
                gsProcessInfo.Arguments = "\"" + printerName + "\"";
                gsProcess = Process.Start(gsProcessInfo);
                gsProcess.WaitForExit(4000);
                if (gsProcess.HasExited == false)
                {
                    gsProcess.Kill();
                }
                gsProcess.EnableRaisingEvents = true;
    
                gsProcess.Close();
            }
            catch (Exception)
            {
            }
        }
    

    【讨论】:

      【解决方案3】:

      您可以使用来自HiQPdf library 的 PdfPrinter 类将 PDF 文档打印到打印机:

      PdfPrinter pdfPrinter = new HiQPdf.PdfPrinter();
      pdfPrinter.PrintPdf(pdfStream);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-01
        • 2011-12-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多