using System; using System.IO; using iTextSharp.text; using iTextSharp.text.pdf; public class Chap0112 { public static void Main() { Console.WriteLine("Chapter 1 example 12: reading an existing PDF file"); try { // we create a reader for a certain document PdfReader reader = new PdfReader("Chap0703.pdf"); // we retrieve the total number of pages int n = reader.NumberOfPages; // we retrieve the size of the first page Rectangle psize = reader.getPageSize(1); float width = psize.Width; float height = psize.Height; // step 1: creation of a document-object Document document = new Document(psize, 50, 50, 50, 50); // step 2: we create a writer that listens to the document PdfWriter writer = PdfWriter.getInstance(document, new FileStream("Chap0112.pdf", FileMode.Create)); // step 3: we open the document try { Watermark watermark = new Watermark(Image.getInstance("watermark.jpg"), 200, 320); document.Add(watermark); } catch(Exception e) { Console.Error.WriteLine("Are you sure you have the file 'watermark.jpg' in the right path?"); } document.Open(); // step 4: we add content PdfContentByte cb = writer.DirectContent; int i = 0; int p = 0; Console.WriteLine("There are " + n + " pages in the document."); while (i < n) { document.newPage(); p++; i++; PdfImportedPage page1 = writer.getImportedPage(reader, i); cb.addTemplate(page1, .5f, 0, 0, .5f, 0, height / 2); Console.WriteLine("processed page " + i); if (i < n) { i++; PdfImportedPage page2 = writer.getImportedPage(reader, i); cb.addTemplate(page2, .5f, 0, 0, .5f, width / 2, height / 2); Console.WriteLine("processed page " + i); } if (i < n) { i++; PdfImportedPage page3 = writer.getImportedPage(reader, i); cb.addTemplate(page3, .5f, 0, 0, .5f, 0, 0); Console.WriteLine("processed page " + i); } if (i < n) { i++; PdfImportedPage page4 = writer.getImportedPage(reader, i); cb.addTemplate(page4, .5f, 0, 0, .5f, width / 2, 0); Console.WriteLine("processed page " + i); } cb.setRGBColorStroke(255, 0, 0); cb.moveTo(0, height / 2); cb.lineTo(width, height / 2); cb.stroke(); cb.moveTo(width / 2, height); cb.lineTo(width / 2, 0); cb.stroke(); BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); cb.beginText(); cb.setFontAndSize(bf, 14); cb.showTextAligned(PdfContentByte.ALIGN_CENTER, "page " + p + " of " + ((n / 4) + (n % 4 > 0? 1 : 0)), width / 2, 40, 0); cb.endText(); } // step 5: we close the document document.Close(); } catch (Exception de) { Console.Error.WriteLine(de.Message); Console.Error.WriteLine(de.StackTrace); } } }