यह मेरा पहला सवाल है, मुझे उम्मीद है कि मैं इसे सही कर रहा हूं। अग्रिम में मेरी खराब अंग्रेजी के लिए खेद है :)एफओपी: छवि स्रोत सापेक्ष पथ निर्दिष्ट करने के लिए कैसे?
मैं जेएसएफ 2.0 (ग्रहण आईडीई) का उपयोग कर रहा हूं और मैं अपाचे एफओपी 1.0 का उपयोग करके कुछ पीडीएफ फाइलें उत्पन्न करने की कोशिश कर रहा हूं।
मैं Apache Fop site पर निर्देशों का उपयोग करके सरल पीडीएफ फाइलें बनाने में सक्षम था, लेकिन मैं अपने एप्लिकेशन फ़ोल्डर से कोई भी छवि सम्मिलित नहीं कर सकता। मेरे फ़ोल्डर संरचना की तरह यह है: अपने आवेदन WebContent में मैं (किसी और के अलावा) pdf_transform/XSLT/transformFile.xsl है, और pdf_transform/XSLT/logo.jpg
transformFile.xsl में मैं
<fo:block><fo:external-graphic src="url('logo.jpg')"/></fo:block>
है
लेकिन जब मैं clik मेरे सर्वलेट में 'showPDF' बटन, मैं पीडीएफ फाइल छवि के बिना प्राप्त (सब कुछ नहीं है), और कंसोल में इस संदेश:
गंभीर: स्रोत कि fr वापस आ गया था ओएम यूआरआई रिज़ॉल्यूशन में यूआरआई के लिए इनपुटस्ट्रीम नहीं था: logo.jpg नवंबर 18, 2010 5:16:49 अपराह्न org.apache.fop.events.LoggingEventListener प्रक्रिया सेव करें: छवि नहीं मिली। यूआरआई: logo.jpg। (कोई संदर्भ जानकारी उपलब्ध)
मैं 'logo.jpg' के बजाय यूआरएल ('logo.jpg') का उपयोग करने की कोशिश की, WebContent फ़ोल्डर के अंदर विभिन्न स्थानों पर छवि डालने और ("./ लोगो अलग नेविगेशन का उपयोग .jpg ") लेकिन यह काम नहीं किया।
यदि मैं पूर्ण पथ सेट करता हूं (उदाहरण के लिए "डी:/fop/images/logo.jpg") लेकिन यह मेरे आवेदन को सफ़ेद करने की आवश्यकता है, तो यह ठीक काम करता है।
खोज करते समय, मैंने पाया कि यह fopFactory.setURIResolver() और/या userAgent.setBaseURL() से संबंधित है। इसके साथ कुछ कोशिश की, लेकिन सफल नहीं हुआ।
मैं जेएसएफ और एफओपी दोनों के लिए नया हूं, और यह छवि स्थिति मुझे थोड़ी देर परेशान कर रही है। क्या कोई मुझे इसके साथ मदद कर सकता है, या कम से कम मुझे "ट्यूटोरियल पथ उपयोग के लिए एफओपी को कॉन्फ़िगर कैसे करें" पर कुछ ट्यूटोरियल पर निर्देशित कर सकता है?
संपादित करें: मैं नहीं चाहता कि किसी भी पूर्ण पथ और ऐप को कंप्यूटर पर अपने स्थान से स्वतंत्र रूप से काम करना चाहिए (प्रकाशित करने योग्य)। मेरी खोज मुझे बताती है कि एफओपी को कॉन्फ़िगर करने के साथ इसका कुछ संबंध है, लेकिन मुझे नहीं पता कि यह कैसे करें :)
अग्रिम धन्यवाद।
पीएस
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();
}
आपके उत्तर के लिए धन्यवाद। लेकिन वह नहीं है जो मैं ढूंढ रहा हूं। जब आप xml बनाते हैं, "/ path/to/app /" स्ट्रिंग को "C: \ Eclipse \ workspace \ myProject \ .. आदि" जैसा दिखना चाहिए (यदि मुझे यह सही हो रहा है)। मैं इस एप्लिकेशन को प्रकाशित करने योग्य बनाने के लिए बना रहा हूं और सभी एक्सएमएल डेटा और छवियों को एक्सेस करने के लिए व्हाईटिन एप्लिकेशन स्कोप का संदर्भ दिया जाना चाहिए (क्षमा करें, मेरे प्रश्न में स्पष्ट रूप से लिखा नहीं है, मैं इसे अभी संपादित कर दूंगा)। – Nikola