Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Печать HTML документа (https://javascript.ru/forum/misc/1945-pechat-html-dokumenta.html)

SwaD 08.10.2008 20:05

Печать HTML документа
 
Здравствуйте!
У меня руководство поставило задачу: :mad:

Условие:
Существует некий HTML документ, находящийся на локальном компьютере пользователя.
В этом документе, есть несколько полей (ну например INPUT TYPE=TEXT) и кнопка (BUTTON или INPUT TYPE=SUBMIT). :cool:

Задача:
Пользователь должен ввести в поля некоторые значения и нажать на кнопку.
При нажатии на кнопку, должно появиться диалоговое окно принтера(стандартное windows) и если нажать на "Печать", должен распечататься некоторый документ с теми значениями, который ввел пользователь. :eek:

Подскажите пожалуйста, это возможно осуществить с помощью JavaScript?????:confused:
Если возможно, то подскажите, как это сделать?

twolf 09.10.2008 00:06

для начала прописать head
<link rel="stylesheet" type="text/css" href="print.css" media="print" />

создать сам print.css и в нем опредлить что печатать а что нет.
например:
* {display: none}
#myform {display: block; visibility: visible; border: 2px solid #ccc;}

на сабмит или баттон onclick="print_doc()"
и в javascript пишем
function print_doc(){
window.print() ;
}

alexKniaz 28.10.2008 00:06

Прям ностальгия какя-то... Сам изучая давным-давно JS над этой же задачей парился. Только я тогда в VBS сделал.

bassolo 14.08.2009 11:34

twolf,
сделал, как написано, но печать не идет. По-моему просто страница обновляется... Где я туплю?

Вот html:
<head>
<link href="css/main.css" type="text/css" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="css/print.css" media="print" />
<script type="text/javascript" src="js/main.js"></script>
</head>
...
<input class="inp" type="text" name="txt" id="u3" value="0" size="2" maxlength="4">%<br>

<input class="button" type="submit" value="Печать" onclick="print()"></input>


CSS:
* {display: none}
input {display: block; visibility: visible; border: 2px solid #ccc;}


JS:
function print(){
window.print() ;
}

Riim 14.08.2009 11:48

<input class="button" type="submit" value="Печать" onclick="print_()"></input>
function print_(){
window.print() ;
}

Kolyaj 14.08.2009 11:52

Цитата:

Сообщение от bassolo
Где я туплю?

Зачем print оборачивать в print?

alexKniaz 14.08.2009 11:53

<head>
<link rel="stylesheet" href-"styles/pint.css">
</head>
<body>
<input type="text" />
<input type="button" value="OK" onclick="window.print();" />
</body>

bassolo 14.08.2009 12:06

спасибо! всем +1)
alexKniaz, принципиально все css и js в отдельных файлах)

bassolo 14.08.2009 12:25

извините, но у ламера опять вопрос:)

печть пошла, но печатается только название документа. Если не применять css, то печатается вся страница. а нужно только содержимое <input >

alexKniaz 14.08.2009 12:28

HTML и CSS в студию

bassolo 17.08.2009 09:23

HTML:
<head>
<link href="css/main.css" type="text/css" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="css/print.css" media="print" />
<script type="text/javascript" src="js/main.js"></script>
</head>
<body>
<input class="inp" type="text" name="txt" id="u3" value="0" size="2" maxlength="4">%<br>
<input class="button" style="height:100; width:100%" type="button" onclick="uklon()" value="Расчет" id=c><br>
<input class="button" type="reset" value="Очистить"></input>
<input class="button" type="submit" value="Печать" onclick="print_doc()"></input>
</body>

