Click here to Skip to main content
14,302,714 members

Gios PDF .NET library

Rate this:
4.90 (154 votes)
Please Sign up or sign in to vote.
4.90 (154 votes)
18 Apr 2005LGPL3
A .NET library for generating impressive PDF reports.

Image 1


This article describes how to use the Gios Pdf.NET open source library, a complete object-oriented .NET library for generating impressive reports with few lines of code.


I started writing this library because I really couldn’t find a good C# library for exporting my reports. When you open a PDF document with Notepad to find out if it’s possible to edit it… well… you change your mind!

...But if you download the PDF format specifications from Adobe’s official site… you can demystify everything!

In this article, it’s not my intention to teach “how to write a clone of my library” but “how to use it” … By the way, if you want to try to write your own library… try it: it’s not impossible and it's a good (and difficult!) exercise!

Using the code

Start instantiating the document with a new PdfDocument object. Remember to set the document format. In this case we specify width and height in centimeters. Document format is provided by the PdfDocumentFormat class:

PdfDocument myPdfDocument = 
  new PdfDocument(PdfDocumentFormat.InCentimeters(21,29.7));

Now we create a table of 100 lines, 6 columns and 4 points of padding:

PdfTable myPdfTable = 
  myPdfDocument.NewTable(new Font("Verdana",12),200,6,4);

Importing data from the datatables... (also column names for the headers!):


Set the format for correct date-time representation:


Now we set our Graphic Design: Colors and Borders...


With just one method, we can set the proportional width of the columns. It's a "percentage like" assignment, but the sum can be different from 100.

myPdfTable.SetColumnsWidth(new int[]{5,25,16,20,20,15});

You can also set colors for a range of cells, in this case, a row:


Now we set some alignment... for the whole table and then, for a column:


This is the most important feature of the library: each page generated by the table can be managed in all the details:

while (!myPdfTable.AllTablePagesCreated)
    // we create a new page to put the generation of the new TablePage:

    PdfPage newPdfPage=myPdfDocument.NewPage();
    PdfTablePage newPdfTablePage = 
      myPdfTable.CreateTablePage(new PdfArea(myPdfDocument,48,120,500,670));

    // we also put a Label 
    PdfTextArea pta=new PdfTextArea(new Font("Verdana",26, FontStyle.Bold), 
      Color.Red, new PdfArea(myPdfDocument,0,20,595,120), 
      ContentAlignment.MiddleCenter,"Contact List");

    // nice thing: we can put all the objects
    // in the following lines, so we can have
    // a great control of layer sequence... 


    // Now we create a loop for serching for people born in 1968. If we find
    // one, we will draw a circle over
    // the birthday cell. This is possible using the
    // the CellArea, that is the Area occupied by a rasterized Cell.
    for (int index=newPdfTablePage.FirstRow;index<=newPdfTablePage.LastRow;index++)
       if (((DateTime)myPdfTable.Rows[index][2].Content).Year==1968)
          PdfCircle pc=newPdfTablePage.CellArea(index,2).InnerCircle(Color.Blue,2);

    // we save each generated page before start rendering the next.


At last... remember to save the document!


And this is the result:

Image 2

Remember, you can also output the PDF to a generic Stream. These are the lines for a Web Response:



  • April 18, 2005 - Initial release.


This article, along with any associated source code and files, is licensed under The GNU Lesser General Public License (LGPLv3)


About the Author

Paolo Gios
Web Developer
Italy Italy
Freelance software ASPNET / C# Software Developer

I live in Torino, Italy

my homepage is:

Comments and Discussions

