Открытие диалогового окна принтера - PullRequest
2 голосов
/ 02 декабря 2011

Я использую winnovative html в 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 Viewer / браузера.Но я хотел бы, чтобы моя страница открывала диалоговое окно принтера или отправляла байты непосредственно на принтер, чтобы минимизировать действия, которые должен выполнять пользователь.

Есть идеи?

Ответы [ 3 ]

1 голос
/ 02 декабря 2011

Поскольку вы используете потоковую передачу PDF, у вас ограниченные возможности.

Я думаю, что лучший способ - использовать этот подход: https://stackoverflow.com/a/2495430/293712. Откройте PDF в новом окне (которое это новое окноможет транслировать это).Затем вы можете потенциально вызвать window.print из родительского окна (если вы используете window.open, чтобы открыть его) и даже закрыть окно, когда закончите.

0 голосов
/ 08 сентября 2014

Вы можете фактически добавить код JavaScript Acrobat, который будет выполняться при открытии документа PDF в программе просмотра.Рабочий пример можно увидеть в Выполнить код JavaScript Acrobat при открытии документа. Демонстрацию при выборе параметра «Открыть диалоговое окно печати».Соответствующий код 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();
    }
}
0 голосов
/ 05 декабря 2011

Решил это сегодня утром, казалось просто глупой ошибкой.Конвертер winnovative имеет параметр для включения сценариев, который по умолчанию имеет значение false.Установка этого параметра в true позволила мне использовать javascript из pdf.

После прочтения предложенного мне поста я обнаружил, что в PDF должно быть возможно использовать javascriptПосле поиска еще, включая FAQ от winnovative, я добавил следующий код:

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

Затем сработал javascript внутри заголовка!

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