Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Печать пакета отчетов из браузера?

22K
26 июня 2007 года
AlKov
28 / / 26.06.2007
Прошу помочь в решении такой задачи:
есть пакет (6 отдельных листов форматированного текста в html) документов, который необходимо распечатать из браузера по нажатию кнопки (php, javascript) желательно в "один заход".
Плюс к этому, некоторые листы пакета необходимо распечатать в двух экземплярах.
Пытался использовать следующий скрипт:
Код:
<script type="text/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>
- все вроде бы неплохо, НО - не работает форматирование (не применяется не один из стилей тэга <style>.. ). Страницы для печати (то, что вставляется в prnWnd.document.write(...); ) формирую динамически с помощью php (т.к. необходимо вставить данные в шаблон).
И еще - возможно ли отключить окно выбора принтера при печати? Чтобы оно не выскакивало каждый раз при печати одного листа.
92
26 июня 2007 года
Тень Пса
2.2K / / 19.10.2006
ну да, попробуй использовать style так:
[html]
<style type="text/css" media="all">
// blah-blah-blah
</style>
[/html]

и посмотри, какие еще значения атрибута media бывают. вроде бы printer и еще что-то :)
832
26 июня 2007 года
Carpus
390 / / 14.04.2005
Не знаю, приведенный пример у меня прекрасно работает, инлайн стили применяются
 
Код:
prnWnd.document.write('<p style="font-size: 56px; font-style: italic; font-weight: bold;">Мама мыла раму</p>');

Диалог печати выключить никак не удастся.
22K
26 июня 2007 года
AlKov
28 / / 26.06.2007
Цитата: Тень Пса
ну да, попробуй использовать style так:
[html]
<style type="text/css" media="all">
// blah-blah-blah
</style>
[/html]

и посмотри, какие еще значения атрибута media бывают. вроде бы printer и еще что-то :)



Хм.. А в какую часть "моего" скрипта вставить таблицу стилей? Непонятно вот что - вычитал про объект document следующее:

 
Код:
Объект document соответствует всему гипертекстовому документ, вернее, той его части, которая заключена в контейнер <body> . . . </body>.

