Click here to Skip to main content
11,632,778 members (86,676 online)
Click here to Skip to main content

Gios PDF .NET library

, 18 Apr 2005 LGPL3 1.1M 10.8K 553
Rate this:
Please Sign up or sign in to vote.
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

You may also be interested in...

Comments and Discussions

 
QuestionGood work Pin
ottilia7-May-15 9:03
memberottilia7-May-15 9:03 
QuestionPDF files not opening in the Windows 8 Metro PDF reader Pin
tanioskahi11-Oct-13 3:37
membertanioskahi11-Oct-13 3:37 
AnswerRe: PDF files not opening in the Windows 8 Metro PDF reader Pin
infal2-Dec-13 4:36
memberinfal2-Dec-13 4:36 
GeneralRe: PDF files not opening in the Windows 8 Metro PDF reader Pin
infal2-Dec-13 4:40
memberinfal2-Dec-13 4:40 
QuestionCan u Extend this to Read pdf Pin
pra2716-Jul-13 23:13
memberpra2716-Jul-13 23:13 
QuestionLandscape? Pin
Kalpana Volety11-Jan-13 11:46
memberKalpana Volety11-Jan-13 11:46 
AnswerRe: Landscape? Pin
SyryusAx17-Apr-13 11:56
professionalSyryusAx17-Apr-13 11:56 
QuestionGios Pdf.NET.dll Pin
Strygor4-Sep-12 8:22
memberStrygor4-Sep-12 8:22 
QuestionGios-PDF-NET-library Pin
Member 879443230-Jul-12 1:16
memberMember 879443230-Jul-12 1:16 
QuestionFont Support Pin
N Haque24-Jul-12 20:50
memberN Haque24-Jul-12 20:50 
QuestionSearch Document Pin
jibrownie1-Jul-12 8:03
memberjibrownie1-Jul-12 8:03 
QuestionWrong char after converting Pdf Pin
N Haque22-May-12 23:15
memberN Haque22-May-12 23:15 
GeneralMy vote of 5 Pin
manoj kumar choubey9-Feb-12 2:24
membermanoj kumar choubey9-Feb-12 2:24 
QuestionAdd images in the pdf table Pin
galvin verghese13-Oct-11 1:01
membergalvin verghese13-Oct-11 1:01 
BugSend("startxref\n" + startxref+"\n"); [modified] Pin
infal18-Sep-11 12:29
memberinfal18-Sep-11 12:29 
QuestionWhere is V2.0? Pin
infal16-Sep-11 1:35
memberinfal16-Sep-11 1:35 
SuggestionActualize and permanently update the code. Pin
infal15-Sep-11 1:26
memberinfal15-Sep-11 1:26 
Because this is still amazing library for today, it will be really very nice to update the code. The new code should implement all improvements posted here and 'privatelly' hosted and changed via mail.

Also new improvements should be continuosly integrated and code updated. At the beginning it could be probably possible to post (and update) all changes/improvements inside ONE forum message.

Can thuch thing be done on CodeProject with some smart tool like "Code Changes" - so each can see all changes and update their code at once? Is it possible to do within this project or a new one should be started?

Could it be helpfull to merge this project with this one: PDF Library for creating PDF with tables and text, in C#[^]

