Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему не печатаются изображения? (https://javascript.ru/forum/misc/74996-pochemu-ne-pechatayutsya-izobrazheniya.html)

maxapet 24.08.2018 06:59

Почему не печатаются изображения?
 
Вывожу на печать данные таким образом:
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-разметка, и данные, и картинки.
На превью печати есть только таблица с данными, картинок же нет, и, как следствие, их нет на отпечатанном документе.

В чём дело? Куда пропадают картинки?

laimas 24.08.2018 07:20

Изображениям нужно время для загрузки.

maxapet 24.08.2018 07:34

Спасибо, похоже на то. Но как сделать так, чтобы изображения загрузились?

laimas 24.08.2018 07:38

Производить печать по событию загрузки документа - onload.

maxapet 24.08.2018 07:39

Если убрать команду winPrint.print(), и нажать вместо неё Ctrl-P, то изображения отображаются на превью и выводятся на печать.

maxapet 24.08.2018 07:41

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

Пытался это сделать и до, и после записи в документ - не срабатывает.

laimas 24.08.2018 07:44

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

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

laimas 24.08.2018 07:50

Цитата:

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

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

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

maxapet 24.08.2018 08:00

Если добавлять onload после записи в документ, и оставить только alert, то он срабатывает - выскакивает сообщение. Как только добавляю winPrint.print() - всё сбивается, и alert не появляется.

maxapet 24.08.2018 08:02

Цитата:

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

laimas 24.08.2018 08:22

Цитата:

Сообщение от maxapet
Во-первых, я не знаю, как это сделать

Набрать в поисковике типа "css для печати" и не "пугаться", в общем ничего сложного в этом нет.

maxapet 24.08.2018 08:24

Создал таймер, и вот этот кусок:

winPrint.document.close();
    winPrint.focus();
    winPrint.print();
    winPrint.close();


выполняю с задержкой. В зависимости от её длительности больше ими меньше картинок попадает на печать.

В целом, спасибо, дружище, ты мне очень помог, напомнив, что изображениям нужно время на загрузку. :thanks:


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