2009-06-10 6 views
24

У меня есть веб-страница со встроенным PDF-файлом. Мой код выглядит следующим образом:Тихая печать встроенного PDF

<embed 
    type="application/pdf" 
    src="path_to_pdf_document.pdf" 
    id="pdfDocument" 
    width="100%" 
    height="100%"> 
</embed> 

У меня есть этот яваскрипта код для печати PDF мой:

function printDocument(documentId) { 

    //Wait until PDF is ready to print  
    if (typeof document.getElementById(documentId).print == 'undefined') { 

     setTimeout(function(){printDocument(documentId);}, 1000); 

    } else { 

     var x = document.getElementById(documentId); 
     x.print(); 
    } 
} 

Когда этот код выполняется Acrobat Плагин открывает известный диалог печати. Что-то вроде этого:

PrintDialog

Два вопроса:

  • Как улучшить способ обнаружения, что PDF загружен и готов к печати?
  • Как избежать отображения диалогового окна печати?

Немного подробнее о моей системе:

OS: Windows XP

Browser: Internet Explorer 7

PDF Plugin: Acrobat Reader 9

+0

@gideon по какой-то причине это не работает .... в IE8 фф или хром ... т.е. дают ошибку Webpage сведения об ошибке Сообщение: «нулевой» равно нулю или не является объектом Line: 26 Char: 5 Код: 0 URI : HTTP: //localhost/mpdf/pdf.php если я положил в боевой готовности() в случае TypeOf предупреждение продолжает держать выскакивают даже после загрузки документа –

ответ

18

Вы не сможете печатать тихо с помощью обычного старого JavaScript. Как бы вы хотели, чтобы ваш принтер начал печатать 100000000 страниц всего черного. Нехорошо. Если вы хотите печатать тихо и работать только для Internet Explorer, есть элементы управления ActiveX, которые могут это сделать. Это требует более высоких настроек безопасности для вашей страницы и для ваших пользователей, которые действительно доверяют вашему сайту.

+0

Спасибо, за корпоративную интрасеть не за Интернет, они должны доверять! :-) Можете ли вы указать мне на этот ActiveX. Я буду его оценивать. – sourcerebels

+0

Я думаю, его точка зрения заключалась в том, что если бы браузер разрешил тихую печать, это была бы дыра в безопасности. Таким образом, по дизайну, вероятно, браузер не сможет этого сделать. – JohnFx

+0

Технология изменилась совсем немного, так как это решение было принято. Вот некоторые бесшумные решения для печати, некоторые из которых могут тихо печатать PDF по URL точно в соответствии с запросами. http://stackoverflow.com/questions/27057816 – tresf

1

Интересно, действительно ли вам нужно дождаться печати - Не будет ли для вас задания на печать? И я действительно надеюсь, что ни один современный браузер не позволит вам (или любому веб-сайту) печатать без этого диалогового окна подтверждения (некоторые старые браузеры использовали это, давным-давно).

+0

Привет Арьян, Спасибо за ваш быстрый ответ. Если я вызову метод .print перед загрузкой файла PDF, я получаю Javascript-ошибку, например, «этот метод не разрешен для этого объекта» (я получаю сообщение об ошибке на испанском языке). На ваш второй отзыв я думаю, что PDF не печатается браузером, который печатается плагином Acrobat :-) – sourcerebels

+0

Но этот плагин может присутствовать в любом браузере, не так ли? Если да, то я не ожидаю, что подтверждение исчезнет. Выполняется ли событие onload для элемента body перед загрузкой вашего PDF-файла? – Arjan

+0

О, мне кажется, что Internet Explorer поддерживает onload() для встраивания: http://msdn.microsoft.com/en-us/library/cc197055(VS.85).aspx – Arjan

1

Вы можете сделать это в Firefox, изменив about:config. Добавьте print.always_print_silent и установите его на true.

4

Это возможно в надежной среде интрасети.

<object id="pdfDoc" style="position:absolute;z-index:-1;" name="pdfDoc" classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="900px" height="100%"> 
     <param name="SRC" value="yourdoc.pdf" /> 
    </object> 

<input type="button" ... onclick="pdfDoc.printAll();" /> 

Это обходит диалоговое окно печати и отправляет непосредственно на принтер по умолчанию.

+5

Мне не удалось заставить этот метод работать в FF или Safari. Это только IE? – Karl

+0

Спасибо миллион раз. Он работает безупречно в IE9. Вы спасли меня!!! –