  | Mailing List | | Home | | Forum Home | | JBoss - Java Application Server | | Tomcat - JSP/Servlet container | | Struts - A MVC web framework | | iText - An open source PDF Java Library | | JDOM - JDOM XML Parser | | J2EE - A mailing list for Java(tm) 2 Platform, Enterprise Edition | | J2EE Pattern - An interest list for Sun Java Center J2EE Pattern Catalog | | JSP - A mailing list about Java Server Pages specification and reference | | Servlet - A mailing list for discussion about Sun Microsystem's Java Servlet API Technology | |
Struts & Hibernate
|
|
|
  | | | RtfWriter2: OutOfMemory, with patch | RtfWriter2: OutOfMemory, with patch 2006-08-23 - By Dirk M?bius
Back Hi,
RtfWriter2 reads the whole document in memory, even if dataCacheStyle is set to CACHE_DISK. When generating large documents, this could lead to OutOfMemory exceptions. This happened to be the case in our reporting system.
The problem is in RtfDocument.writeDocument(), which reads the whole disk cache into memory before writing it into the final output stream.
The following simple patch fixes this problem. The patch is for the latest stable release itext-1 (See http://ext-1.ora-code.com).4.3, but can -- with small modifications --- easily be applied to the latest CVS revision. We would be glad to see it in the next official release.
Thanks for your great and valuable project!
Dirk Moebius
diff -u -x compile.xml -r ../src.orig/com/lowagie/text/rtf/RtfWriter2.java ./com/lowagie/text/rtf/RtfWriter2.java --- ../src.orig/com/lowagie/text/rtf/RtfWriter2.java 2005-09-11 21:09:58.000000000 +0200 +++ ./com/lowagie/text/rtf/RtfWriter2.java 2006-08-22 18:14:51.335937500 +0200 @@ -167,7 +167,7 @@ */ public void close() { try { - os.write(rtfDoc.writeDocument()); + rtfDoc.writeDocument(os); if(this.closeStream) { os.close(); } diff -u -x compile.xml -r ../src.orig/com/lowagie/text/rtf/document/RtfDocument.java ./com/lowagie/text/rtf/document/RtfDocument.java --- ../src.orig/com/lowagie/text/rtf/document/RtfDocument.java 2005-12-24 13:15:00.000000000 +0100 +++ ./com/lowagie/text/rtf/document/RtfDocument.java 2006-08-22 18:14:22.382812500 +0200 @@ -60,6 +60,7 @@ import com.lowagie.text.rtf.graphic.RtfImage ;
import java.io.ByteArrayOutputStream ; +import java.io.OutputStream ; import java.io.IOException ; import java.util.ArrayList ;
@@ -131,11 +132,7 @@ public byte[] writeDocument() { ByteArrayOutputStream docStream = new ByteArrayOutputStream(); try { - docStream.write(OPEN_GROUP); - docStream.write(RtfDocument.RTF_DOCUMENT); - docStream.write(documentHeader.write()); - data.writeTo(docStream); - docStream.write(CLOSE_GROUP); + writeDocument(docStream); } catch(IOException ioe) { ioe.printStackTrace(); } @@ -143,6 +140,19 @@ }
/** + * Writes the document to the specified output stream + * + * @(protected) os The OutputStream to write to + */ + public void writeDocument(OutputStream os) throws IOException { + os.write(OPEN_GROUP); + os.write(RtfDocument.RTF_DOCUMENT); + os.write(documentHeader.write()); + data.writeTo(os); + os.write(CLOSE_GROUP); + } + + /** * Adds an element to the rtf document * * @(protected) element The element to add
-- Dirk Moebius Developer, Planning Support Systems E-Plus, Germany.
-- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 __ ____ ____ ____ ____ ____ ____ ____ ____ ____ iText-questions mailing list iText-questions@(protected) https://lists.sourceforge.net/lists/listinfo/itext-questions
|
|
 |