Это мой первый вопрос, надеюсь, я все правильно делаю. Заранее извиняюсь за плохой английский :)
Я использую JSF 2.0 (Eclipse IDE) и пытаюсь сгенерировать некоторые PDF-файлы с помощью Apache FOP 1.0.
Мне удалось создать простые PDF-файлы, используя инструкции на Сайт Apache Fop , но я могу t вставить любое изображение из папки моего приложения. Моя структура папок такая: В моем приложении WebContent у меня есть (среди прочего) pdf_transform / xslt / transformFile.xsl и pdf_transform / xslt / logo.jpg
В transformFile.xsl у меня есть
, но когда я нажимаю кнопку 'showPDF' в моем сервлете, я получаю PDF-файл без изображения (все остальное есть), и это сообщение в консоли:
SEVERE: Источник, который был возвращен из разрешения URI не содержал InputStream для URI: logo.jpg 18 ноября, 2010 17:16:49 org.apache.fop.events.LoggingEventListener processEvent SEVERE: изображение не найдено. URI: logo.jpg. (Нет контекстной информации доступно)
Я пытался использовать 'logo.jpg' вместо url ('logo.jpg'), помещая изображения в разные места внутри папки WebContent и используя другую навигацию ("./ logo.jpg"), но это не сработало .
Он отлично работает, если я установил абсолютный путь (например, "d: /fop/images/logo.jpg"), но мне нужны ресурсы в моем приложении.
Во время поиска я обнаружил, что это связано с fopFactory.setURIResolver () и / или userAgent.setBaseURL (). Пробовал что-то с этим, но безуспешно.
Я новичок как в JSF, так и в FOP, и эта ситуация с изображениями беспокоила меня долгое время. Может ли кто-нибудь помочь мне с этим или, по крайней мере, направить меня к некоторому руководству о том, «как настроить FOP для использования относительного пути»?
РЕДАКТИРОВАТЬ: Я не Я не хочу, чтобы какие-либо абсолютные пути, и приложение должно работать независимо от его местоположения на компьютере (чтобы быть доступным для публикации). Мой поиск говорит мне, что это как-то связано с настройкой FOP, но я не знаю, как это сделать :)
Заранее спасибо.
PS Это метод, который вызывается для отображения PDF:
public void printExchangeRateList(ActionEvent event) {
BufferedOutputStream output = null;
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
String path = externalContext.getRealPath("/");
try {
response.reset();
response.setHeader("Content-Type", "application/pdf");
output = new BufferedOutputStream(response.getOutputStream(), 10240);
File xsltfile = new File(path+"/pdf_transform/xslt/transformFile.xsl");
FopFactory fopFactory = FopFactory.newInstance();
FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
try {
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, output);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer(new StreamSource(xsltfile));
Source src = new DOMSource(makeXML()); // my method
Result res = new SAXResult(fop.getDefaultHandler());
transformer.transform(src, res);
} finally {
if (output != null) output.close();
/*try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
}
} catch (Exception e) {
// TODO Auto-generated catch block
}
facesContext.responseComplete();
}