iText

How to change the spacing between words and characters?

I want to set the text alignment to justified, but I don't want iText to add any extra space between the characters.

I don't want extra space between the characters (see figure 1). I prefer space between words as shown in figure 2.

2ASC2.jpg

With this code, I get the result shown in figure 1.

Java
public static void main(String[] args) throws DocumentException, IOException {
  Document document = newDocument();
  PdfWriter.getInstance(document, newFileOutputStream("abc.pdf"));
  BaseFont bf1 = BaseFont.createFont(
    BaseFont.TIMES_ROMAN, "iso-8859-9", BaseFont.EMBEDDED);
  Font font1 = newFont(bf1);
  document.open();
  Paragraph paragraph2 = new Paragraph();
  paragraph2.setAlignment(Element.ALIGN_JUSTIFIED);
  paragraph2.setFont(font1);
  paragraph2.setIndentationLeft(20);
  paragraph2.setIndentationRight(20);
  paragraph2.add("HelloWorld HelloWorld HelloWorld HelloWorld HelloWorld" + "HelloWorld HelloWorldHelloWorldHelloWorldHelloWorld" + "HelloWorld HelloWorld HelloWorld HelloWorldHelloWorldHelloWorld");
  document.add(paragraph2);
  document.close();
}

How can I change this code to get a result like in figure 2?

Posted on StackOverflow on Jun 16, 2015 by Osman Yilmaz

Please take a look at the SpaceCharRatioExample to find out how to create a PDF that looks like space_char_ratio.pdf:

Spacing between words

When you justify a paragraph, iText will add extra space between the words and between the characters. You can change this default like using the setSpacingRatio() method:

Java
public void manipulatePdf(String dest) throws IOException {
  PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
  Document doc = new Document(pdfDoc);
  Paragraph p = new Paragraph().
    .setSpacingRatio(1)
    .setTextAlignment(TextAlignment.JUSTIFIED)
    .setMarginLeft(20)
    .setMarginRight(20)
    .add("HelloWorld HelloWorld HelloWorld HelloWorld HelloWorld" +
      "HelloWorld HelloWorldHelloWorldHelloWorldHelloWorld" +
      "HelloWorld HelloWorld HelloWorld HelloWorldHelloWorldHelloWorld");
  doc.add(p);
  doc.close();
}

Click How to change the spacing between words and characters? if you want to see how to answer this question in iText 5.