Skip to main content
Skip table of contents

Logging mechanism

These examples were written in the context of the question How can I log the number of documents / bytes I've processed?

counterdemosyso

JAVA
package sandbox.logging;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.log.CounterFactory;
import com.itextpdf.text.log.SysoCounter;
import com.itextpdf.text.pdf.ColumnText;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.itextpdf.text.pdf.PdfWriter;

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

public class CounterDemoSyso {

    public static final String HELLO = "results/logging/hello.pdf";
    public static final String HELLO2 = "results/logging/hello2.pdf";
    public static void main(String[] args) throws IOException, DocumentException {
        CounterDemoSyso app = new CounterDemoSyso();
        app.initCounter();
        app.createPdf(HELLO);
        app.manipulatePdf(HELLO, HELLO2);
    }

    public void initCounter() throws IOException {
        File file = new File(HELLO);
        file.getParentFile().mkdirs();
        CounterFactory.getInstance().setCounter(new SysoCounter());
    }

    public void createPdf(String filename) throws IOException, DocumentException {
        Document document = new Document();
        PdfWriter.getInstance(document, new FileOutputStream(filename));
        document.open();
        document.add(new Paragraph("Hello World!"));
        document.close();
    }
    
    public void manipulatePdf(String src, String dest) throws IOException, DocumentException {
        PdfReader reader = new PdfReader(src);
        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
        PdfContentByte pagecontent = stamper.getOverContent(1);
        ColumnText.showTextAligned(pagecontent, Element.ALIGN_RIGHT,
                    new Phrase("Stamped text"), 559, 806, 0);
        stamper.close();
        reader.close();
    }
}

counterdemo

JAVA
package sandbox.logging;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.ExceptionConverter;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.log.Counter;
import com.itextpdf.text.log.CounterFactory;
import com.itextpdf.text.pdf.ColumnText;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.itextpdf.text.pdf.PdfWriter;

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;

public class CounterDemo {

    public static final String HELLO = "results/logging/hello.pdf";
    public static final String HELLO2 = "results/logging/hello2.pdf";
    protected MyCounter counter;
    
    public class MyCounter implements Counter {

        public static final String LOG = "results/logging/counter.txt";
        protected FileWriter writer;
        protected String yourClass;
        protected String iTextClass;
        
        public MyCounter(Class<?> klass) throws IOException {
            this.yourClass = klass.getName();
            writer = new FileWriter(LOG, true);
        }
        
        private MyCounter(Class<?> klass, String yourClass, FileWriter writer)
            throws IOException {
            this.yourClass = yourClass;
            this.iTextClass = klass.getName();
            this.writer = writer;
        }
        
        public Counter getCounter(Class<?> klass) {
            try {
                return new MyCounter(klass, yourClass, writer);
            } catch (IOException e) {
                throw new ExceptionConverter(e);
            }
        }

        public void read(long l) {
            if (writer == null)
                throw new RuntimeException("No writer defined!");
            try {
                writer.write(String.format(
                    "[%s:%s] %s: %s read\n", yourClass, iTextClass, new Date().toString(), l));
                writer.flush();
            } catch (IOException e) {
                throw new ExceptionConverter(e);
            }
        }

        public void written(long l) {
            if (writer == null)
                throw new RuntimeException("No writer defined!");
            try {
                writer.write(String.format(
                    "[%s:%s] %s: %s written\n", yourClass, iTextClass, new Date().toString(), l));
                writer.flush();
            } catch (IOException e) {
                throw new ExceptionConverter(e);
            }
        }
        
        public void close() throws IOException {
            writer.close();
        }
    }
    
    public static void main(String[] args) throws IOException, DocumentException {
        File file = new File(HELLO);
        file.getParentFile().mkdirs();
        CounterDemo app = new CounterDemo();
        app.initCounter();
        app.createPdf(HELLO);
        app.manipulatePdf(HELLO, HELLO2);
        app.closeCounter();
    }

    public void initCounter() throws IOException {
        counter = new MyCounter(getClass());
        CounterFactory.getInstance().setCounter(counter);
    }

    public void createPdf(String filename) throws IOException, DocumentException {
        // step 1
        Document document = new Document();
        // step 2
        PdfWriter.getInstance(document, new FileOutputStream(filename));
        // step 3
        document.open();
        // step 4
        document.add(new Paragraph("Hello World!"));
        // step 5
        document.close();
    }
    
    public void manipulatePdf(String src, String dest) throws IOException, DocumentException {
        PdfReader reader = new PdfReader(src);
        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
        PdfContentByte pagecontent = stamper.getOverContent(1);
        ColumnText.showTextAligned(pagecontent, Element.ALIGN_RIGHT,
                    new Phrase("Stamped text"), 559, 806, 0);
        stamper.close();
        reader.close();
    }

    public void closeCounter() throws IOException {
        counter.close();
    }
}
JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.