dcsimg

Generating a PDF Document Using C#, .NET, and iText 7

By Chandra Kudumula

Introduction

This article is about generating PDF documents using C#, .NET, and the iText library. I had a requirement to generate an invoice as a PDF document for one of the projects I worked on. In my research, I came to know about iText. iText is a library for creating and manipulating PDF files in .NET and Java.

Prerequisites

Setting Up the Project

Step 1: Create the Console App Using Visual Studio

In Visual Studio, go to File -> New -> Project.

On the "New Project window", select the Console App(.NET Framework) and give the project a name, as shown in Figure 1.

Selecting the Console App(.NET Framework)
Figure 1: Selecting the Console App(.NET Framework)

Step 2: Install iText 7 Using "Manage NuGet Packages…"

Right-click the project name and select "Manage NuGet Packages…". You can see this in Figure 2.

Selecting NuGet Packages
Figure 2: Selecting NuGet Packages

Select "Browse" and, in the search box, type itext7 and select itext7 from the searched results and install (see Figure 3).

Selecting itext7
Figure 3: Selecting itext7

Following are the helpful classes and methods to generate the PDF document:

  • PdfWriter: To pass the file name and write content to the document.
  • PdfDocument: In-memory representation of the PDF document. It will open a PDF document in writing mode.
  • Document: Creates a document from in-memory PdfDocument.
  • Paragraph: Creates a paragraph, initialized with some text.
  • SetFontSize: Sets the font size of the text.
  • SetTextAlignment: Sets the text alignment, such as Left, Right, Center, and so forth.

I will add a Header, SubHeader, Line Separator, Image, Table, Hyperlink, and finally page numbers to the PDF document.

A. Adding a Header

Add a header to the PDF document. Header Content is center aligned to the document and I set the font size to 20. We can achieve this by creating a paragraph object. Following is the code snippet to create a paragraph object and add it to the document object. Finally, we need to close the document object by calling the Close() method.

using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;

namespace GeneratePdfDemo
{
   class Program
   {
      static void Main(string[] args)
      {
         // Must have write permissions to the path folder
         PdfWriter writer = new PdfWriter("C:\\demo.pdf");
         PdfDocument pdf = new PdfDocument(writer);
         Document document = new Document(pdf);
         Paragraph header = new paragraph("HEADER")
            .SetTextAlignment(TextAlignment.CENTER)
            .SetFontSize(20);

         document.Add(header);
         document.Close();
      }
   }
}

Run the program and go to the path specified in PdfWriter and open the PDF document. Figure 4 is the image of a PDF document with header text.

Showing the header text
Figure 4: Showing the header text

B. Creating a Sub Header

Create a Sub Header with text alignment center and set the font size to 15. Add this Sub Header to the document object, as shown in Figure 5.

Paragraph subheader = new Paragraph("SUB HEADER")
   .SetTextAlignment(TextAlignment.CENTER)
   .SetFontSize(15);
document.Add(subheader);

Creating the Sub Header
Figure 5: Creating the Sub Header

C. Adding a Horizontal Separator Line

Add a horizontal line using Line Separator. This is shown in Figure 6.

         // Line separator
         LineSeparator ls = new LineSeparator(new SolidLine());
         document.Add(ls);

Creating the separator line
Figure 6: Creating the separator line

D. Adding an Image

Add an Image to the PDF document by using an Image instance (see Figure 7).

         // Add image
         Image img = new Image(ImageDataFactory
            .Create(@"..\..\image.jpg"))
            .SetTextAlignment(TextAlignment.CENTER);
         document.Add(img);

Adding an image
Figure 7: Adding an image

E. Creating a Table

Create a Table and add it to the document, as shown in Figure 8.

         // Table
            Table table = new Table(2, false);
               Cell cell11 = new Cell(1, 1)
                  .SetBackgroundColor(ColorConstants.GRAY)
                  .SetTextAlignment(TextAlignment.CENTER)
                  .Add(new Paragraph("State"));
               Cell cell12 = new Cell(1, 1)
                  .SetBackgroundColor(ColorConstants.GRAY)
                  .SetTextAlignment(TextAlignment.CENTER)
                  .Add(new Paragraph("Capital"));

               Cell cell21 = new Cell(1, 1)
                  .SetTextAlignment(TextAlignment.CENTER)
                  .Add(new Paragraph("New York"));
               Cell cell22 = new Cell(1, 1)
                  .SetTextAlignment(TextAlignment.CENTER)
                  .Add(new Paragraph("Albany"));

               Cell cell31 = new Cell(1, 1)
                  .SetTextAlignment(TextAlignment.CENTER)
                  .Add(new Paragraph("New Jersey"));
               Cell cell32 = new Cell(1, 1)
                  .SetTextAlignment(TextAlignment.CENTER)
                  .Add(new Paragraph("Trenton"));

               Cell cell41 = new Cell(1, 1)
                  .SetTextAlignment(TextAlignment.CENTER)
                  .Add(new Paragraph("California"));
               Cell cell42 = new Cell(1, 1)
                  .SetTextAlignment(TextAlignment.CENTER)
                  .Add(new Paragraph("Sacramento"));

               table.AddCell(cell11);
               table.AddCell(cell12);
               table.AddCell(cell21);
               table.AddCell(cell22);
               table.AddCell(cell31);
               table.AddCell(cell32);
               table.AddCell(cell41);
               table.AddCell(cell42);
               document.Add(table);

