打开打印机对话框

本文关键字:对话框 打印机 | 更新日期: 2023-09-27 18:16:22

我正在使用winnovative html to pdf转换器来创建pdf文档。我添加了一个复选框,供用户选择是打印还是通过电子邮件发送pdf文件。

但是我无法从pdf页面打开打印机对话框。我尝试过PrinterDialog类,但这不起作用,也发送一些javascript与window.print()不起作用。我已经在网上搜索过了,但是什么也找不到。

包含PDF的页面有以下代码:

Response.Clear();
Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Disposition", "inline;filename=Offerte.pdf");
Response.BufferOutput = true;
Response.AddHeader("Content-Length", downloadBytes.Length.ToString());
Response.BinaryWrite(downloadBytes); //downloadBytes = the byte array created by winnovative converter
Response.End();

这将打开浏览器中的pdf查看器,其中包含我的页面为pdf。从这里,用户可以单击pdf查看器/浏览器的打印按钮。但是我想让我的页面打开打印机对话框或直接发送字节到打印机,以尽量减少用户必须做的动作。

任何想法?

打开打印机对话框

由于你是流式传输PDF,你有有限的选项。

我认为最好的方法是使用这个方法:https://stackoverflow.com/a/2495430/293712。在一个新窗口中打开PDF(这个新窗口可以流式传输)。然后可以调用window。从父窗口打印(如果使用window。打开(打开),甚至在完成时关闭窗口。

今天早上解决了,看起来只是一个愚蠢的错误。创新转换器有一个用于启用脚本的参数,默认设置为false。将此设置为true使我可以在pdf中使用javascript。

在阅读了给我的建议后,我发现在PDF中使用javascript是可能的。在搜索了更多内容,包括wininnovative的FAQ之后,我添加了以下代码:

pdfConverter.ScriptsEnabled = true;
pdfConverter.ScriptsEnabledInImage = true;
pdfConverter.InternetSecurityZone = InternetSecurityZone.LocalMachine;

然后标题内的javascript工作了!

<script type="text/javascript">
window.print();
</script>

实际上可以添加一个Acrobat JavaScript代码,以便在查看器中打开PDF文档时执行。当您选择"打开打印对话框"选项时,您可以在"打开文档时执行Acrobat JavaScript代码"演示中看到一个工作示例。下面复制了该演示中的相关c#代码:

protected void convertToPdfButton_Click(object sender, EventArgs e)
{
    // Create a HTML to PDF converter object with default settings
    HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();
    // Set license key received after purchase to use the converter in licensed mode
    // Leave it not set to use the converter in demo mode
    htmlToPdfConverter.LicenseKey = "fvDh8eDx4fHg4P/h8eLg/+Dj/+jo6Og=";
    Document pdfDocument = null;
    try
    {
        // Convert a HTML page to a PDF document object
        pdfDocument = htmlToPdfConverter.ConvertUrlToPdfDocumentObject(urlTextBox.Text);
        string javaScript = null;
        if (alertMessageRadioButton.Checked)
        {
            // JavaScript to display an alert mesage 
            javaScript = String.Format("app.alert('"{0}'")", alertMessageTextBox.Text);
        }
        else if (printDialogRadioButton.Checked)
        {
            // JavaScript to open the print dialog
            javaScript = "print()";
        }
        else if (zoomLevelRadioButton.Checked)
        {
            // JavaScript to set an initial zoom level 
            javaScript = String.Format("zoom={0}", int.Parse(zoomLevelTextBox.Text));
        }
        // Set the JavaScript action
        pdfDocument.OpenAction.Action = new PdfActionJavaScript(javaScript);
        // Save the PDF document in a memory buffer
        byte[] outPdfBuffer = pdfDocument.Save();
        // Send the PDF as response to browser
        // Set response content type
        Response.AddHeader("Content-Type", "application/pdf");
        // Instruct the browser to open the PDF file as an attachment or inline
        Response.AddHeader("Content-Disposition", String.Format("attachment; filename=Execute_Acrobat_JavaScript.pdf; size={0}", outPdfBuffer.Length.ToString()));
        // Write the PDF document buffer to HTTP response
        Response.BinaryWrite(outPdfBuffer);
        // End the HTTP response and stop the current page processing
        Response.End();
    }
    finally
    {
        // Close the PDF document
        if (pdfDocument != null)
            pdfDocument.Close();
    }
}