У меня есть решение для печати объектов ExtJS, которое отлично подходит для всего, кроме диаграмм.
Я использовал @media print
подсказку CSS для создания div для печати под моим окном просмотра (чтобы он не отображался на экране, но это единственный элемент, который печатается, когда пользователь нажимает кнопку печати).
Я делаю это для того, чтобы контролировать пропорциональные размеры объекта, чтобы он хорошо умещался на странице, и чтобы я мог удалить «непечатаемые» элементы, такие как панели инструментов. Когда я хочу напечатать объект ExtJS из своего приложения, я добавляю его в этот «печатный» div и затем вызываю document.print
.
CSS для div выглядит так:
@media print {
@page {size: landscape}
body * {
visibility: hidden;
}
.printer, .printer * {
visibility: visible;
}
.printer {
overflow: visible;
position: absolute;
left: 0;
top: 0;
}
}
Это отлично работает для сеток, форм и других объектов ExtJS.
Теперь мне нужно настроить его для печати некоторых диаграмм, но я получаю сообщение об ошибке «Ошибка выполнения макета» всякий раз, когда я добавляю диаграммы в свой div принтера - диаграмма вообще не создается. Я почти уверен, что это связано с тем, что div принтера на самом деле не отображается на экране, а диаграмма выстраивается в зависимости от того, как она видна.
Другие элементы (например, сетки и формы), похоже, не заботятся о том, видны ли они на экране для создания макета, поэтому мне было интересно, есть ли способ переопределить это требование для объекта диаграммы? Или это неразрывно закопано в коде диаграммы? Для меня это было бы идеальным обращением, потому что мне не пришлось бы менять свой печатающий механизм.
Кто-нибудь знает возможно ли это?
Вместо этого я мог бы создавать версии диаграмм для печати внутри объекта Ext.window.Window
пропорционального размера, который также имеет мой класс printer
. Он будет виден во время создания макета (около секунды), а затем будет скрыт сразу после того, как я вызову document.print
, но, очевидно, это не так прозрачно.
@EvanTrimboli, это основная проблема, которую я пытался решить с помощью того другого вопроса .