Adding a table
Figure 8: Adding a table

F. Creating a Hyperlink

Create a Hyperlink and add it to the document (see Figure 9).

         // Hyper link
         Link link = new Link("click here",
            PdfAction.CreateURI("https://www.google.com"));
         Paragraph hyperLink = new Paragraph("Please ")
            .Add(link.SetBold().SetUnderline()
            .SetItalic().SetFontColor(ColorConstants.BLUE))
            .Add(" to go www.google.com.");

         document.Add(newline);
         document.Add(hyperLink);

Adding a hyperlink
Figure 9: Adding a hyperlink

G. Adding Page Numbers

Add Page numbers at the top right corner of the page, as shown in Figure 10.

         // Page numbers
         int n = pdf.GetNumberOfPages();
         for (int i = 1; i <= n; i++)
         {
            document.ShowTextAligned(new Paragraph(String
               .Format("page" + i + " of " + n)),
                559, 806, i, TextAlignment.RIGHT,
                VerticalAlignment.TOP, 0);
         }

Adding page numbers
Figure 10: Adding page numbers

Following is the complete code listing.

using iText.IO.Image;
using iText.Kernel.Colors;
using iText.Kernel.Pdf;
using iText.Kernel.Pdf.Action;
using iText.Kernel.Pdf.Canvas.Draw;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;
using System;

namespace GeneratePdfDemo
{
   class Program
   {
      static void Main(string[] args)
      {
         // Must have write permissions to the path folder
         PdfWriter writer = new PdfWriter("C:\\test\\demo.pdf");
         PdfDocument pdf = new PdfDocument(writer);
         Document document = new Document(pdf);

         // Header
         Paragraph header = new Paragraph("HEADER")
            .SetTextAlignment(TextAlignment.CENTER)
            .SetFontSize(20);

         // New line
         Paragraph newline = new Paragraph(new Text("\n"));

         document.Add(newline);
         document.Add(header);

         // Add sub-header
         Paragraph subheader = new Paragraph("SUB HEADER")
            .SetTextAlignment(TextAlignment.CENTER)
            .SetFontSize(15);
         document.Add(subheader);

         // Line separator
         LineSeparator ls = new LineSeparator(new SolidLine());
         document.Add(ls);

         // Add paragraph1
         Paragraph paragraph1 = new Paragraph("Lorem ipsum " +
            "dolor sit amet, consectetur adipiscing elit, " +
            "sed do eiusmod tempor incididunt ut labore " +
            "et dolore magna aliqua.");
         document.Add(paragraph1);

         // Add image
         Image img = new Image(ImageDataFactory
            .Create(@"..\..\image.jpg"))
            .SetTextAlignment(TextAlignment.CENTER);
         document.Add(img);

         // Table
         Table table = new Table(2, false);
         Cell cell11 = new Cell(1, 1)
            .SetBackgroundColor(ColorConstants.GRAY)
            .SetTextAlignment(TextAlignment.CENTER)
            .Add(new Paragraph("State"));
         Cell cell12 = new Cell(1, 1)
            .SetBackgroundColor(ColorConstants.GRAY)
            .SetTextAlignment(TextAlignment.CENTER)
            .Add(new Paragraph("Capital"));

         Cell cell21 = new Cell(1, 1)
            .SetTextAlignment(TextAlignment.CENTER)
            .Add(new Paragraph("New York"));
         Cell cell22 = new Cell(1, 1)
            .SetTextAlignment(TextAlignment.CENTER)
            .Add(new Paragraph("Albany"));

         Cell cell31 = new Cell(1, 1)
            .SetTextAlignment(TextAlignment.CENTER)
            .Add(new Paragraph("New Jersey"));
         Cell cell32 = new Cell(1, 1)
            .SetTextAlignment(TextAlignment.CENTER)
            .Add(new Paragraph("Trenton"));

         Cell cell41 = new Cell(1, 1)
            .SetTextAlignment(TextAlignment.CENTER)
            .Add(new Paragraph("California"));
         Cell cell42 = new Cell(1, 1)
            .SetTextAlignment(TextAlignment.CENTER)
            .Add(new Paragraph("Sacramento"));

         table.AddCell(cell11);
         table.AddCell(cell12);
         table.AddCell(cell21);
         table.AddCell(cell22);
         table.AddCell(cell31);
         table.AddCell(cell32);
         table.AddCell(cell41);
         table.AddCell(cell42);

         document.Add(newline);
         document.Add(table);

         // Hyper link
         Link link = new Link("click here",
            PdfAction.CreateURI("https://www.google.com"));
         Paragraph hyperLink = new Paragraph("Please ")
            .Add(link.SetBold().SetUnderline()
            .SetItalic().SetFontColor(ColorConstants.BLUE))
            .Add(" to go www.google.com.");

         document.Add(newline);
         document.Add(hyperLink);

         // Page numbers
         int n = pdf.GetNumberOfPages();
         for (int i = 1; i <= n; i++)
         {
            document.ShowTextAligned(new Paragraph(String
               .Format("page" + i + " of " + n)),
               559, 806, i, TextAlignment.RIGHT,
               VerticalAlignment.TOP, 0);
         }

         // Close document
         document.Close();
      }
   }
}

Conclusion

You have seen how to generate the PDF document by using C#, .NET, and the iText library. iText allows lot of customization to PDF documents. I hope this article will help someone who wants to generate PDF documents.



This article was originally published on January 21st, 2020

Related Articles

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date