Click here to Skip to main content
15,890,282 members
Articles / Programming Languages / C#
Article

Gios PDF .NET library

Rate me:
Please Sign up or sign in to vote.
4.89/5 (157 votes)
18 Apr 2005LGPL32 min read 2.2M   13.1K   558   358
A .NET library for generating impressive PDF reports.

Image 1

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:

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

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

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

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

C#
myPdfTable.ImportDataTable(Table);

Set the format for correct date-time representation:

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

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

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

C#
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:

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

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

C#
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:

C#
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!

C#
myPdfDocument.SaveToFile("Example1.pdf");

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:

C#
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)


Written By
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

 
Questionhow to add a chart to a cell in a table?? Pin
sarodam8-Aug-07 19:44
sarodam8-Aug-07 19:44 
GeneralSupport for portuguese characters Pin
andre_monteiro26-Jul-07 0:04
andre_monteiro26-Jul-07 0:04 
GeneralException on "Height must be grater than zero." Pin
Chi Chi5-Jul-07 22:23
Chi Chi5-Jul-07 22:23 
GeneralRe: Exception on "Height must be grater than zero." Pin
mayur sharma8-Jul-07 18:19
mayur sharma8-Jul-07 18:19 
GeneralFailed to retailn "/" character in PDF document Pin
mayur sharma26-Jun-07 3:25
mayur sharma26-Jun-07 3:25 
GeneralHebrew Pin
shmulik25-Jun-07 11:29
shmulik25-Jun-07 11:29 
GeneralMerge drops pages Pin
tom.brune22-Jun-07 11:26
tom.brune22-Jun-07 11:26 
QuestionError in pdf generation Pin
Justin_Joseph11-Jun-07 22:51
Justin_Joseph11-Jun-07 22:51 
I am having a really weird kind of a problem, when my text is having brackets (eg:
The purpose of this (agreement is to define acceptable and unacceptable behaviour when using ABC computing facility) and to clarify what actions may be taken if the agreement is breached.

)

When i write this statement into the pdf document i get some garbage text attached with the above statment and some part of the statement also goes missing. This error only occurs if there are brackets in the text, like the one above, and spans two lines in the pdf.(ie the open bracket is on the first line and the closing bracket is on the second line in the pdf.).

Text from Gios generated pdf for the above statement.

The purpose of this (agreement is to define acceptable and unacceptable ) Tj1 0 0 1 208.5 be taken if the agreement is breached.

If the open and close brackets is on the same line there is no problem.This problem only occures with circular brackets ( ).

The Gios version i am using is 1.0.2503.25090


QuestionConversion to CHAR? Pin
albert pender14-May-07 7:49
albert pender14-May-07 7:49 
AnswerRe: Conversion to CHAR? Pin
Marc Heiligers29-May-07 1:10
Marc Heiligers29-May-07 1:10 
GeneralRe: Conversion to CHAR? Pin
albert pender4-Jun-07 5:47
albert pender4-Jun-07 5:47 
GeneralRe: Conversion to CHAR? Pin
mCallegario3-Aug-07 9:47
mCallegario3-Aug-07 9:47 
GeneralRe: Conversion to CHAR? Pin
Southmountain23-Jul-22 11:07
Southmountain23-Jul-22 11:07 
QuestionChinese problem in PDFText Pin
Ben Lai2-May-07 14:43
Ben Lai2-May-07 14:43 
AnswerRe: Chinese problem in PDFText Pin
Paolo Gios2-May-07 22:51
Paolo Gios2-May-07 22:51 
QuestionRe: Chinese problem in PDFText Pin
kenFZ23-Sep-07 7:02
kenFZ23-Sep-07 7:02 
QuestionUnicode??? Pin
Bich Van19-Apr-07 16:07
Bich Van19-Apr-07 16:07 
AnswerRe: Unicode??? Pin
Paolo Gios2-May-07 22:51
Paolo Gios2-May-07 22:51 
Generalheader/Details Report Pin
MarkTwain16-Apr-07 13:24
MarkTwain16-Apr-07 13:24 
GeneralRe: header/Details Report Pin
Paolo Gios2-May-07 23:09
Paolo Gios2-May-07 23:09 
QuestionHow can i draw the border line for the page being generated Pin
Suman Rayabharapu8-Apr-07 22:40
Suman Rayabharapu8-Apr-07 22:40 
QuestionCan i generate Pie Charts in PDF Pin
Suman Rayabharapu8-Apr-07 22:37
Suman Rayabharapu8-Apr-07 22:37 
QuestionError Generating Document Pin
padmakumarg3-Apr-07 3:09
padmakumarg3-Apr-07 3:09 
AnswerRe: Error Generating Document Pin
polisen17-Jun-07 20:59
polisen17-Jun-07 20:59 
GeneralRe: Error Generating Document Pin
eldeejay1-Nov-07 4:14
eldeejay1-Nov-07 4:14 

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.