GeneralRe: I have the same problem Pin
Mad_Force16-Jun-05 19:11
memberMad_Force16-Jun-05 19:11 
GeneralRe: I have the same problem (fixed) Pin
Mad_Force16-Jun-05 19:45
memberMad_Force16-Jun-05 19:45 
GeneralPrinting the PDF. Pin
raindog10-May-05 10:25
memberraindog10-May-05 10:25 
GeneralRe: Printing the PDF. Pin
Paolo Gios12-May-05 20:47
memberPaolo Gios12-May-05 20:47 
GeneralRe: Printing the PDF. Pin
raindog13-May-05 6:51
memberraindog13-May-05 6:51 
GeneralPreloading a PDF document template Pin
gpadilla5-May-05 8:10
membergpadilla5-May-05 8:10 
GeneralRe: Preloading a PDF document template Pin
Paolo Gios5-May-05 10:36
memberPaolo Gios5-May-05 10:36 
GeneralImages on the fly Pin
NickNuss5-May-05 7:35
memberNickNuss5-May-05 7:35 
First of all, I would like to thank Mr. Gios for this excellent library.

There is an issue we are experiencing while using this library that I thought I would point out.

We are pulling images off of an imaging server and using this library to create a PDF document with pages for each image (multiple images per report). We are storing the images temporarily so we can use the pdf.NewImage() method (method only takes a file path string). We then have an .aspx page that opens the pdf document stored in a session variable in a new window using the SaveToStream() method so we don't have to store the PDF file anywhere, the user can decide to save it or not.

After looping through each image, creating a new page, adding the image to the page and adding the page to the document, we want to delete the temporary images from our server. But, we keep getting the "File is being used by another process" error. I believe there is a bitmap that needs to be disposed or a stream that needs to be closed somewhere. We are looking into the situation and hope to modify the library to suit our needs. I just thought I would share my comments in case anyone else is trying to accomplish the same task. Big Grin | :-D

Nicholas Nuss
Application Developer
GeneralRe: Images on the fly Pin
Paolo Gios5-May-05 10:31
memberPaolo Gios5-May-05 10:31 
GeneralRe: Images on the fly Pin
NickNuss6-May-05 12:15
memberNickNuss6-May-05 12:15 
GeneralRe: Images on the fly Pin
ed_rotthoff3-Jun-05 12:30
membered_rotthoff3-Jun-05 12:30 
GeneralInclude Images Pin
JK_net4-May-05 2:41
memberJK_net4-May-05 2:41 
GeneralRe: Include Images Pin
Paolo Gios4-May-05 3:10
memberPaolo Gios4-May-05 3:10 
GeneralAnother Problem please help Pin
Kelvin Ka Yiu Lok30-Apr-05 4:07
memberKelvin Ka Yiu Lok30-Apr-05 4:07 
GeneralRe: Another Problem please help Pin
anewark19-May-08 15:34
memberanewark19-May-08 15:34 
GeneralPlease help Pin
Kelvin Ka Yiu Lok30-Apr-05 4:05
memberKelvin Ka Yiu Lok30-Apr-05 4:05 
GeneralRe: Please help Pin
Diego F.12-May-05 10:34
memberDiego F.12-May-05 10:34 
Generalplease help Pin
Kelvin Ka Yiu Lok30-Apr-05 2:52
memberKelvin Ka Yiu Lok30-Apr-05 2:52 
QuestionHow to use this in VB.NET Pin
Kelvin Ka Yiu Lok29-Apr-05 1:29
memberKelvin Ka Yiu Lok29-Apr-05 1:29 
GeneralInfo Pin
Kevin Alexandre28-Apr-05 22:59
memberKevin Alexandre28-Apr-05 22:59 
GeneralRe: Info Pin
Paolo Gios28-Apr-05 23:09
memberPaolo Gios28-Apr-05 23:09 
GeneralSuggestion: Font-Embed Pin
Carlos Alberto Loth28-Apr-05 5:16
memberCarlos Alberto Loth28-Apr-05 5:16 
GeneralRe: Suggestion: Font-Embed Pin
Paolo Gios28-Apr-05 8:54
memberPaolo Gios28-Apr-05 8:54 
GeneralSuggestion... Pin
Uri Guy26-Apr-05 9:37
memberUri Guy26-Apr-05 9:37 
GeneralRe: Suggestion... Pin
Paolo Gios28-Apr-05 8:56
memberPaolo Gios28-Apr-05 8:56 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Posted 18 Apr 2005


558 bookmarked