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]