import java.io.File;
import java.io.IOException;

import com.gnostice.pdfone.PDFOne;
import com.gnostice.pdfone.PdfDocument;
import com.gnostice.pdfone.PdfException;
import com.gnostice.pdfone.PdfMeasurement;
import com.gnostice.pdfone.PdfPage;
import com.gnostice.pdfone.PdfRect;
import com.gnostice.pdfone.PdfTextFormatter;
import com.gnostice.pdfone.PdfWriter;

public class PdfTextFormatter_Examples
{
    // Activates the component PDFOne.jar
    static
    {
        PDFOne.activate("T95VZE:W8HBPVA:74VQ8QV:LO4V8",
            "9B1HRZAP:X5853ERNE:5EREMEGRQ:TX1R10");
    }

    public static void main(String[] args) throws IOException,
        PdfException
    {
        PdfTextFormatter_Examples obj = new
                                         PdfTextFormatter_Examples();

        // To try other examples, add the obj.<example_method>
        // accordingly. For example, try:
        // obj.FirstLinePosition_Example();
        obj.getAlignment_Example();
    }

    // This code segment retrieves the current setting for text
    // alignment and writes some text explaining the same.
    public void getAlignment_Example() throws IOException,
        PdfException
    {
        PdfWriter writer = PdfWriter.fileWriter(
                               new File(
                                   "PdfTextFormatter_getAlignment_"
                                   + "example.pdf"));

        PdfDocument document = new PdfDocument(writer);
        PdfPage page = new PdfPage();
        PdfTextFormatter formatter = new PdfTextFormatter();
        formatter = page.getTextFormatter();
        page.setMeasurementUnit(PdfMeasurement.MU_INCHES);

        // Checks current setting for text alignment
        switch (formatter.getAlignment())
        {
            case PdfTextFormatter.LEFT:
                page.writeText(
                        "Text is aligned to the left margin.",
                        new PdfRect(2, 1, 4, 1));                
                break;                
            case PdfTextFormatter.RIGHT:
                page.writeText(
                        "Text is aligned to the right margin.",
                        new PdfRect(2, 1, 4, 1));                
                break;
            case PdfTextFormatter.CENTER:
                page.writeText(
                        "Text is centered on the page.",
                        new PdfRect(2, 1, 4, 1));
                break;
            case PdfTextFormatter.JUSTIFIED:
                page.writeText(
                        "Text is justified to the side margins.",
                        new PdfRect(2, 1, 4, 1));                
                break;
        }

        // Draws margins for a better perspective
        page.drawLine(2, 1, 2, 4.2);
        page.drawLine(6, 1, 6, 4.2);

        document.add(page);
        document.setOpenAfterSave(true);
        document.write();
        writer.dispose();
    }

    // This code segment writes a paragraph four times but with
    // different alignment settings.
    public void setAlignment_Example() throws IOException,
        PdfException
    {
        PdfWriter writer = PdfWriter.fileWriter(
                               new File(
                                   "PdfTextFormatter_setAlignment_"
                                   + "example.pdf"));

        PdfDocument document = new PdfDocument(writer);
        PdfPage page = new PdfPage();
        PdfTextFormatter formatter = new PdfTextFormatter();
        formatter = page.getTextFormatter();
        page.setMeasurementUnit(PdfMeasurement.MU_INCHES);

        // Writes left-aligned text
        formatter.setAlignment(PdfTextFormatter.LEFT);
        page.writeText(
                "Four score and seven years ago...",
                new PdfRect(2, 1, 3, 1));

        // Writes right-aligned text
        formatter.setAlignment(PdfTextFormatter.RIGHT);
        page.writeText(
                "Four score and seven years ago...",
                new PdfRect(2, 2, 3, 1));

        // Writes center-aligned text
        formatter.setAlignment(PdfTextFormatter.CENTER);
        page.writeText(
                "Four score and seven years ago...",
                new PdfRect(2, 3, 3, 1));

        // Writes justified text
        formatter.setAlignment(PdfTextFormatter.JUSTIFIED);
        page.writeText(
                "Four score and seven years ago...",
                new PdfRect(2, 4, 3, 1));

        // Draws margins for perspective
        page.drawLine(2, 1, 2, 4.2);
        page.drawLine(5, 1, 5, 4.2);

        document.add(page);
        document.setOpenAfterSave(true);
        document.write();
        writer.dispose();
    }

