Convert text into PDF

Shaded picture Shaded · Jan 14, 2011 · Viewed 18.9k times · Source

I have a huge string of text that is apparently raw data for a PDF file, and I need to make it back into a PDF.

Currently I'm reading the string into a StringBuffer but if I need to I can change that. From there I have tried just writing it out to a file and changing the extension (I really hoped that worked, but I kinda knew it wouldn't), I've tried taking it to a String then getting a byte[] out of it and writing that to the file or using a DataOutputStream to put the bytes into the file. None of these has seemed to work.

I've also tried using the iText plugin, I tried just writing it to a pdf through that and I also tried reading the text as a pdf and then copying it page by page to a new pdf. Neither of these have returned very good results.

It's Friday afternoon, I'm tapped, any suggestions will be a huge help!

Answer

RealHowTo picture RealHowTo · Jan 15, 2011

The iText approach is the right one. You can do something like this :

import java.io.*;

import com.lowagie.text.*;
import com.lowagie.text.pdf.*;

public class TextFileToPDF {

  /*
     ex. java TextFileToPDF  c:\temp\text.txt  c:\temp\text.pdf
  */
  public static void main (String [] args){
    BufferedReader input = null;
    Document output = null;
    System.out.println("Convert text file to pdf");
    System.out.println("input  : " + args[0]);
    System.out.println("output : " + args[1]);
    try {
      // text file to convert to pdf as args[0]
      input = 
        new BufferedReader (new FileReader(args[0]));
      // letter 8.5x11
      //    see com.lowagie.text.PageSize for a complete list of page-size constants.
      output = new Document(PageSize.LETTER, 40, 40, 40, 40);
      // pdf file as args[1]
      PdfWriter.getInstance(output, new FileOutputStream (args[1]));

      output.open();
      output.addAuthor("RealHowTo");
      output.addSubject(args[0]);
      output.addTitle(args[0]);

      String line = "";
      while(null != (line = input.readLine())) {
        System.out.println(line);
        Paragraph p = new Paragraph(line);
        p.setAlignment(Element.ALIGN_JUSTIFIED);
        output.add(p);
      }
      System.out.println("Done.");
      output.close();
      input.close();
      System.exit(0);
    }
    catch (Exception e) {
      e.printStackTrace();
      System.exit(1);
    }
  }
}