2009-06-10 12 views
24

Mam stronę internetową z osadzonym plikiem PDF. Mój kod wygląda następująco:Cichy wydruk osadzonego pliku PDF

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

Mam ten kod JavaScript do druku mojej 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(); 
    } 
} 

Gdy ten kod jest wykonywany Acrobat plug-in otwiera dobrze znanego dialogowym Drukuj. Coś takiego:

PrintDialog

Dwa pytania:

  • Jak poprawić sposób wykryć, że PDF jest załadowany i gotowy do druku?
  • Jak uniknąć wyświetlania okna dialogowego drukowania?

Nieco więcej informacji o moim systemie:

OS: Windows XP

Przeglądarka: Internet Explorer 7

PDF Plugin: Acrobat Reader 9

+0

@gideon z jakiegoś powodu to nie działa .... w IE8 FF lub chrom ... czyli podać szczegóły error stronie internetowej wiadomość: „null” jest null lub nie jest obiektem Line: 26 Char: 5 Kod: 0 URI: http: //localhost/mpdf/pdf.php jeśli mogę umieścić w pogotowiu() wewnątrz jeśli typeof alert nadal zachować pojawiały się nawet po załadowaniu dokumentu –

Odpowiedz

18

Nie będzie można drukować bezgłośnie ze zwykłym starym JavaScript. Jak chcesz, aby twoja drukarka zaczęła drukować 100000000 stron wszystkich czarnych. To nie jest dobra rzecz. Jeśli chcesz drukować w trybie cichym i działa tylko w przeglądarce Internet Explorer, istnieją formanty ActiveX, które mogą to zrobić. Wymaga to wyższych ustawień zabezpieczeń dla strony i dla użytkowników, aby naprawdę zaufali swojej witrynie.

+0

Dzięki, że dla intranetu korporacyjnego nie dla Internetu, muszą ufać! :-) Czy możesz wskazać mi ten ActiveX. Ocenię to. – sourcerebels

+0

Myślę, że jego punktem było to, że jeśli przeglądarka zezwala na ciche drukowanie, będzie to luka w zabezpieczeniach. Prawdopodobnie z założenia przeglądarka/wtyczka na to nie pozwala. – JohnFx

+0

Technologia zmieniła się nieco, odkąd to rozwiązanie zostało zaakceptowane. Oto kilka cichych rozwiązań do drukowania, z których niektóre mogą bezszelestnie drukować plik PDF według adresu URL dokładnie zgodnie z żądaniem. http://stackoverflow.com/questions/27057816 – tresf

1

Zastanawiam się, czy rzeczywiście trzeba poczekać przed drukowaniem - czy zadanie drukowania nie obsłuży tego dla ciebie? I naprawdę mam nadzieję, że żadna nowoczesna przeglądarka nie pozwoli ci (ani żadnej innej strony internetowej) drukować bez tego okna dialogowego potwierdzenia (dawne dawne stare przeglądarki).

+0

Hi Arjan, Dziękuję za szybką odpowiedź. Jeśli zadzwonię do metody .print przed załadowaniem pliku PDF, otrzymuję komunikat JavaScript o treści "ta metoda nie jest dozwolona dla tego obiektu" (komunikat o błędzie pojawia się w języku hiszpańskim). Na twoim drugim aprecjacji Myślę, że PDF nie jest drukowany przez przeglądarkę jest wydrukowany przez wtyczkę Acrobata :-) – sourcerebels

+0

Ale ta wtyczka może być obecna w czyjejś przeglądarce, prawda? Jeśli tak, to nie oczekuję, że potwierdzenie zniknie. Czy zdarzenie onload dla elementu body jest uruchamiane przed załadowaniem pliku PDF? – Arjan

+0

Oh, wydaje mi się, że Internet Explorer obsługuje również funkcję onload() do osadzania: http://msdn.microsoft.com/en-us/library/cc197055 (VS.85).aspx – Arjan

1

Możesz to zrobić w Firefoksie, zmieniając about:config. Dodaj print.always_print_silent i ustaw go na true.

4

Jest to możliwe w zaufanym środowisku intranetowym.

<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();" /> 

to ominie okno drukowania i wysłać bezpośrednio do drukarki domyślnej.

+5

Nie mogłem uzyskać tej metody do pracy w FF lub Safari. Czy to tylko IE? – Karl

+0

Dziękuję milion razy. Działa bezbłędnie w IE9. Uratowałeś mnie!!! –