CSS:
* {display: none}
input {display: block; visibility: visible; border: 2px solid #000000;color: 000000;}

twolf 17.08.2009 12:50

у вас в HTML ошибка на ошибке.
- для input не нужен закрывающий тег
- (style="height:100; width:100%") не указана единица измерения
- значение в кавычки (id=c)
И в CSS забыли # в свойстве color

bassolo 17.08.2009 13:06

twolf,
прочитайте два предыдущих поста(№9,10).

Цитата:

Сообщение от twolf
для input не нужен закрывающий тег

он и не мешает...
Цитата:

Сообщение от twolf
(style="height:100; width:100%") не указана единица измерения

по умолчанию - пиксели
Цитата:

Сообщение от twolf
значение в кавычки (id=c)

работает и без кавычек
Цитата:

Сообщение от twolf
в CSS забыли # в свойстве color

работает и без #.

И все это не решает проблему:(

B~Vladi 17.08.2009 13:32

Цитата:

Сообщение от bassolo
он и не мешает...

Мда...
Цитата:

Сообщение от bassolo
по умолчанию - пиксели

Уверены?!
Цитата:

Сообщение от bassolo
работает и без #.

Жесть
Цитата:

Сообщение от bassolo
И все это не решает проблему

Пробовали?! С таким подходом ошибки у вас будут всегда.

bassolo 17.08.2009 13:50

B~Vladi,
ну, хорошо. Я исправил все перечисленные ошибки, хотя я всерьез думал, что это не ошибки. Все элементы отображались так, как задумано. Ну да ладно... Я все исправил, как посоветовалtwolf, но требуемого результата не достиг.
На странице все отображается, как надо, но на печать (через print.css) выводится пустая страница. Я пробовал убрать
* {display: none; }

Тогда печатается вся страница (что естественно...)
А мне нужно, чтобы печатались только <input>.

Плиз, хелп ми:)

B~Vladi 17.08.2009 14:03

* {display: none; }
input {display: block; !important }

twolf 17.08.2009 14:08

B~Vladi,
!important до ; должно быть.
да и не поможет это, т.к. причина не в специфичности.
* {display: none; } // 0,0,0,0
input {display: block;} //0,0,0,1

Не могу понять где ошибка.

B~Vladi 17.08.2009 14:11

Цитата:

Сообщение от twolf
!important до ; должно быть.

может быть, не помню я сейчас.

Поместите инпуты в форму(где им и место) и меняйте дисплей ей.

bassolo 17.08.2009 14:17

B~Vladi,
инпуты в формах.
в css :
form {display: block; visibility: visible; border: 2px solid #000000;color: #000000; }

все равно ничего нет.
да и нужна печать не всех инпутов.

twolf 17.08.2009 14:38

html, body {display: block;}
:)
про них совсем забыли. ведь * скрывает все теги.

bassolo 17.08.2009 14:51

twolf,
то есть
* {display: none; }
html, body {display: block;} 
input {display: block; visibility: visible; border: 5px solid #000000;color: #000000; }

так что ли? не работает:(

Kolyaj 17.08.2009 14:55

bassolo,
как может быть виден потомок, если его родитель скрыт? Если уж элемент скрыт, то и все его содержимое скрыто.

twolf 17.08.2009 14:56

работает, проверил. Вы случайно сам html тэг в разметке не забыли? а то в вашем примере его нет.

B~Vladi 17.08.2009 14:58

Нет не так. С * работать не будет. Универсального решения нет... всё зависит от разметки. В любом случае * использовать нельзя.

bassolo 17.08.2009 15:51

Kolyaj,
в том-то и дело, что сначала все скрываем, потом показываем, что нужно, как исключение. (инпут)
twolf,
не забыл. и html и body.
у меня не работает. я дал каждой таблице имя (инпуты, которые надо печатать и которые не надо в разных таблицах), и скрыл те. которые не надо. А так не работает:(

B~Vladi, я удалил *. оставил
html, body {display: none;}
input {display: block; visibility: visible; border: 5px solid #000000;color: #000000; }
и все равно ничего не видно...

у меня еще вопрос: можно дать имя элементу (инпуту, таблице) и распечатать только его?

Kolyaj 17.08.2009 15:56

bassolo,
на приведенном вами HTML инпуты печатаются при указании правила html, body {display: block;}.

Но у вас инпуты в формах, формы, скорее всего, в диве, див в яйце, яйцо в утке, утка в...
Чтобы инпуты были видны, очевидно, все их родители должны быть видны.

bassolo 17.08.2009 16:09

Kolyaj,
хорошо, как же напечатать input class="print", а все остальное (input class="noPrint", img, p и тд...) не печатать?
интересна модель типа: все скрыть, указанное напечатать. или это не возможно? нужно прятать каждый элемент?

Kolyaj 17.08.2009 16:10

Все зависит от вашего DOM-дерева.

B~Vladi 17.08.2009 16:33

Можно пройти скриптом, собрать то, что нужно печатать в отдельный див, засунуть его в конец боди, остальное скрыть, а его оставить.

alexKniaz 17.08.2009 17:07

по моему-так :
body *{display:none;}
input {display:block;}
Но тогда input должен быть непосредственным потомком body. Иначе втрое правило придётся переписать для потмка body - предка input

bassolo 18.08.2009 08:56

alexKniaz,
пнятно. то есть отменить правило можно только непосредственного родителя. а у меня инпуты глубоко в таблицах. из-за этого и не работал...
спасибо)

alexKniaz 18.08.2009 12:02

НЕ, тут работает так :
body *{visibility:hidden;} - скрывает всех непосредственных потомков body, а второе для конкретного потомка это правило отменяет. А так во втором праиле селектор можно назначить таблице, чтоб не переделывать всё.

bassolo 19.08.2009 09:35

спасибо,alexKniaz, я учту. Правда я уже переделал:) Дал имя каждой таблице и скрыл/показал нужную:)

ale-sumkin 22.10.2015 14:25

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


Часовой пояс GMT +3, время: 23:47.