PDF is een populair bestandsformaat voor documenten vanwege de veelzijdigheid en lay-out mogelijkheden. Het is dan ook niet ongewoon voor websites om deze technologie te gebruiken bij bv. het tonen of sturen van een ticket of een factuur.
PDF bestanden bewerken in code, hoe begin je er aan? De gemakkelijkste manier is met iTextSharp.
Dit is een c# port van de opensource Java bibliotheek iText, en is onder bepaalde voorwaarden gratis te gebruiken.
In een voorbeeld maken we een nieuw pdf bestand en vullen we dit op met wat tekst.
using iTextSharp.text;
using iTextSharp.text.pdf;Om te beginnen maken we een Document aan waar we elementen aan kunnen toevoegen, zoals hier een korte string.
Document document = new Document();
using
(FileStream fs = new FileStream("test.pdf",FileMode.Create))
{
PdfWriter.GetInstance(document, fs);
document.Open();
document.Add(new Paragraph("Hello World"));
document.Close(); // dit zorgt ervoor dat de content wordt weggeschreven naar het bestand
}Aan het Document kunnen verschillende types elementen toegevoegd worden, waaronder annotations, chunks, tables, lists, images, en paragraphs.
Een voorbeeld van een table en een afbeelding:
//table:
var tabel = new PdfPTable(2);
tabel.HorizontalAlignment = 0;
tabel.SpacingBefore = 10;
tabel.SpacingAfter = 10;
tabel.DefaultCell.Border = 0;
tabel.SetWidths(new int[] { 1, 4 });
tabel.AddCell(new Phrase("kolom 1"));
tabel.AddCell(new Phrase("kolom 2"));
tabel.AddCell(new Phrase("item 1"));
tabel.AddCell(new Phrase("item 2"));
document.Add(tabel);
//afbeelding:
var afb = iTextSharp.text.Image.GetInstance("afb.jpg");
afb.SetAbsolutePosition(440, 400);
document.Add(afb);
Een tweede manier om het opvullen van de PDF aan te pakken is deze ontwerpen in html.
Bij de Itext bibliotheek is een parser voorzien die een string van html kan omzetten naar een lijst van elementen, welke toegevoegd kunnen worden aan het Document.
using iTextSharp.text.html.simpleparser;//zet een string met html om naar een lijst van elementen
var parsedHtmlElements = HTMLWorker.ParseToList(htmlInhoud, null);
// voeg elk element in de lijst toe aan het document
foreach (var htmlElement in parsedHtmlElements)
document.Add(htmlElement as IElement);
Als het document klaar is en je wilt dit onmiddellijk in de browser tonen in plaats van het op te slaan, gebruik je een memorystream i.p.v. een filestream en gebruik je volgende code:
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition","attachment;filename=test.pdf");
Response.BinaryWrite(memoryStream.ToArray());









Great post Joris, very useful.
Thanks,
Tim