Моим решением было использование данных URI. Это не очень элегантно, так как увеличивает размер HTML и не работает в IE до IE8, но позволяет вам не беспокоиться о создании файлов из вложений изображений, которые отправляет вам Jasper.
Если вы собираетесь реализовать это, вы хотите добавить этот аргумент к вашему запросу:
<argument name="IMAGES_URI"><![CDATA[data:]]></argument>
Затем вам нужно проанализировать HTML-отчет, который JasperServer отправляет обратно:
foreach ($attachments as $name => $attachment) {
// Cut off the cid: portion of the name.
$name = substr($name, 4);
// Replace any image URIs with a data: uri.
if (strtolower(substr($name, 0, 4)) !== 'uuid' && strtolower($name) !== 'report') {
if (strtoupper(substr($attachment, 0, 3)) === 'GIF') {
// It's a GIF.
$report = str_replace("data:$name", 'data:image/gif;base64,' . base64_encode($attachment), $report);
} elseif (/* more file type tests */) {
// and so on...
}
}
}
Для больших изображений лучше всего сделать так, как предложил Гордон, и передать параметр, указывающий URL-адрес файла, который постоянно хранится на сервере. Этот метод более безопасен для изящной обработки любых неожиданных изображений, которые JasperServer пытается выдать вам.