Yes I agree, I will later move to providing these reports as streams on the fly instead of storing them, since there will be many many files generated so storage could be a problem in the long run.
German Morales-2 wrote: > > Hi, > > I have never used jasper reports, but a quick search shows me that you can > also generate the file as a byte[] in memory: > > http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/JasperExportManager.html#exportReportToPdf(net.sf.jasperreports.engine.JasperPrint) > > Class JasperExportManager: > public static byte[] exportReportToPdf(JasperPrint jasperPrint) throws > JRException > > In such case you could avoid all the trouble with files by using a > DynamicWebResource instead of the WebResource described by Florian. > > Here a quick example: > > public class MyDynamicWebResource extends DynamicWebResource { > protected ResourceState getResourceState() { > return new ResourceState() { > public String getContentType() { > return "application/pdf"; > } > > public byte[] getData() { > return generatePDFDataUsingJasperOrWhatever(); > } > }; > } > > // this is optional i think > protected void setHeaders(WebResponse cResponse) { > super.setHeaders(cResponse); > > cResponse.setAttachmentHeader("test.pdf"); > } > } > > For me this is the most convenient thing to do if you don't need to store > the files for later usage. > > Bye, > > German > > > It seems that Florian Sperber wrote: >> Sometime ago this was answered on the list but i cannot find it right >> now :-) >> >> Maybe the following snippets will help you (it's wicket 1.2.6): >> >> WebResource export = new WebResource() { >> private static final long serialVersionUID = 1L; >> >> @Override >> public IResourceStream getResourceStream() { >> try { >> return new FileService(f).getResourceStream(); >> } catch (IOException e) { >> e.printStackTrace(); >> } >> return null; >> } >> @Override >> protected void setHeaders(WebResponse response) { >> super.setHeaders(response); >> response. >> setAttachmentHeader(attachment.getOriginalFilename()); >> } >> }; >> export.setCacheable(false); >> >> ResourceLink dlLink = new ResourceLink("attachmentLink", export); >> >> ... >> >> public class FileService { >> >> private File file; >> private String outputName; >> private String contentType = ""; >> >> public FileService(File file) { >> this.file = file; >> this.outputName = this.file.getName(); >> } >> >> /** >> * sets the output name and returns itself >> * @param outputName >> * @return >> */ >> public FileService setOutputName(String outputName) { >> this.outputName = outputName; >> return FileService.this; >> } >> >> /** >> * sets the content type and returns itself >> * @param contentType >> * @return >> */ >> public FileService setContentType(String contentType) { >> this.contentType = contentType; >> return FileService.this; >> } >> >> >> public IResourceStream getResourceStream() throws IOException { >> >> FileInputStream fi = new FileInputStream(this.file); >> >> return new IResourceStreamImpl(fi, this.contentType, >> this.file.length()); >> } >> >> /** >> * wrapper which creates the necessary [EMAIL PROTECTED] >> ResourceStreamRequestTarget} >> * @return >> * @throws IOException >> */ >> public ResourceStreamRequestTarget getResourceStreamRequestTarget() >> throws IOException { >> return new >> ResourceStreamRequestTarget(this.getResourceStream()) { >> public String getFileName() { >> return (outputName); >> } >> }; >> } >> >> } >> >> ... >> public class IResourceStreamImpl implements IResourceStream { >> private static final long serialVersionUID = 1L; >> >> private Locale locale = null; >> private String contentType = null; >> private InputStream inputStream = null; >> private long size; >> >> /** >> * @param fileInputStream >> * @param contentType >> * @param file >> */ >> public IResourceStreamImpl(InputStream inputStream, >> String contentType, long size) { >> this.inputStream = inputStream; >> this.size = size; >> this.contentType = contentType; >> } >> >> public void close() throws IOException { >> this.inputStream.close(); >> } >> >> public InputStream getInputStream() throws >> ResourceStreamNotFoundException { >> return this.inputStream; >> } >> >> public String getContentType() { >> return (this.contentType); >> } >> >> public Locale getLocale() { >> return (this.locale); >> } >> >> public long length() { >> return this.size; >> } >> >> public void setLocale(Locale locale) { >> this.locale = locale; >> } >> >> public Time lastModifiedTime() { >> return null; >> } >> >> } >> >> >> >> >> >> mbelarbi schrieb: >>> opps, sorry what i meant to write was: >>> File pdfFile = new File("test.pdf"); >>> >>> But this doesn't really change much and the problem still remains that >>> the >>> file is empty (whether txt or pdf). >>> >>> >>> mbelarbi wrote: >>>> Hi, >>>> >>>> I have some code that generates a pdf report file (using jasper >>>> reports). >>>> This file is stored somewhere in the project. >>>> >>>> What I need to do is be able to provide a link which makes that file >>>> available for download when clicked (downloadLink?). How do i do this >>>> using wicket? and are there any examples. >>>> >>>> I've tried this: >>>> >>>> File pdfFile = new File("test.txt"); >>>> DownloadLink dLink = new DownloadLink("dLink", pdfFile); >>>> >>>> >>>> This does exactly what i am looking for (bring up a file for download), >>>> but this file is empty, it has no content. This pdf file resides in the >>>> same hierarchy as the source code file. >>>> >>> >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> >> > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > -- View this message in context: http://www.nabble.com/wicket-File-downlaod-tf4874269.html#a13948431 Sent from the Wicket - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]