Đây là câu hỏi đầu tiên của tôi ở đây, tôi hy vọng tôi đang làm đúng. Xin lỗi vì tiếng Anh xấu của tôi trước :)FOP: cách chỉ định đường dẫn tương đối của src hình ảnh?
Tôi đang sử dụng JSF 2.0 (IDE Eclipse) và tôi đang cố tạo một số tệp PDF bằng Apache FOP 1.0.
Tôi có thể tạo tệp PDF đơn giản bằng cách sử dụng hướng dẫn trên Apache Fop site, nhưng tôi không thể chèn bất kỳ hình ảnh nào từ thư mục ứng dụng của mình. cấu trúc thư mục của tôi là như thế này: Trong WebContent ứng dụng của tôi tôi có (trong số những người khác) pdf_transform/XSLT/transformFile.xsl, và pdf_transform/XSLT/logo.jpg
Trong transformFile.xsl tôi có
<fo:block><fo:external-graphic src="url('logo.jpg')"/></fo:block>
nhưng khi tôi clik nút 'showPDF' trong servlet của tôi, tôi nhận được tập tin PDF mà không cần hình ảnh (mọi thứ khác là có), và thông điệp này trong giao diện điều khiển:
NGHIÊM TRỌNG: The Source đã được trả lại fr độ phân giải URI om không chứa InputStream cho URI: logo.jpg Ngày 18 tháng 11, 2010 5:16:49 PM org.apache.fop.events.LoggingEventListener processEvent SEVERE: Không tìm thấy hình ảnh. URI: logo.jpg. (Không có thông tin bối cảnh sẵn)
Tôi cố gắng để sử dụng 'logo.jpg' thay vì url ('logo.jpg'), đưa hình ảnh trên những nơi khác nhau bên trong thư mục WebContent và sử dụng chuyển hướng khác nhau (" ./ Logo .jpg ") nhưng nó không hoạt động.
Nó hoạt động tốt nếu tôi đặt đường dẫn tuyệt đối (ví dụ "d: /fop/images/logo.jpg") nhưng tôi cần resurces whitin ứng dụng của tôi.
Trong khi tìm kiếm, tôi thấy rằng điều này liên quan đến fopFactory.setURIResolver() và/hoặc userAgent.setBaseURL(). Đã thử một cái gì đó với điều đó, nhưng didnt thành công.
Tôi mới dùng cả JSF và FOP, và tình huống hình ảnh này đã làm phiền tôi khá lâu. Ai đó có thể giúp tôi với điều này, hoặc ít nhất là hướng dẫn tôi đến một số hướng dẫn về "làm thế nào để cấu hình FOP cho việc sử dụng đường dẫn tương đối"?
EDIT: Tôi không muốn bất kỳ đường dẫn tuyệt đối và ứng dụng nào hoạt động độc lập với vị trí của nó trên máy tính (để có thể xuất bản). Tìm kiếm của tôi cho tôi biết nó có liên quan đến việc cấu hình FOP, nhưng tôi không biết cách làm như thế :)
Xin cảm ơn trước.
P.S. Đây là phương pháp được gọi là để hiển thị 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();
}
Cảm ơn câu trả lời của bạn. Nhưng đó không phải những gì tôi đang tìm kiếm. Khi bạn tạo xml, chuỗi "/ path/to/app /" phải giống như "C: \ Eclipse \ workspace \ myProject \ .. etc" (nếu im làm đúng). Im làm cho ứng dụng này có thể xuất bản và tất cả dữ liệu xml và hình ảnh truy cập im phải được tham chiếu đến phạm vi ứng dụng whitin (xin lỗi, không viết rõ ràng trong câu hỏi của tôi, tôi sẽ chỉnh sửa nó ngay bây giờ). – Nikola