Click here to Skip to main content
6,595,854 members and growing! (17,739 online)
Email Password   helpLost your password?
Multimedia » General Graphics » PDF     Intermediate License: The GNU Lesser General Public License

Gios PDF .NET library

By Paolo Gios

A .NET library for generating impressive PDF reports.
C#, Windows, .NET 1.1VS.NET2003, Dev
Posted:18 Apr 2005
Views:362,509
Bookmarked:473 times
Announcements
Loading...
 
Search    
Advanced Search
Add to IE Search
Prize winner in Competition "C# Mar 2005"
printPrint   add Share
      Discuss Discuss   Broken Article?Report  
138 votes for this article.
Popularity: 10.33 Rating: 4.83 out of 5
1 vote, 0.7%
1
1 vote, 0.7%
2
2 votes, 1.4%
3
13 votes, 9.4%
4
121 votes, 87.7%
5

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

About the Author

Paolo Gios


Member
Freelance software ASPNET / C# Software Developer

I live in Torino, Italy

my homepage is: http://www.paologios.com
Occupation: Web Developer
Location: Italy Italy

Other popular General Graphics articles:

  • A flexible charting library for .NET
    Looking for a way to draw 2D line graphs with C#? Here's yet another charting class library with a high degree of configurability, that is also easy to use.
  • CxImage
    CxImage is a C++ class to load, save, display, transform BMP, JPEG, GIF, PNG, TIFF, MNG, ICO, PCX, TGA, WMF, WBMP, JBG, J2K images.
  • 3D Pie Chart
    A class library for drawing 3D pie charts.
  • Barcode Image Generation Library
    This library was designed to give an easy class for developers to use when they need to generate barcode images from a string of data.
  • ImageStone
    An article on a library for image manipulation.
Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 25 of 316 (Total in Forum: 316) (Refresh)FirstPrevNext
GeneralSupper? Pinmemberntxsoft22hrs 59mins ago 
QuestionHow to add url link to pdf [modified] Pinmembervishal yadav1:56 30 Oct '09  
Generalconvert JPG to PDF file in C# Pinmembervijaykumarp22:49 17 Sep '09  
GeneralText overflow when generate PDF [modified] Pinmemberhungho22:48 14 Sep '09  
GeneralProblem with SetContentFormat Pinmemberirfanraza1:09 2 Sep '09  
GeneralLink to download is broken PinmemberYhair Alexander4:11 31 Jul '09  
GeneralError generating document PinmemberAruSivaji3:19 6 Jul '09  
GeneralFont problem??? PinmemberThomas0000723:50 5 Jul '09  
GeneralDifferent page sizes? PinmemberMember 467835121:18 21 May '09  
GeneralView PDF file in winform Pinmemberaldo hexosa0:05 23 Apr '09  
GeneralRe: View PDF file in winform PinmemberMember 467835123:30 21 May '09  
QuestionBlank Pdf Pinmembercheyenae7:55 16 Apr '09  
QuestionPDF document Blank PinmemberMeetha19:46 3 Apr '09  
QuestionRe: PDF document Blank Pinmemberchhchhstock12:19 13 Apr '09  
Generalerror... PinmemberPraksh4:53 22 Mar '09  
GeneralThanks...this is excellent! Pinmemberpatrickst17:29 20 Mar '09  
QuestionHow to generate PDF report from datagrid using Gios PDF .NET library? [modified] Pinmembermobzam6:04 5 Dec '08  
Questionunable to convert .doc to pdf file PinmemberMember 423193319:59 26 Nov '08  
QuestionIssue with Memorystream to pdf image object [modified] Pinmemberdeepakbs_smg21:25 24 Nov '08  
Generaloverflow problem Pinmemberpfa15:23 21 Nov '08  
GeneralHow to add Header and Footer for each page Pinmemberspatil198221:17 19 Nov '08  
GeneralNot working Pinmemberspatil19823:28 18 Nov '08  
GeneralGiospdf version 2 Pinmemberjake19752:47 19 Sep '08  
GeneralmyPdfTable.getHeight() Pinmembersuperbem9:37 28 Aug '08  
GeneralHide column Pinmembersuperbem6:26 25 Aug '08  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 18 Apr 2005
Editor: Smitha Vijayan
Copyright 2005 by Paolo Gios
Everything else Copyright © CodeProject, 1999-2009
Web22 | Advertise on the Code Project