2010-03-07 3 views
5

Я хочу, чтобы у меня была кнопка, позволяющая просто распечатать определенную часть моего приложения dojo/dijit. По всей видимости, существует общая нехватка документации и примеров, когда дело доходит до печати.dojo/dijit and Printing

Например, у меня есть определенный dijit.layout.ContentPane, который содержит содержимое, которое я хотел бы распечатать, но я бы не хотел печатать остальную часть документа. Я видел несколько простых примеров JavaScript в Интернете, где node.innerHTML читается в «скрытом» iframe, а затем печатается оттуда. Я подозреваю, что это сработает, но мне было интересно, был ли еще более ориентированный на доджо подход к печати.

Любые мысли?

ответ

1

Я решил пойти по пути чтения в и печати оттуда, но потому что я использую обработанную поверхность dojox.gfx, прямое чтение из целевой ContentPane в невидимый iframe не работает корректно в некоторых браузерах. Таким образом, я устанавливаю «src» iframe на страницу, которая повторно отображает диаграмму, а затем печатает себя, когда она закончена. В основном документе это выглядит примерно так:

<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> 

И тогда страница делает необходимый додзё материал, чтобы перерисовал схему, а затем, как только он будет загружен это делает:

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

Что тогда следует через печать.

+0

Только что наткнулся на это. Я думаю, что рамки уже не в моде. Просто предупреждение для всех, кто это находит. – ZMorek

0

Одним из решений могло бы стать создание на печать только таблицу стилей в то время как первое правило скрывается все по умолчанию:

body { 
    display: none; 
} 

Затем второе правило CSS, а также в вашей печати только таблицы стилей, отображается только Dojo панель содержимого:

#contentPaneId { 
    display: block; 
} 

додзё ContentPane ID должен соответствовать тому, что вы используете для #contentPaneId в CSS.

Наконец, вы можете инструктировать браузеры, что это печать только CSS файл, используя media="print" в вашем link тег:

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

Я должен добавить, что правило CSS «display: none» заставит макет заполнить место, где раньше был элемент. Правило «видимость: скрытое» оставит размеры элемента в макете, но скрыть элемент. – Abboq

+2

Мы говорим о приложении, которое может легко иметь 100 разных классов, из которых я не контролирую напрямую, потому что я использую фреймворк. Хотя он идеален, он не практичен и не очень додзецентричен. – Kitson

+0

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