Click here to Skip to main content
Click here to Skip to main content

Gios PDF .NET library

By , 18 Apr 2005
 
Prize winner in Competition "C# Mar 2005"

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)

About the Author

Paolo Gios
Web Developer
Italy Italy
Member
Freelance software ASPNET / C# Software Developer
 
I live in Torino, Italy
 
my homepage is: http://www.paologios.com

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
QuestionLandscape?memberKalpana Volety11 Jan '13 - 11:46 
AnswerRe: Landscape?professionalSyryusAx17 Apr '13 - 11:56 
QuestionGios Pdf.NET.dllmemberStrygor4 Sep '12 - 8:22 
QuestionGios-PDF-NET-librarymemberMember 879443230 Jul '12 - 1:16 
QuestionFont SupportmemberN Haque24 Jul '12 - 20:50 
QuestionSearch Documentmemberjibrownie1 Jul '12 - 8:03 
QuestionWrong char after converting PdfmemberN Haque22 May '12 - 23:15 
Hi,
I have used currency symbol ¥0.00 but when I produce a PDF report it shows ?0.00 instead of ¥0.00.
have you any idea how to solve this?

Thanks in advance.
 
My code was
 
PdfDocument myPdfDocument=new PdfDocument(PdfDocumentFormat.Letter_8_5x11_Horizontal);			
 
Font FontBold=new Font("Courier New",9,FontStyle.Bold);
PdfTextArea reportTest = new PdfTextArea(FontBold, Color.Black, new PdfArea(myPdfDocument, 50, 20, 750, 50), ContentAlignment.MiddleCenter, "testing Currency is ¥0.00 ");	
			
PdfPage newPdfPage=myPdfDocument.NewPage();
newPdfPage.Add(reportTest);
newPdfPage.SaveToDocument();
myPdfDocument.SaveToFile("Example3.pdf");

GeneralMy vote of 5membermanoj kumar choubey9 Feb '12 - 2:24 
QuestionAdd images in the pdf tablemembergalvin verghese13 Oct '11 - 1:01 
BugSend("startxref\n" + startxref+"\n"); [modified]memberinfal18 Sep '11 - 12:29 
QuestionWhere is V2.0?memberinfal16 Sep '11 - 1:35 
SuggestionActualize and permanently update the code.memberinfal15 Sep '11 - 1:26 
GeneralPage NumbersmemberJayveeJavier10 Feb '11 - 16:20 
GeneralRe: Page Numbersmembergalvin verghese13 Oct '11 - 1:07 
QuestionCan I use this in web pagesmemberarpan31 Oct '10 - 21:20 
AnswerRe: Can I use this in web pagesmembergalvin verghese2 Sep '11 - 23:26 
AnswerRe: Can I use this in web pagesmembergalvin verghese4 Sep '11 - 22:26 
GeneralMy vote of 3memberscefiro8 Aug '10 - 17:42 
GeneralRe: My vote of 3memberhazk7 Sep '10 - 8:56 
GeneralRe: My vote of 3membergalvin verghese13 Oct '11 - 1:15 
QuestionArabic Text supportmembermanmadhan12312 Jun '10 - 23:53 
GeneralThanks !memberftCalhouner3 May '10 - 12:53 
GeneralThis software sits full of bugsmemberMember 9328198 Feb '10 - 21:10 
GeneralAsolutely amazingmemberAndy Benton7 Dec '09 - 8:51 
QuestionHow to add a word [modified]memberdidier.barthe26 Nov '09 - 5:22 

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

Permalink | Advertise | Privacy | Mobile
Web01 | 2.6.130516.1 | Last Updated 19 Apr 2005
Article Copyright 2005 by Paolo Gios
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid