Открытие диалогового окна принтера
Я использую 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 ответа
Решил это сегодня утром, казалось просто глупой ошибкой. Конвертер 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>
Поскольку вы транслируете PDF, у вас есть ограниченные возможности.
Я думаю, что лучше всего использовать этот подход: /questions/43723513/mozhno-li-otkryit-dialogovoe-okno-pechati-pdf-fajla-s-pomoschyu-javascript/43723523#43723523. Откройте PDF-файл в новом окне (которое может быть передано этим новым окном). Затем вы можете потенциально вызвать window.print из родительского окна (если вы используете window.open, чтобы открыть его), и даже закрыть окно, когда закончите.
Вы действительно можете добавить код JavaScript Acrobat, который будет выполняться при открытии документа 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();
}
}