Т.о. получается, что document.write пишет только в <body> и все, добавленное "выше" <body> в страницу не добавляется.. Собственно так оно и получается.. :(
И что писАть вместо "// blah-blah-blah"? Свою табл. стилей? В принципе, я такое пробовал, за исключением того, что стиль описывал не так - "<style type="text/css" media="all">", а просто копировал типа так:
Код:
<style>
<!--
 /* 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-а).. Посему заранее извиняюсь за ламерские вопросы.. :(
92
26 июня 2007 года
Тень Пса
2.2K / / 19.10.2006
да. свою табличку стилей. у меня так прога печатает отчет, всё форматирование применяется (а <style> до тега <body> хотя, можешь и в нём).
22K
26 июня 2007 года
AlKov
28 / / 26.06.2007
Цитата: Тень Пса
да. свою табличку стилей. у меня так прога печатает отчет, всё форматирование применяется (а <style> до тега <body> хотя, можешь и в нём).



Странно.. У меня не пашет.. Не видит стили, хоть лопни! :( И в <body> пробовал вставлять и до того.. Вернее, наверное, не стили у меня не видит, а классы. В самом "теле" у меня именно класс применяется (MSWord так "нарисовал"). Вот кусочек:

Код:
<body lang=RU>

<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>
А перелопачивать весь текст, заменяя классы, просто влом - 5 страниц.. :(
Есть у меня еще вариант - отказаться вообще от document.write(..). Дело в том, что шаблоны документов на 99% состоят из стат. текста. В них тербуется добавить 3-5 переменных типа ФИО и т.п. Это я могу сделать в php и добавить в boby <body onLoad="window.print();">. Так все печатает, как и хотелось. Но тут другая проблема - всего требуется напечатать "за раз" 9 листов (внутри 2 копии 4-х листов). И получается что на каждый лист будет открываться диалоговое окно принтера. Как это обойти (хотя-бы одно диалог. окно на весь пакет) я не знаю.. Вот и извращаюсь по-всякому.. :(
А что у вас за прога печати? Не поделитесь? ;) Или хотя бы идею??
92
26 июня 2007 года
Тень Пса
2.2K / / 19.10.2006
разбивай инфу по страницам.

вставляй между "страницами":
[html]
<p style="page-break-before: always"></p>
[/html]


и будет тебе щастье )))
всю инфу можно будет загружать в одном окне и с одним диалогом печатать ;)
12
26 июня 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: AlKov
Но тут другая проблема - всего требуется напечатать "за раз" 9 листов (внутри 2 копии 4-х листов). И получается что на каждый лист будет открываться диалоговое окно принтера. Как это обойти (хотя-бы одно диалог. окно на весь пакет) я не знаю.. Вот и извращаюсь по-всякому.. :(
А что у вас за прога печати? Не поделитесь? ;) Или хотя бы идею??


Я делал для родной кафедры расчетную программу. Сетевой график она считает. Так вот там распечатка может быть на одном листе, и может и поболее занимать. Так вот задается моноширный шрифт, данные печатаются по 40 строк, а потом через CSS делается перенос на другую страницу (см. пост. Тень Пса). В другой программе расчетные данные всегда занимают один лист, но таких распечаток много (каждая распечатка отдельный HTML файл) и печатать их по отдельности геморное дело. Поэтому php скриптом лепим из этих файлов один большой с CSS таблицей стилей которая делает разбивку там, что один файл печатается на одной странице. Таким образом диалог печати вызывается только один раз.

22K
26 июня 2007 года
AlKov
28 / / 26.06.2007
Цитата: Тень Пса
разбивай инфу по страницам.

вставляй между "страницами":
[html]
<p style="page-break-before: always"></p>
[/html]


и будет тебе щастье )))
всю инфу можно будет загружать в одном окне и с одним диалогом печатать ;)



И верно - пришло оно, "щастье" ! :D Сенкс!!
Но теперь не могу сообразить, как после печати закрыть страницу..
"Крестиком" оно, конечно, понятно :) , а вот из php как? :confused:

12
27 июня 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: AlKov
а вот из php как? :confused:


Конечно ни как. PHP это серверный язык.

92
27 июня 2007 года
Тень Пса
2.2K / / 19.10.2006
изхитряться не пробовал? ;)

открой странику в скрытом <IFRAME> (вместо нового окна) и напечатай.

и никакого окна открывать не надо, ну и закрывать соотвессна :D
22K
27 июня 2007 года
AlKov
28 / / 26.06.2007
Цитата: Тень Пса
изхитряться не пробовал? ;)

открой странику в скрытом <IFRAME> (вместо нового окна) и напечатай.

и никакого окна открывать не надо, ну и закрывать соотвессна :D



Ммм.. А "на пальцах" не подкажете, как это сочинить? ;)

22K
27 июня 2007 года
AlKov
28 / / 26.06.2007
Цитата: alekciy
Конечно ни как. PHP это серверный язык.



Ну да.. Естественно не на php - малость "очепятатался" ;) На javascript, скорее всего, или еще как?? :rolleyes:

92
27 июня 2007 года
Тень Пса
2.2K / / 19.10.2006
вместо window.open делаешь:

[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: я думаю тебе должно подойти.
12
27 июня 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: Тень Пса
изхитряться не пробовал? ;)

открой странику в скрытом <IFRAME> (вместо нового окна) и напечатай.

и никакого окна открывать не надо, ну и закрывать соотвессна :D



Не вижу выигрыша от такой схемы. Страница, в которую IFRAME пихается все навно открывать нужно, диалог печати все равно будет. Закрывать страницу тоже придется. Лично в моём случае это только бы излишне усложнило системы. Не стоит преумножать сущности сверх меры ;) .

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог