Проблема не была решена, т.к., видимо сложность была именно в реализации печати с созданием iframe, копирования туда содержимого блока. А вот уже в этом iframe, видимо была проблема со ссылками к картинкам. А со второго раза он уже брал из кеша.
Печать организовал гораздо более простым способом:
0. Имеем div, содержимое которого надо распечатать (.block).
1. Добавляем пустой div на верхний уровень разметки (.to-print).
2. весь контент страницы заключаем в другой div (.content).
<body>
<div class="to-print"></div>
<div class="content">
<!--содержимое страницы-->
</div>
</body>
3. В CSS добавляем:
.to-print {display: none;} /*Скрываем этот блок на экране*/
@media print {
.to-print { display: block; } /*Отображаем блок на печати*/
.content { display: none; } /*Скрываем весь контент на печати*/
}
4. JS, по нажатию на кнопку печати - событие .click():
$('.to-print').html( $('.block').html() ); //копируем требуемое содержимое в скрытый блок
window.print(); //запускаем на печать всю страницу
Т.к. при печати будет видно только содержимое скрытого блока, то оно-то и пойдёт на печать. Пользователь ничего не заметит, т.к. всё происходит в "сумраке" печати.