You are calling too many go(). Try with:
private void makeSmallMessage(String message) throws Exception {
// Create the columns
PdfContentByte cb = writer.getDirectContent();
ColumnText ct = new ColumnText(cb);
ct.addText(new Phrase(16, message, smallFont));
ct.setIndent(0);
ct.setLeading(6);
// Column ones's left and right borders
float[] left1 = {30,1050, 30,51};
float[] right1 = {200,1050, 200,81, 170,81, 170,51};
// Column two's left and right border
float[] left2 = {205,1050, 205,81};
float[] right2 = {390,1050, 390,81};
// Column 3
float[] left3 = {395,1050, 395,81, 450,81, 450,51};
float[] right3 = {565,1050, 565,51 };
int status = 0;
int column = 0;
// While there's still more text to print out
while ((status & ColumnText.NO_MORE_TEXT) == 0) {
// Set left column points
if (column == 0) {
ct.setColumns(left1, right1);
column = 1;
}
// Else set right column points
else if (column == 1) {
ct.setColumns(left2, right2);
column = 2;
}
else {
ct.setColumns(left3, right3);
column = 0;
}
// Print
//status = ct.go();
// Set top part of columns
ct.setYLine(800);
// Set alignment
ct.setAlignment(Element.ALIGN_JUSTIFIED);
status = ct.go();
// Go to a new page
if ((column == 0) && ((status & ColumnText.NO_MORE_COLUMN) != 0)) {
document.newPage();
}
}
// Print last bits
//ct.go();
}
Best Regards,
Paulo Soares
> -----Original Message-----
> From: Jacqueline S [SMTP:[EMAIL PROTECTED]
> Sent: Monday, September 01, 2003 1:05
> To: [EMAIL PROTECTED]
> Subject: [iText-questions] Re: columntext problems
>
> Hi Paulo,
>
> Below is my test program that creates a pdf document with three columns.
> For input I used a large plain text file, called /tmp/1.txt.
>
> Regards,
> Jacqueline
>
> /*
> * TestPdf.java
> *
> * Created on August 29, 2003, 2:48 PM
> */
> import java.io.*;
> import com.lowagie.text.*;
> import com.lowagie.text.pdf.PdfWriter;
> import com.lowagie.text.pdf.*;
> /**
> *
> * @author
> */
> public class TestPdf {
>
> Font smallFont;
> PdfWriter writer;
> Document document;
>
> /** Creates a new instance of TestPdf */
> public TestPdf() {
> }
>
> private void run() {
>
> try {
> ByteArrayOutputStream bos = new ByteArrayOutputStream();
> smallFont = new Font(Font.HELVETICA, 6);
>
> document = new Document(PageSize.A4, 36, 36, 36, 36);
> // Create a writer that listens to the document
> writer = PdfWriter.getInstance(document, bos);
>
> document.open();
> makeSmallMessage(readFile("/tmp/1.txt"));
> document.close();
> FileOutputStream fos = new FileOutputStream("/tmp/temp.pdf");
> fos.write(bos.toByteArray());
> fos.close();
> System.out.println("end");
>
>
> }
> catch (Exception e) {
> e.printStackTrace();
> }
> }
>
>
> //------------------------------------------------------------------------
> ------
> /**
> * Reads a file in and returns it as a string with \n separating each
> * line.
> *
> * @param fileName the filename to read in.
> * @return String contents of the file with \n separating each line
> * @throws FileNotFoundException if the file can't be found.
> * @throws IOException if there is an IO Exception.
> */
> public static String readFile(String fileName)
> throws java.io.FileNotFoundException, java.io.IOException {
> String returnVal = "";
>
> BufferedReader in = new BufferedReader(new FileReader(fileName));
> String str;
>
> while ((str = in.readLine()) != null) {
> returnVal = returnVal + str + "\n";
> }
> in.close();
> return returnVal;
> }
>
> private void makeSmallMessage(String message) throws Exception {
>
> // Create the columns
> PdfContentByte cb = writer.getDirectContent();
> ColumnText ct = new ColumnText(cb);
>
> ct.addText(new Phrase(16, message, smallFont));
> ct.setIndent(0);
> ct.setLeading(6);
>
>
> // Column ones's left and right borders
> float[] left1 = {30,1050, 30,51};
> float[] right1 = {200,1050, 200,81, 170,81, 170,51};
>
> // Column two's left and right border
> float[] left2 = {205,1050, 205,81};
> float[] right2 = {390,1050, 390,81};
>
> // Column 3
> float[] left3 = {395,1050, 395,81, 450,81, 450,51};
> float[] right3 = {565,1050, 565,51 };
>
> int status = 0;
> int column = 0;
>
> // While there's still more text to print out
> while ((status & ColumnText.NO_MORE_TEXT) == 0) {
>
> // Set left column points
> if (column == 0) {
> ct.setColumns(left1, right1);
> column = 1;
> }
> // Else set right column points
> else if (column == 1) {
> ct.setColumns(left2, right2);
> column = 2;
> }
> else {
> ct.setColumns(left3, right3);
> column = 0;
> }
>
> // Print
> status = ct.go();
>
> // Set top part of columns
> ct.setYLine(800);
>
> // Set alignment
> ct.setAlignment(Element.ALIGN_JUSTIFIED);
> status = ct.go();
>
> // Go to a new page
> if ((column == 0) && ((status & ColumnText.NO_MORE_COLUMN) != 0))
> {
> document.newPage();
> }
> }
> // Print last bits
> ct.go();
>
> }//makeSmallMessage
>
> /**
> * @param args the command line arguments
> */
> public static void main(String[] args) {
> TestPdf tp = new TestPdf();
> tp.run();
> }
>
> }
>
>
> Re: columntext problems
> Subject: Re: columntext problems
> From: "Paulo Soares" <psoares <at> consiste.pt>
> Date: Fri, 29 Aug 2003 16:01:46 +0100
> Newsgroups: gmane.comp.java.lib.itext.general
>
> I would like to see an example.
>
> Best Regards,
> Paulo Soares
>
> ----- Original Message -----
> From: "Jacqueline S" <white_wolf21 <at> hotmail.com>
> To: <itext-questions <at> lists.sourceforge.net>
> Sent: Friday, August 29, 2003 7:33
> Subject: [iText-questions] columntext problems
>
>
> >Hello,
> >
> >I've encountered some strange behaviour using columnText. I have three
> >
> >columns, and wish to have the words go around a picture in the bottom
> >centre, such as
> >
> >.......... .......... ..........
> >.......... .......... ..........
> >.......... .......... ..........
> >.......... .......... ..........
> >.......... ..........
> >
> >
> >What I'm finding is that instead of flowing down 1, then down 2 and down
> >3, if flows down 1, then down 2 (everything okay), but then the words
> that
> >should be at the stop of column 3, actually get inserted into column
> >three's area (but below the text in column 2). Eg, if the numbers
> indicate
> >the
> >flow of the words, it looks like this.
> >
> >1 6 11
> >2 7 12
> >3 8 13
> >4 9 14
> >5 10
> >
> >I'm guessing because the area "10" is below area 9, it puts the text
> >there, instead of filling out the top of column 3 first?
> >
> >I have example code demonstrating this, iif it will help. Any help you
> >can provide will be much appreciated.
> >
> >Regards
> >Jacqueline
>
> _________________________________________________________________
> Add photos to your messages with MSN 8. Get 2 months FREE*.
> http://join.msn.com/?page=features/featuredemail
>
>
>
> -------------------------------------------------------
> This sf.net email is sponsored by:ThinkGeek
> Welcome to geek heaven.
> http://thinkgeek.com/sf
> _______________________________________________
> iText-questions mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/itext-questions
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
iText-questions mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/itext-questions