PdfSharpBox.Net, c’est l’implémentation de l’excellente librairie de génération PDF (Portable Document Format) Apache « PdfBox » portée de Java à Microsoft .Net CSharp.

Pourquoi re-implémenter Apache PdfBox en C# ?
Il existe déjà la version .Net grâce à l’utilisation de la librairie IKVM reimplementant le framework JAVA: PDFBox in .NET
Problèmes:
IKVM est en licence GPL.
– D’autre part, la surcouche IKVM ralentit considérablement les processus de traitement des documents PDF.
C’est pour résoudre avant tout un problème de licence que j’ai porté le code JAVA de « PDFBox » en .Net C#, en conservant la licence Apache 2.0.
Il n’existait plus en 2015 de librairie de génération PDF utilisable en mode commerciale, libre de droits, et non GPL.
En effet, la librairie de traitement PDF la plus connue, JAVA iText et sa version .Net « iTextSharp » sont toutes deux passées en licence GPL depuis 2009.
Les composants GPL interdisent dans la plupart des cas l’usage commercial:
la licence GPL contamine tout code avec lequel il est utilisé.
Celui qui utilise une librairie GPL dans un composant commercial doit impérativement proposer les sources de son logiciel à la communauté.
C’est impossible dans la plupart des cas.
Seule possibilité: utiliser des composants PDF payants, tels qu’Apose, ABCPDF, iTextSharp en licence commerciale, ..

Samples:

PDFSharpBox TextStripper: Extract Text From PDF

  string text = null;
  using (PDDocument pdDoc = PDDocument.Load(fileName))
  {
       using (StringWriter stringWriter = new StringWriter())
       {
           PDFTextStripper stripper = new PDFTextStripper();
           stripper.SetLineSeparator("\n");
           stripper.SetStartPage(0);
           stripper.SetEndPage(1);
           stripper.WriteText(pdDoc, stringWriter);
           text = stringWriter.ToString();
       }
   }

PDFSharpBox convert pdf to images:

 using (PDDocument document = PDDocument.LoadNonSeq(pdfFilename))
 {
      List pdPages = document.GetDocumentCatalog().GetAllPages();
      int page = 0;
      foreach (PDPage pdPage in pdPages)
      {
         ++page;
         Bitmap bitmap = pdPage.ConvertToImage(BufferedImage.TYPE_INT_RGB, 300);
         ImageIOUtil.WriteImage(bitmap, pdfFilename + "-" + page + ".png", 300);
      }
 }

Create a document and add a page to it

using (PDDocument document = new PDDocument())
{
	PDPage page = new PDPage();
	document.AddPage(page);

	// Create a new font object selecting one of the PDF base fonts
	PDFont font = PDType1Font.HELVETICA_BOLD;

	// Start a new content stream which will "hold" the to be created content
	using (PDPageContentStream contentStream = new PDPageContentStream(document, page))
	{
		// Define a text content stream using the selected font, moving the cursor and drawing the text "Hello World"
		contentStream.BeginText();
		contentStream.SetFont(font, 12);
		contentStream.MoveTextPositionByAmount(100, 700);
		contentStream.DrawString("Hello World");
		contentStream.EndText();

		// Make sure that the content stream is closed:
		// contentStream.Close();
	}

	// Save the results and ensure that the document is properly closed:
	document.Save(System.IO.Path.Combine(directoryTarget, "Hello World.pdf"));
	//document.Close();
}

Related Posts

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *