2010-03-07 19 views
5

Chcę być w stanie zapewnić przycisk do moich użytkowników, aby wydrukować konkretną część mojej aplikacji dojo/dijit. Wydaje się, że istnieje ogólny brak dokumentacji i przykładów, jeśli chodzi o drukowanie.dojo/dijit i drukowanie

Na przykład mam konkretną dijit.layout.ContentPane, która zawiera treść, którą chciałbym wydrukować, ale nie chciałbym drukować pozostałej części dokumentu. Widziałem kilka czystych przykładów kodu JavaScript w Internecie, gdzie node.innerHTML jest odczytywany w "ukrytym" elemencie iframe, a następnie drukowany. Podejrzewam, że to zadziała, ale zastanawiałem się, czy istnieje bardziej skoncentrowane na dojo podejście do drukowania.

Jakieś myśli?

Odpowiedz

1

zdecydowałem się zejść ścieżką czytania w i drukowanie z tam, ale ponieważ używam renderowanej powierzchni dojox.gfx, bezpośredni odczyt z docelowej zawartości do niewidocznego elementu iframe nie działał poprawnie w niektórych przeglądarkach. To, co robię, ustawia "src" elementu iframe na stronie, która ponownie renderuje diagram, a następnie wypisuje się po zakończeniu. W dokumencie głównym wygląda mniej więcej tak:

<iframe id="printIFrame4" src="#" style="width: 0px; height:0px; 
    border: none; background: transparent"></iframe> 
<button dojoType="dijit.form.Button" style="margin-top: -3px;" id="buttonPrintMap4"> 
    Print... 
    <script type="dojo/method" event="onClick" args="event"> 
    dojo.byId("printIFrame4").src = "logmap/docMap.php?id=4"; 
    </script> 
</button> 

I wtedy strona ma niezbędną dojo rzeczy do redrew schemat, a następnie po jej załadowaniu robi:

this.focus(); 
this.print(); 

Które potem następuje poprzez drukowanie.

+0

Natknąłem się na to. Myślę, że ramy nie są już w modzie. Tylko ostrzeżenie dla każdego, kto to znajdzie. – ZMorek

0

Jednym rozwiązaniem byłoby utworzenie wydruku tylko stylów, podczas gdy pierwsza zasada ukrywa wszystko domyślnie:

body { 
    display: none; 
} 

Następnie druga reguła CSS, także w druku tylko stylów, wyświetla tylko dojo zawartość szyba:

#contentPaneId { 
    display: block; 
} 

dojo ContentPane ID musi odpowiadać co używasz do #contentPaneId w CSS.

Wreszcie, można poinstruować przeglądarkę, że jest to wydruk tylko plik CSS za pomocą media="print" w link tagu:

<link rel="stylesheet" type="text/css" href="printOnly.css" media="print"/> 
+1

Powinienem dodać, że zasada CSS "display: none" wymusi wypełnienie layoutu miejsca, w którym był poprzednio. Reguła "widoczność: ukryta" pozostawi wymiary elementu w układzie, ale ukryje element. – Abboq

+2

Mówimy o aplikacji, która może łatwo mieć setki różnych klas, których nie kontroluję bezpośrednio, ponieważ korzystam z frameworka. Chociaż jest idealny, nie jest praktyczny i nie jest bardzo skoncentrowany na dojo. – Kitson

+0

Edytowałem moją oryginalną odpowiedź, aby zapewnić metodę, która używa identyfikatorów zamiast klas i powinna być mniej pracy niż zmiana wszystkich tych klas. – Abboq