Thanks in advice for is your suggestion!
Alex
GeneralPage Numbers Pin
JayveeJavier10-Feb-11 16:20
memberJayveeJavier10-Feb-11 16:20 
GeneralRe: Page Numbers Pin
galvin verghese13-Oct-11 1:07
membergalvin verghese13-Oct-11 1:07 
QuestionCan I use this in web pages Pin
arpan31-Oct-10 21:20
memberarpan31-Oct-10 21:20 
AnswerRe: Can I use this in web pages Pin
galvin verghese2-Sep-11 23:26
membergalvin verghese2-Sep-11 23:26 
AnswerRe: Can I use this in web pages Pin
galvin verghese4-Sep-11 22:26
membergalvin verghese4-Sep-11 22:26 
GeneralMy vote of 3 Pin
scefiro8-Aug-10 17:42
memberscefiro8-Aug-10 17:42 
GeneralRe: My vote of 3 Pin
hazk7-Sep-10 8:56
memberhazk7-Sep-10 8:56 
GeneralRe: My vote of 3 Pin
galvin verghese13-Oct-11 1:15
membergalvin verghese13-Oct-11 1:15 
QuestionArabic Text support Pin
manmadhan12312-Jun-10 23:53
membermanmadhan12312-Jun-10 23:53 
GeneralThanks ! Pin
ftCalhouner3-May-10 12:53
memberftCalhouner3-May-10 12:53 
GeneralThis software sits full of bugs Pin
Member 9328198-Feb-10 21:10
memberMember 9328198-Feb-10 21:10 
GeneralAsolutely amazing Pin
Andy Benton7-Dec-09 8:51
memberAndy Benton7-Dec-09 8:51 
QuestionHow to add a word [modified] Pin
didier.barthe26-Nov-09 5:22
memberdidier.barthe26-Nov-09 5:22 
AnswerRe: How to add a word Pin
didier.barthe26-Nov-09 19:42
memberdidier.barthe26-Nov-09 19:42 
GeneralRe: How to add a word Pin
galvin verghese13-Oct-11 1:17
membergalvin verghese13-Oct-11 1:17 
QuestionSupper? Pin
ntxsoft7-Nov-09 19:19
memberntxsoft7-Nov-09 19:19 
QuestionHow to add url link to pdf [modified] Pin
vishal yadav30-Oct-09 0:56
membervishal yadav30-Oct-09 0:56 
AnswerRe: How to add url link to pdf Pin
Rajkumar Reddy19-Mar-10 9:18
memberRajkumar Reddy19-Mar-10 9:18 
Generalconvert JPG to PDF file in C# Pin
vijaykumarp17-Sep-09 21:49
membervijaykumarp17-Sep-09 21:49 
GeneralRe: convert JPG to PDF file in C# Pin
vishalMGiri23-Nov-09 0:02
membervishalMGiri23-Nov-09 0:02 
GeneralText overflow when generate PDF [modified] Pin
hungho14-Sep-09 21:48
memberhungho14-Sep-09 21:48 
GeneralRe: Text overflow when generate PDF Pin
Kwuan28-Jul-11 13:47
memberKwuan28-Jul-11 13:47 
GeneralProblem with SetContentFormat Pin
irfanraza2-Sep-09 0:09
memberirfanraza2-Sep-09 0:09 
GeneralLink to download is broken Pin
Yhair Alexander31-Jul-09 3:11
memberYhair Alexander31-Jul-09 3:11 
GeneralError generating document Pin
AruSivaji6-Jul-09 2:19
memberAruSivaji6-Jul-09 2:19 
GeneralRe: Error generating document Pin
galvin verghese13-Oct-11 1:21
membergalvin verghese13-Oct-11 1:21 
QuestionFont problem??? Pin
Thomas000075-Jul-09 22:50
memberThomas000075-Jul-09 22:50 
QuestionDifferent page sizes? Pin
Member 467835121-May-09 20:18
memberMember 467835121-May-09 20:18 
GeneralView PDF file in winform Pin
aldo hexosa22-Apr-09 23:05
memberaldo hexosa22-Apr-09 23:05 
GeneralRe: View PDF file in winform Pin
Member 467835121-May-09 22:30
memberMember 467835121-May-09 22:30 
QuestionBlank Pdf Pin
cheyenae16-Apr-09 6:55
membercheyenae16-Apr-09 6:55 
QuestionPDF document Blank Pin
Meetha3-Apr-09 18:46
memberMeetha3-Apr-09 18:46 
QuestionRe: PDF document Blank Pin
chhchhstock13-Apr-09 11:19
memberchhchhstock13-Apr-09 11:19 

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

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

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