Click here to Skip to main content
14,211,379 members
Click here to Skip to main content

Gios PDF .NET library

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

Introduction

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.

Background

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!):

myPdfTable.ImportDataTable(Table);

Set the format for correct date-time representation:

myPdfTable.Columns[2].SetContentFormat("{0:dd/MM/yyyy}");

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

myPdfTable.HeadersRow.SetColors(Color.White,Color.Navy);
myPdfTable.SetColors(Color.Black,Color.White,Color.Gainsboro);
myPdfTable.SetBorders(Color.Black,1,BorderType.CompleteGrid);

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:

myPdfTable.Rows[7].SetColors(Color.Black,Color.LightGreen);

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

myPdfTable.SetContentAlignment(ContentAlignment.MiddleCenter);                      
myPdfTable.Columns[1].SetContentAlignment(ContentAlignment.MiddleLeft);

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... 

    newPdfPage.Add(newPdfTablePage);
    newPdfPage.Add(pta);

    // 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);
          pc.StrokeWidth=3.5;
          newPdfPage.Add(pc);
       }

    // we save each generated page before start rendering the next.
    newPdfPage.SaveToDocument();

}

At last... remember to save the document!

myPdfDocument.SaveToFile("Example1.pdf");

And this is the result:

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

Response.ClearHeaders();
Response.AppendHeader("Content-disposition", 
   string.Format("attachment;filename={0}","Report.pdf"));
Response.ContentType="application/pdf"; 
myPdfDocument.SaveToStream(Response.OutputStream);
Response.End();

History

  • April 18, 2005 - Initial release.

License

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

Share

About the Author

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

I live in Torino, Italy

my homepage is: http://www.paologios.com

Comments and Discussions

 
GeneralGraphics Object Pin
romias27-Jun-05 5:16
memberromias27-Jun-05 5:16 
GeneralNeeding to restart IIS Pin
Mad_Force22-Jun-05 13:40
memberMad_Force22-Jun-05 13:40 
GeneralRe: Needing to restart IIS Pin
Annonic24-Jun-05 0:27
memberAnnonic24-Jun-05 0:27 
GeneralRe: Needing to restart IIS Pin
Mad_Force30-Jun-05 16:17
memberMad_Force30-Jun-05 16:17 
Generaladding attachments into existing PDF Pin
xjli9-Jun-05 12:14
memberxjli9-Jun-05 12:14 
GeneralSuggestion for 2.0 Pin
VBGeek20005-Jun-05 15:59
memberVBGeek20005-Jun-05 15:59 
GeneralRe: Suggestion for 2.0 Pin
Paolo Gios5-Jun-05 20:48
memberPaolo Gios5-Jun-05 20:48 
GeneralAcrobat error opening output PDF Pin
adambl31-May-05 5:42
professionaladambl31-May-05 5:42 
Hello,

Thanks very much for your library - it has really helped to demystify PDF generation for me.

One problem I have is that when I run your examples, and then open up the output PDFs in Acrobat, Acrobat (briefly) displays a 'Rebuild' message, which says 'This file is damaged but is being repaired'.

I cannot see what part of the PDF is causing this and wondered if anyone can explain why this is happening, and how to fix it?

Thank, Adam
GeneralRe: Acrobat error opening output PDF Pin
Paolo Gios31-May-05 5:48
memberPaolo Gios31-May-05 5:48 
GeneralRe: Acrobat error opening output PDF Pin
adambl31-May-05 6:30
professionaladambl31-May-05 6:30 
GeneralRe: Acrobat error opening output PDF Pin
Paolo Gios31-May-05 6:45
memberPaolo Gios31-May-05 6:45 
GeneralRe: Acrobat error opening output PDF Pin
pipakin23-Aug-05 10:02
memberpipakin23-Aug-05 10:02 
GeneralRe: Acrobat error opening output PDF Pin
User 192590126-Aug-05 19:31
memberUser 192590126-Aug-05 19:31 
GeneralRe: Acrobat error opening output PDF Pin
pipakin29-Aug-05 3:41
memberpipakin29-Aug-05 3:41 
GeneralRe: Acrobat error opening output PDF Pin
ValeriyP16-Nov-05 8:28
memberValeriyP16-Nov-05 8:28 
GeneralRe: Acrobat error opening output PDF Pin
pipakin22-Nov-05 17:05
memberpipakin22-Nov-05 17:05 
NewsRe: Acrobat error opening output PDF Pin
nicole198229-Nov-06 17:19
membernicole198229-Nov-06 17:19 
GeneralColumn Headers Pin
VBGeek200026-May-05 12:28
memberVBGeek200026-May-05 12:28 
GeneralRe: Column Headers Pin
Paolo Gios26-May-05 12:32
memberPaolo Gios26-May-05 12:32 
GeneralRe: Column Headers Pin
VBGeek200026-May-05 12:43
memberVBGeek200026-May-05 12:43 
GeneralSupport for Win-1250 character set Pin
marwelous26-May-05 2:45
membermarwelous26-May-05 2:45 
GeneralRe: Support for Win-1250 character set Pin
infal17-Jun-05 1:39
memberinfal17-Jun-05 1:39 
GeneralRe: Support for Win-1250 character set Pin
marwelous21-Jun-05 23:31
membermarwelous21-Jun-05 23:31 
GeneralRe: Support for Win-1250 character set Pin
infal22-Jun-05 1:59
memberinfal22-Jun-05 1:59 
GeneralAutoCad Dwg Pin
dassouki25-May-05 11:27
memberdassouki25-May-05 11:27 

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.

Layout: fixed | fluid
Posted 18 Apr 2005

Article Copyright 2005 by Paolo Gios
Everything else Copyright © CodeProject, 1999-2019

Server Web01
Version 2.8.190619.1