    // This code segment obtains current setting for text wrapping
    // and writes a few lines of text. It then changes the setting 
    // and writes the same lines of text again at a different 
    // location to illustrate the difference.
    public void Wrap_Example() throws IOException, PdfException
    {
        PdfWriter writer = PdfWriter.fileWriter(
                               new File(
                                   "PdfTextFormatter_Wrap_"
                                   + "example.pdf"));

        PdfDocument document = new PdfDocument(writer);
        PdfPage page = new PdfPage();
        PdfTextFormatter formatter = new PdfTextFormatter();
        formatter = page.getTextFormatter();
        // Obtains current setting for text wrapping
        boolean wrap = formatter.isWrap();

        // Writes text under current setting
        if (wrap == PdfTextFormatter.WRAP)
        {
            page.writeText(
                    "[Text set to wrap.] "
                    + "Four score and seven years ago our fathers "
                    + "brought forth on this continent a new "
                    + "nation conceived in liberty and dedicated "
                    + "to the proposition that all men are created "
                    + "equal.", 
                    new PdfRect(100, 50, 400, 100));
            // Changes text wrap setting
            formatter.setWrap(PdfTextFormatter.NO_WRAP);
        }
        else
        {
            page.writeText(
                    "[Text not set to wrap.] "
                    + "Four score and seven years ago our fathers "
                    + "brought forth on this continent a new "
                    + "nation conceived in liberty and dedicated "
                    + "to the proposition that all men are created "
                    + "equal.",
                    new PdfRect(100, 50, 400, 100));

            // Changes text wrap setting
            formatter.setWrap(PdfTextFormatter.WRAP);
        }

        // Obtains new setting for text wrapping
        wrap = formatter.isWrap();

        // Writes text under new setting
        if (wrap == PdfTextFormatter.WRAP)
        {
            page.writeText(
                    "[Text set to wrap.] "
                    + "Four score and seven years ago our fathers "
                    + "brought forth on this continent a new "
                    + "nation conceived in liberty and dedicated "
                    + "to the proposition that all men are created "
                    + "equal.",
                    new PdfRect(100, 100, 400, 100));
        }
        else
        {
            page.writeText(
                    "[Text not set to wrap.] "
                    + "Four score and seven years ago our fathers "
                    + "brought forth on this continent a new "
                    + "nation conceived in liberty and dedicated "
                    + "to the proposition that all men are created "
                    + "equal.",
                    new PdfRect(100, 100, 400, 100));

        }

        document.add(page);
        document.setOpenAfterSave(true);
        document.write();
        writer.dispose();
    }
    // This code segment writes a few lines of text. First time, the
    // text is written using the default setting for the first line.
    // Second time, the setting is changed to 3 inches.
    public void FirstLinePosition_Example() throws IOException,
        PdfException
    {
        PdfWriter writer = PdfWriter.fileWriter(
                               new File(
                                   "PdfTextFormatter_"
                                   + "FirstLinePosition_"
                                   + "example.pdf"));

        PdfDocument document = new PdfDocument(writer);
        PdfPage page = new PdfPage();
        PdfTextFormatter formatter = new PdfTextFormatter();
        formatter = page.getTextFormatter();

        // Sets page measurement unit to inches
        page.setMeasurementUnit(PdfMeasurement.MU_INCHES);
        // Retrieves current first line position
        double position = formatter.getFirstLinePosition();

        // Writes a few lines of text
        page.writeText(
                "Four score and seven years ago our fathers "
                 + "brought forth on this continent a new "
                 + "nation conceived in liberty and dedicated "
                 + "to the proposition that all men are created "
                 + "equal. "
                 + " [First line at "
                 + position
                 + " inches]",
                 new PdfRect(2, 1, 4, 3));
        // Sets new first line position to 3 inches
        formatter.setFirstLinePosition(3);

        // Obtains new first line position
        position = formatter.getFirstLinePosition();

        // Writes the lines of text again
        page.writeText(
                "Four score and seven years ago our fathers "
                + "brought forth on this continent a new "
                + "nation conceived in liberty and dedicated "
                + "to the proposition that all men are created "
                + "equal. "
                + " [First line at "
                + position
                + " inches]",
                new PdfRect(2, 3, 4, 3));

        document.add(page);
        document.setOpenAfterSave(true);
        document.write();
        writer.dispose();
    }

    // This code segment writes a few lines of text. First time, the
    // last line is written using default setting for justification.
    // Second time, the last line is written using the opposition
    // setting.
    public void JustifyLastLine_Example() throws IOException,
        PdfException
    {
        PdfWriter writer = PdfWriter.fileWriter(
                               new File(
                                   "PdfTextFormatter_JustifyLastLine_"
                                   + "example.pdf"));

        PdfDocument document = new PdfDocument(writer);
        PdfPage page = new PdfPage();
        PdfTextFormatter formatter = new PdfTextFormatter();
        formatter = page.getTextFormatter();

        formatter.setAlignment(PdfTextFormatter.JUSTIFIED);
        // Obtains current alignment setting for last line
        boolean justified = formatter.isJustifyLastLine();

        // Writes a few lines of text
        page.writeText(
                "[Last line justification: "
                + justified
                + "] "
                + "Four score and seven years ago our fathers "
                + "brought forth on this continent a new nation "
                + "conceived in liberty and dedicated to the "
                + "proposition that all men are created equal.",
                new PdfRect(100, 50, 350, 50));
        // Sets last line setting to opposite of current setting
        formatter.setJustifyLastLine(!justified);

        // Obtains new alignment setting for last line
        justified = formatter.isJustifyLastLine();

        // Writes the lines of text again
        page.writeText(
                "[Last line justification: "
                + justified
                + "] "
                + "Four score and seven years ago our fathers "
                + "brought forth on this continent a new nation "
                + "conceived in liberty and dedicated to the "
                + "proposition that all men are created equal.",
                new PdfRect(100, 100, 350, 50));

        document.add(page);
        document.setOpenAfterSave(true);
        document.write();
        writer.dispose();
    }
}