Hi, I have written an action class to show the pdf, but the pdf is corrupt.
Do I something wrong? ... FileInputStream fis = new FileInputStream(pdf_path); int anz = fis.available(); byte[] data = new byte[anz]; fis.read(data); ByteArrayOutputStream baos = new ByteArrayOutputStream(); baos.write(data, 0, anz); baos.flush(); baos.close(); response.setContentType("application/pdf"); response.setHeader("Pragma", "public"); response.setHeader("Content-Disposition", "inline;filename=offer.pdf"); response.setContentLength(anz); ServletOutputStream out = response.getOutputStream(); baos.writeTo(out); out.flush(); ... return null; kind regards, frank > -----Ursprüngliche Nachricht----- > Von: Frank Zammetti [mailto:[EMAIL PROTECTED] > Gesendet: Dienstag, 3. August 2004 15:41 > An: [EMAIL PROTECTED] > Betreff: RE: struts and iText > > > Another option: write the PDF out to a database BLOB field, > then create an > Action to retrieve that field. This I think gives you the > best of all > worlds. If you structure the table properly, you can share > the PDF across > various requests/users and you can even avoid PDF generation > potentially by > seeing if an appropriate PDF exists in the table already. A > simple timed > stored procedure should serve as a good cleanup mechanism. > Just to save you > some time, here's an Action I use in a system I wrote that > retrieves any > BLOB field and returns it... I'll have to remove some parts > and just give > you comments because it uses two custom classes for database > access, and I > don't want to post that much code here, the other classes are a bit > larger... I'll also simplify the error handling, since it's > custom as well, > but I think the point will come across... The only note I > think is that > this assumes that the table the BLOB is retrieved from has a > field with the > same name as the BLOB field with _ctype appended, and this > contains the > content type to return. > > > import java.io.ByteArrayOutputStream; > import java.sql.Blob; > import javax.servlet.http.HttpServletRequest; > import javax.servlet.http.HttpServletResponse; > import javax.servlet.ServletOutputStream; > import org.apache.struts.action.Action; > import org.apache.struts.action.ActionForm; > import org.apache.struts.action.ActionForward; > import org.apache.struts.action.ActionMapping; > > public class BLOBServerAction extends Action { > > public ActionForward execute(ActionMapping mapping, > ActionForm inForm, > HttpServletRequest request, HttpServletResponse response) > throws Exception { > > try { > > String bTable = "the_table_the_blob_is_in"; > String bField = "the_field_the_blob_is_in"; > String bQuery = "where_clause_to_select_proper_record; > > String sql = "select " + bField + "," + bField + > "_ctype from " + > bTable + " where " + bQuery; > Blob blob = null; > String contentType = null; > byte[] bytes = null; > > ResultSet rs = doSelect(sql); // Insert database access > here, just use > the above constructed SQL string > while (rs.next()) { > contentType = rs.getString(bField + "_ctype"); > blob = rs.getBlob(bField); > } > > ServletOutputStream out = response.getOutputStream(); > > response.setContentType(contentType); > if (blob != null) { > bytes = blob.getBytes(1, (int)(blob.length())); > ByteArrayOutputStream ba = new ByteArrayOutputStream(); > ba.write(bytes, 0, bytes.length); > ba.writeTo(out); > } > out.flush(); > > } catch (Exception e) { > > e.printStackTrace(); > > } > > return null; > > } // End process() > > } > > > Hope that helps, if you go this route. > > Frank W. Zammetti > Chief Software Architect > Omnytex Technologies > www.omnytex.com > > > >From: "Jesse Alexander (KXT)" <[EMAIL PROTECTED]> > >Reply-To: "Struts Users Mailing List" <[EMAIL PROTECTED]> > >To: Struts Users Mailing List <[EMAIL PROTECTED]> > >Subject: RE: struts and iText > >Date: Tue, 3 Aug 2004 10:49:08 +0200 > > > >Well,... > > > >If you already have the PDF generated, why not directly > write it to the > >response(and in this way to the browser)? > > > >To fulfill your use case as described. > >Your action generates the PDF and caches it somewhere. Then > it will forward > >to the JSP-File containing the message and the link. This > link either > >points to a Struts-Action or a plain servlet. This > target-Servlet (or > >Action) retrieves the cached PDF and sends it to the browser. > >Where to cache? > >a) File-System > > - you need a writable location and remember to install > some cleaning > >mechanism > > - the link presented could be just the reference to the > cached file if > >that directory > > readable by the webserver > >b) user-session > > - dangerous in a clustered environment (too much stuff to > propagate > >around) > > - memory usage (usually the recommendation is not to use > more than 4K in > >session...) > > - PDF only available to original user > > - easy to program > >c) separate cache > > - adds another component to your app (DO NOT roll your own > cache, there > >are quite a > > number of tested cache-libraries) > > - could make the PDF available also to other users (depends on the > >use-case and the > > cache-library) > > > >hope this helps > >Alexander > > > > > >-----Original Message----- > >From: Otto, Frank [mailto:[EMAIL PROTECTED] > >Sent: Tuesday, August 03, 2004 9:18 AM > >To: '[EMAIL PROTECTED]' > >Subject: struts and iText > > > >Hi, > > > >I have generated a pdf with iText. In my action class I want > to write it in > >the response object. > > > >The result should be a jsp-page with content "pdf generated > successful" and > >a link to this pdf. The pdf should be shown in a new browser > window too. > > > >Has someone do this? How can I do this? > > > > > >kind regards, > > > >frank > > > >--------------------------------------------------------------------- > >To unsubscribe, e-mail: [EMAIL PROTECTED] > >For additional commands, e-mail: [EMAIL PROTECTED] > > > > _________________________________________________________________ > Planning a family vacation? Check out the MSN Family Travel guide! > http://dollar.msn.com > > > --------------------------------------------------------------------- > 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]