Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.08.2018, 06:59
Аспирант
Отправить личное сообщение для maxapet Посмотреть профиль Найти все сообщения от maxapet
 
Регистрация: 27.08.2015
Сообщений: 43

Почему не печатаются изображения?
Вывожу на печать данные таким образом:
function printInventoryForm() { 
	var container = $('<div />');
	var winPrint = window.open('','','left=50,top=50,width=800,height=640,toolbar=0,scrollbars=1,status=0');
	winPrint.document.write(buildStylesToPrint());
	buildHeaderFormToPrint(container);
	buidlMainTblFormToPrint(container);
//	buildFilterSettingsToPrint(container);
// replace &amp; with &
	var code = container[0].outerHTML.replace(/&amp;/g, "&");
	winPrint.document.write(code);
	//return;
	winPrint.document.close(); 
	winPrint.focus(); 
	winPrint.print(); 
	winPrint.close(); 
}


Пояснения: методы buildHeaderFormToPrintб buidlMainTblFormToPrint создают с помощью jQuery блок для вывода на печать. Блок представляет собой не полную HTML-страницу, а только DIV, в который помещается таблица с данными.
В этом блоке есть картинки, которые формируются динамически с помощью php, примерно так:

<img src='barc_img.php?t=2&w=250&h=30&d=1234567890' />


В результате открывается окно, в котором есть всё, что должно быть - есть и HTML-разметка, и данные, и картинки.
На превью печати есть только таблица с данными, картинок же нет, и, как следствие, их нет на отпечатанном документе.

В чём дело? Куда пропадают картинки?
Ответить с цитированием
  #2 (permalink)  
Старый 24.08.2018, 07:20
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Изображениям нужно время для загрузки.
Ответить с цитированием
  #3 (permalink)  
Старый 24.08.2018, 07:34
Аспирант
Отправить личное сообщение для maxapet Посмотреть профиль Найти все сообщения от maxapet
 
Регистрация: 27.08.2015
Сообщений: 43

Спасибо, похоже на то. Но как сделать так, чтобы изображения загрузились?
Ответить с цитированием
  #4 (permalink)  
Старый 24.08.2018, 07:38
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Производить печать по событию загрузки документа - onload.
Ответить с цитированием
  #5 (permalink)  
Старый 24.08.2018, 07:39
Аспирант
Отправить личное сообщение для maxapet Посмотреть профиль Найти все сообщения от maxapet
 
Регистрация: 27.08.2015
Сообщений: 43

Если убрать команду winPrint.print(), и нажать вместо неё Ctrl-P, то изображения отображаются на превью и выводятся на печать.
Ответить с цитированием
  #6 (permalink)  
Старый 24.08.2018, 07:41
Аспирант
Отправить личное сообщение для maxapet Посмотреть профиль Найти все сообщения от maxapet
 
Регистрация: 27.08.2015
Сообщений: 43

Я пробовал его подключить - это первое, что попробовал сделать после твоего ответа, но оно не срабатывает. Подключал обработчик так:
winPrint.onload = function() {
		alert('loaded');
	}

Пытался это сделать и до, и после записи в документ - не срабатывает.
Ответить с цитированием
  #7 (permalink)  
Старый 24.08.2018, 07:44
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

winPrint.write(code); - записали документ
winPrint.onload = function() {
winPrint.print(); - печатаем
}

в противном случае у вас даже на чих времени не будет, а в печать будет отдано то, что имеет документ на текущий момент.

Последний раз редактировалось laimas, 24.08.2018 в 07:46.
Ответить с цитированием
  #8 (permalink)  
Старый 24.08.2018, 07:50
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от maxapet
Пытался это сделать и до, и после записи в документ - не срабатывает.
Может быть, ведь документ не открывается, а значит и события и не будет по идее. Тогда обрабатывать загрузку самих изображений, и печать после загрузке всех, либо загружать готовый документ в окно.

PS. Что распечатать, а чего не надо, этим ведь можно управлять и посредством CSS, почему бы не использовать, тогда и излишних окон не потребуется.

Последний раз редактировалось laimas, 24.08.2018 в 07:54.
Ответить с цитированием
  #9 (permalink)  
Старый 24.08.2018, 08:00
Аспирант
Отправить личное сообщение для maxapet Посмотреть профиль Найти все сообщения от maxapet
 
Регистрация: 27.08.2015
Сообщений: 43

Если добавлять onload после записи в документ, и оставить только alert, то он срабатывает - выскакивает сообщение. Как только добавляю winPrint.print() - всё сбивается, и alert не появляется.
Ответить с цитированием
  #10 (permalink)  
Старый 24.08.2018, 08:02
Аспирант
Отправить личное сообщение для maxapet Посмотреть профиль Найти все сообщения от maxapet
 
Регистрация: 27.08.2015
Сообщений: 43

Цитата:
Что распечатать, а чего не надо, этим ведь можно управлять и посредством CSS, почему бы не использовать, тогда и излишних окон не потребуется
Во-первых, я не знаю, как это сделать;
Во-вторых, изображения на основной таблице не нужны, они появляются только при печати - это штрих-код, на основной странице он только мешает.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в html форме вместе с файлом передать переменную kupidon Общие вопросы Javascript 7 22.01.2018 14:55
Не работает загрузка изображения fenix_63 Node.JS 1 04.08.2016 15:03
Свойства объекта, методы и this. Почему свойство вызывается с () ? jsuse Общие вопросы Javascript 2 04.11.2011 20:39
как при добавлении изображения на сервер считывать имя в БД? solomusic Серверные языки и технологии 3 12.06.2008 23:28
Визуальное выделение части изображения Гость Общие вопросы Javascript 0 25.02.2008 19:44