Печать пакета отчетов из браузера?
есть пакет (6 отдельных листов форматированного текста в html) документов, который необходимо распечатать из браузера по нажатию кнопки (php, javascript) желательно в "один заход".
Плюс к этому, некоторые листы пакета необходимо распечатать в двух экземплярах.
Пытался использовать следующий скрипт:
function printPage() {
var prnWnd = open("", "prnWindow", "status=yes,toolbar=yes,menubar=yes");
prnWnd.document.open();
prnWnd.document.write('<html><head><title>Print...</title>');
prnWnd.document.write("</head><body>");
// печатаем содержимое динамической страницы
// как prnWnd.document.write(...):
prnWnd.document.write("</body></html>");
prnWnd.document.close();
prnWnd.print();
prnWnd.close();
return false;
}
</script>
И еще - возможно ли отключить окно выбора принтера при печати? Чтобы оно не выскакивало каждый раз при печати одного листа.
[html]
<style type="text/css" media="all">
// blah-blah-blah
</style>
[/html]
и посмотри, какие еще значения атрибута media бывают. вроде бы printer и еще что-то :)
Диалог печати выключить никак не удастся.
[html]
<style type="text/css" media="all">
// blah-blah-blah
</style>
[/html]
и посмотри, какие еще значения атрибута media бывают. вроде бы printer и еще что-то :)
Хм.. А в какую часть "моего" скрипта вставить таблицу стилей? Непонятно вот что - вычитал про объект document следующее:
Т.о. получается, что document.write пишет только в <body> и все, добавленное "выше" <body> в страницу не добавляется.. Собственно так оно и получается.. :(
И что писАть вместо "// blah-blah-blah"? Свою табл. стилей? В принципе, я такое пробовал, за исключением того, что стиль описывал не так - "<style type="text/css" media="all">", а просто копировал типа так:
<!--
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:'Times New Roman';}
p.ConsNormal, li.ConsNormal, div.ConsNormal
{margin-top:0cm;
margin-right:988.6pt;
margin-bottom:0cm;
margin-left:0cm;
margin-bottom:.0001pt;
text-indent:36.0pt;
text-autospace:none;
font-size:10.0pt;
font-family:Arial;}.....
P.S. Дело еще в том, что в javascript я совсем "зеленый", да и html тоже "ручками" очень мало писал (в-основном из Dreamweaver-а).. Посему заранее извиняюсь за ламерские вопросы.. :(
Странно.. У меня не пашет.. Не видит стили, хоть лопни! :( И в <body> пробовал вставлять и до того.. Вернее, наверное, не стили у меня не видит, а классы. В самом "теле" у меня именно класс применяется (MSWord так "нарисовал"). Вот кусочек:
<div class=Section1>
<p class=ConsNonformat style='margin-right:0cm;text-align:justify'><span
style='font-size:8.0pt;font-family:Arial'> </span></p>
<p class=ConsTitle align=center style='margin-right:0cm;text-align:center'><span
style='font-size:8.0pt'>ДОГОВОР No.****** </span></p>
<p class=ConsNormal align=center style='margin-right:0cm;text-align:center;
text-indent:0cm'><span style='font-size:8.0pt'>Аренды с правом выкупа</span></p>
Есть у меня еще вариант - отказаться вообще от document.write(..). Дело в том, что шаблоны документов на 99% состоят из стат. текста. В них тербуется добавить 3-5 переменных типа ФИО и т.п. Это я могу сделать в php и добавить в boby <body onLoad="window.print();">. Так все печатает, как и хотелось. Но тут другая проблема - всего требуется напечатать "за раз" 9 листов (внутри 2 копии 4-х листов). И получается что на каждый лист будет открываться диалоговое окно принтера. Как это обойти (хотя-бы одно диалог. окно на весь пакет) я не знаю.. Вот и извращаюсь по-всякому.. :(
А что у вас за прога печати? Не поделитесь? ;) Или хотя бы идею??
вставляй между "страницами":
[html]
<p style="page-break-before: always"></p>
[/html]
и будет тебе щастье )))
всю инфу можно будет загружать в одном окне и с одним диалогом печатать ;)
А что у вас за прога печати? Не поделитесь? ;) Или хотя бы идею??
Я делал для родной кафедры расчетную программу. Сетевой график она считает. Так вот там распечатка может быть на одном листе, и может и поболее занимать. Так вот задается моноширный шрифт, данные печатаются по 40 строк, а потом через CSS делается перенос на другую страницу (см. пост. Тень Пса). В другой программе расчетные данные всегда занимают один лист, но таких распечаток много (каждая распечатка отдельный HTML файл) и печатать их по отдельности геморное дело. Поэтому php скриптом лепим из этих файлов один большой с CSS таблицей стилей которая делает разбивку там, что один файл печатается на одной странице. Таким образом диалог печати вызывается только один раз.
вставляй между "страницами":
[html]
<p style="page-break-before: always"></p>
[/html]
и будет тебе щастье )))
всю инфу можно будет загружать в одном окне и с одним диалогом печатать ;)
И верно - пришло оно, "щастье" ! :D Сенкс!!
Но теперь не могу сообразить, как после печати закрыть страницу..
"Крестиком" оно, конечно, понятно :) , а вот из php как? :confused:
Конечно ни как. PHP это серверный язык.
открой странику в скрытом <IFRAME> (вместо нового окна) и напечатай.
и никакого окна открывать не надо, ну и закрывать соотвессна :D
открой странику в скрытом <IFRAME> (вместо нового окна) и напечатай.
и никакого окна открывать не надо, ну и закрывать соотвессна :D
Ммм.. А "на пальцах" не подкажете, как это сочинить? ;)
Ну да.. Естественно не на php - малость "очепятатался" ;) На javascript, скорее всего, или еще как?? :rolleyes:
[html]
<script>
function openDocumentPacket() {
document.getElementById('hidden_frame').window.location = "http://скрипт_который_генерит_пакет_отчетов";
}
</script>
<body>
<iframe style="display:none" id="hidden_frame"></iframe>
</body>
[/html]
вот при исполнении функции openDocumentPacket будет твой пакет документов открываться в iframe, который скрыт от глаз пользователя :))))))
а в скрипте, который генерит документы для печати, сделай <body onLoad="window.print()"> или как там... ну в общем печать окна.
и получается, что печатаются документы, которые юзер не видит, нажимая на кнопку "Печать" на страничке, например. ну, тут уже сам додумаешь. если получится, то изгаляться можно еще много :))))
PS: я думаю тебе должно подойти.
открой странику в скрытом <IFRAME> (вместо нового окна) и напечатай.
и никакого окна открывать не надо, ну и закрывать соотвессна :D
Не вижу выигрыша от такой схемы. Страница, в которую IFRAME пихается все навно открывать нужно, диалог печати все равно будет. Закрывать страницу тоже придется. Лично в моём случае это только бы излишне усложнило системы. Не стоит преумножать сущности сверх меры ;) .