Tworzenie i edycja dokumentów PDF w C# na przykładzie biblioteki pdfSharp

Bibliotek do tworzenia pdf-a dla C# jest sporo – iTextSharp, pdfSharp, Winnovative , Aspose. Prawda jest taka, że wszystkie komercyjne narzędzia działają bardzo dobrze i mają obszerną dokumentację i o nich nie ma sensu pisać. Jeśli firma, w której pracujesz ma komercyjną biblioteką to użyj ją, jeśli nie to poniżej, krótki przewodnik po darmowej bibliotece pdfSharp.

Portable Document Format(PDF)

Jest to format plików stworzony na początku 1990 roku przez Acrobata. Opiera się na języku dokumentów PostScript i jest jego okrojoną wersją. PDF jest standardem ISO – a to dla wielu firm jest bardzo ważne  – no i jest popularny. Pozwala komuś wysłać dokument i mieć pewność, że mu się otworzy. Standard jest otwarty a aplikację do obsługi są darmowe.

PdfSharp

Darmowa, otwarta biblioteka do zarządzania PDF-em. Możemy w niej tworzyć PDF-a, rysować co na się podoba i edytować już gotowe PDF-y. Na przykład wypełniać danymi już gotowe szablony.

PdfSharp pod spodem używa biblioteki GDI+ do tworzenie grafiki w PDF-ie. To oznacza, że prawie wszystko co da się zrobić w GDI+ da się zrobić w pdfsharp-ie oraz, że sposób programowania tworzonych elementów jest tożsamy z GDI+.

Kodowanie

Poniżej kod umożliwiający edycje PDF-a i dołożenie do niego swoich danych. Pokazuje ten przykład, bo jest to najmniej intuicyjna rzecz w tej bibliotece.


var pdfDoc = PdfReader.Open(existPdfFilePath,PdfDocumentOpenMode.Import);

var pdfNewDoc = new PdfDocument();

for (var pg = 0; pg <= pdfDoc.Pages.Count; pg++)
{
  pdfNewDoc.AddPage(pdfDoc.Pages[pg]);
}

pdfNewDoc.Save(newPath);

Otwieramy PDF-a, którego już mamy, następnie tworzymy nowy dokument PDF i po kolei dodajemy strony ze starego PDF-a. Na końcu zapisujemy nowego PDF-a w nowej lokalizacji.

Edycja

Aby napisać lub narysować na  stronie PDF-a (nowej czy też kopiowanej wystarczy pobrać obiekt XGraphics należący do danej strony i używać dowolnych metod, które odpowiadają naszym potrzebą, poniżej przykład tworzenia napisów:

Tworzenie napisów:

var gfx = XGraphics.FromPdfPage(page);

var font = new XFont("Arial", 10, XFontStyle.Bold, options);

gfx.DrawString("Hello World", font, XBrushes.Black, new XPoint(250.0, 225.0));

i gotowe. Na stronie na pozycji (250, 225) zostanie narysowany napis „Hello World”, używając czcionki zgodnie ze zmienną font.

Wstawianie obrazka

var gfx = XGraphics.FromPdfPage(page);

XImage image = XImage.FromFile(pathToFile);

gfx.DrawImage(image, 0, 0, 200, 80);

i gotowe. Obrazek wstawiony na pozycji dokumentu (0, 0) o wielkości 200×80.

Podsumowanie i wskazówki

Wszystkie możliwe przykłady są dostępne tutaj http://www.pdfsharp.net/wiki/PDFsharpSamples.ashx są jasne i dość proste a przede wszystkim czytelne.

Polecam z doświadczenia, aby rysować w taki sposób jak najmniej elementów w dokumencie PDF,  ze względu na to, że kod się nie miłosiernie rozrasta. Najlepiej wszystko co potrzeba stworzyć w Word-dzie (lub innym programie) a następnie zrobić export do PDF-a i dopiero na takim dokumencie dokładać już kolejne elementy programowo.

Nie jest też łatwo testować taki dokument, bo ciężko podglądać zmiany na żywo, jednak w Visual Studio 2015 ma teraz cudowną formę debugowania, która umożliwia, w momencie umieszczenia breakpoint-a w klasie i dojścia do niego w sesji debugowania,  edycję kodu w czasie trwania debugowania, co znacznie skraca implementowanie zmian w kodzie.

 

Jedno przemyślenie nt. „Tworzenie i edycja dokumentów PDF w C# na przykładzie biblioteki pdfSharp

  1. Pingback: dotnetomaniak.pl

Możliwość komentowania jest wyłączona.