package itext;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Arrays;
import java.util.List;

import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;

public class NonBreakingSpacesTest {

	public static void main(String[] args) throws Exception {
		byte[] pdf = generatePDF();

		FileOutputStream fos = null;
		try {
			File f = new File(args != null && args.length == 1 ? args[0] : "c:\\temp\\test.pdf");
			fos = new FileOutputStream(f);
			System.out.println("Saving to " + f.getAbsolutePath() + " length: " + pdf.length);
			fos.write(pdf);
			fos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	private static byte[] generatePDF() throws Exception {
		Document document = new Document(PageSize.LETTER);
		ByteArrayOutputStream baos = new ByteArrayOutputStream();

		PdfWriter writer = PdfWriter.getInstance(document, baos);
		document.open();
		Font fontNormal = new Font();
		fontNormal.setStyle(Font.NORMAL);

		Font fontBold = new Font();
		fontBold.setStyle(Font.BOLD);
		
		
		String text[] = new String[]{
				"This is a very purposely long sentence with no breaking spaces to demonstrate that " + 
		        "chunks with ", 
		        "different attributes within the same paragraph do not behave as expected."
		};

		
		/* ************************************** */
		
		/**
		 * PLEASE NOTE: This code replaces all spaces in the text[] variables with nbsp.
		 */
		
		for (int i=0; i<text.length; i++) 
			text[i] = text[i].replace(' ', '\u00a0');
		
		/* ************************************** */

		document.add(new Paragraph("This is \"normal\" text:"));
		
		Paragraph paragraph = new Paragraph();
		Chunk chunk = new Chunk(text[0], fontNormal);
		paragraph.add(chunk);
		
		chunk = new Chunk(text[1], fontNormal);
		paragraph.add(chunk);
		
		document.add(paragraph);


		
		document.add( Chunk.NEWLINE );
		document.add( Chunk.NEWLINE );


		
		document.add(new Paragraph("This is \"mixed attribute\" text:"));
		paragraph = new Paragraph();
		chunk = new Chunk(text[0], fontNormal);
		paragraph.add(chunk);
		
		chunk = new Chunk(text[1], fontBold);
		paragraph.add(chunk);
		
		document.add(paragraph);

		
		document.close();
		return baos.toByteArray();

	}
}
