Skip to main content
Email Password   helpLost your password?

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

You must Sign In to use this message board.
 
 
Per page   
 FirstPrevNext
GeneralSupper? Pin
ntxsoft
20:19 7 Nov '09  
QuestionHow to add url link to pdf [modified] Pin
vishal yadav
1:56 30 Oct '09  
Generalconvert JPG to PDF file in C# Pin
vijaykumarp
22:49 17 Sep '09  
GeneralText overflow when generate PDF [modified] Pin
hungho
22:48 14 Sep '09  
GeneralProblem with SetContentFormat Pin
irfanraza
1:09 2 Sep '09  
GeneralLink to download is broken Pin
Yhair Alexander
4:11 31 Jul '09  
GeneralError generating document Pin
AruSivaji
3:19 6 Jul '09  
GeneralFont problem??? Pin
Thomas00007
23:50 5 Jul '09  
GeneralDifferent page sizes? Pin
Member 4678351
21:18 21 May '09  
GeneralView PDF file in winform Pin
aldo hexosa
0:05 23 Apr '09  
GeneralRe: View PDF file in winform Pin
Member 4678351
23:30 21 May '09  
QuestionBlank Pdf Pin
cheyenae
7:55 16 Apr '09  
QuestionPDF document Blank Pin
Meetha
19:46 3 Apr '09  
QuestionRe: PDF document Blank Pin
chhchhstock
12:19 13 Apr '09  
Generalerror... Pin
Praksh
4:53 22 Mar '09  
GeneralThanks...this is excellent! Pin
patrickst1
7:29 20 Mar '09  
QuestionHow to generate PDF report from datagrid using Gios PDF .NET library? [modified] Pin
mobzam
6:04 5 Dec '08  
Questionunable to convert .doc to pdf file Pin
Member 4231933
19:59 26 Nov '08  
QuestionIssue with Memorystream to pdf image object [modified] Pin
deepakbs_smg
21:25 24 Nov '08  
Generaloverflow problem Pin
pfa
15:23 21 Nov '08  
GeneralHow to add Header and Footer for each page Pin
spatil1982
21:17 19 Nov '08  
GeneralNot working Pin
spatil1982
3:28 18 Nov '08  
GeneralGiospdf version 2 Pin
jake1975
2:47 19 Sep '08  
GeneralmyPdfTable.getHeight() Pin
superbem
9:37 28 Aug '08  
GeneralHide column Pin
superbem
6:26 25 Aug '08  


Last Updated 18 Apr 2005 | Advertise | Privacy | Terms of Use | Copyright © CodeProject, 1999-2009