Die C# PDF-Bibliothek

  • Erstellen Sie PDF-Dokumente von Grund auf neu oder aus Scankopien
  • Vereinigen oder paginieren Sie PDF-Dateien
  • Extrahieren oder bearbeiten Sie Text und Bilder
  • Enthält eingebettete Winforms- und WPF-Komponenten
  • Unterstützt .Net 2.0+, .Net 6, Standard, Core, Mono
    Läuft auf WinXP und macOS
    Kompatibel mit Microsoft Azure
Herunterladen Mit NuGet installieren

Eine einzige Bibliothek zum Erstellen und Anzeigen von PDF

Das Pdfium.Net SDK ist die führende .Net-Bibliothek zum Erstellen, Bearbeiten und Anzeigen von PDF-Dateien (Portable Document Format). Wir bieten eine High-Level-C#-API, um PDFs dynamisch auf einem Webserver oder einem anderen Backend-System zu erstellen und die Funktion "Als PDF speichern" in bestehende Desktop- oder Webanwendungen zu implementieren.

Der generierte Code ist so einfach und prägnant wie möglich:

So erstellen Sie programmgesteuert ein PDF-Dokument (C#)

/// <summary>
/// Create PDF Document on The Fly in C# using Pdfium.Net SDK Library
/// </summary>
public void CreatePdf()
{
    // The PDF coordinate system origin is at the bottom left corner of the page. 
    // The X-axis is pointing to the right. The Y-axis is pointing in upward direction.
    // The sizes and coordinates in this method are given in the inches.

    // Step 1: Initialize PDF library and create empty document
    // Return value: PdfDocument main class
    PdfCommon.Initialize();
    var doc = PdfDocument.CreateNew();  // Create a PDF document

    // Step 2: Add new page
    // Arguments: page width: 8.27", page height: 11.69", Unit of measure: inches
    //  The PDF unit of measure is point. There are 72 points in one inch.
    var page = doc.Pages.InsertPageAt(doc.Pages.Count, 8.27f * 72, 11.69f * 72);

    // Step 3: Add graphics and text contents to the page
    // Insert image from file using standart System.Drawing.Bitmap class
    using (PdfBitmap logo = PdfBitmap.FromFile(@"e:\63\logo_square.png"))
    {
        PdfImageObject imageObject = PdfImageObject.Create(doc, logo, 0, 0);
        //image resolution is 300 DPI and location is 1.69 x 10.0 inches.
        imageObject.Matrix = new FS_MATRIX(logo.Width * 72 / 300, 0, 0, logo.Height * 72 / 300, 1.69 * 72, 10.0 * 72);
        page.PageObjects.Add(imageObject);
    }

    // Create fonts used for text objects
    PdfFont calibryBold = PdfFont.CreateFont(doc, "CalibriBold");
    // Insert text objects at 7.69"; 11.02" and font size is 25
    PdfTextObject textObject = PdfTextObject.Create("Sample text", 1.69f * 72, 11.02f * 72, calibryBold, 25);
    textObject.FillColor = FS_COLOR.Black;
    page.PageObjects.Add(textObject);

    // Step 5: Generate page content and save pdf file
    // argument: PDF file name
    page.GenerateContent();
    doc.Save(@"e:\63\sample_document.pdf", SaveFlags.NoIncremental);
}
 

Die C# Pdfium.Net SDK-Bibliothek ermöglicht Entwicklern das einfache Erstellen von PDF-Dokumenten. Dieses Beispiel zeigt, wie ein solches Dokument mit Seitenobjekten erstellt wird.

Sie können Seitenobjekte verschiedener Art (Text, Bilder, Umrisse, Formen usw.) erstellen und an beliebiger Stelle auf der Seite platzieren.

So generieren Sie programmgesteuert ein PDF aus einer Reihe von Bildern (C#)

/// <summary>
/// Generate PDF document From Multiple Images in C# using PDF Library
/// </summary>
public void GeneratePdf()
{
    //Initialize C# PDF Library
    PdfCommon.Initialize();
    //Create a PDF document
    using (var doc = PdfDocument.CreateNew())
    {
        //Read images
        var files = System.IO.Directory.GetFiles(@"c:\Images\", "*.*", 
                    System.IO.SearchOption.AllDirectories);
        foreach (var file in files)
        {
            //Create empty PdfBitmap
            using (PdfBitmap pdfBitmap = PdfBitmap.FromFile(file))
            {
                //Create Image object
                var imageObject = PdfImageObject.Create(doc, pdfBitmap, 0, 0);
                //Calculate size of image in PDF points
                var size = CalculateSize(pdfBitmap.Width, pdfBitmap.Height);
                //Add empty page to PDF document
                var page = doc.Pages.InsertPageAt(doc.Pages.Count, size);
                //Insert image to newly created page
                page.PageObjects.Add(imageObject);
                //set image matrix
                imageObject.Matrix = new FS_MATRIX(size.Width, 0, 0, size.Height, 0, 0);
                //Generate PDF page content to content stream
                page.GenerateContent();
            }
        }
        // Save  PDF document as "saved.pdf" in no incremental mode
        doc.Save(@"c:\test.pdf", SaveFlags.NoIncremental);
    }
}
/// <summary>
/// The function takes width and height of the bitmap in pixels as well as 
/// horizontal and vertical DPI and calculates the size of the PDF page. 
/// To understand the conversion you should know the following:
///     One inch contains exactly 72 PDF points;
///     DPI of the scanned image may vфry and depends on scanning resolution
/// <summary>
private FS_SIZEF CalculateSize(int width, int height, float dpiX=300, float dpiY=300)
{
    return new FS_SIZEF()
    {
        Width = width * 72 / dpiX,
        Height = height * 72 / dpiY
    };
}
 

Dieses Beispiel zeigt, wie Sie mit einfachem C#-Code und einer PDF-Bibliothek ein PDF-Dokument aus einer Reihe gescannter Bilder erstellen können.

So drucken Sie PDF-Dateien (C#)

/// <summary>
/// Printing PDF Files in C# using PDF Library
/// </summary>
public void PrintPdf()
{
    var doc = PdfDocument.Load("c:\test.pdf");  // Read PDF file
    var printDoc = new PdfPrintDocument(doc);
    printDoc.Print();
}

Der obige Code druckt ein PDF-Dokument auf dem Standarddrucker. Es zeigt auch den Standard-Druckdialog mit dem Druckfortschritt an. Wenn Sie das Fortschrittsfenster ausblenden möchten, ändern Sie den Code wie unten gezeigt.

public void PrintPdf()
{
    var doc = PdfDocument.Load("c:\test.pdf");
    var printDoc = new PdfPrintDocument(doc);
    PrintController printController = new StandardPrintController();
    printDoc.PrintController = printController;
    printDoc.Print(); // C# Print PDF document
}

PdfPrintDocument ist von der Standardklasse PrintDocument abgeleitet, sodass Sie den .Net Framework-Druckdialog (PrinterDialog) verwenden können, der das PrintDocument entsprechend der Benutzereingabe einrichtet.

public void OnPrintClick()
{
	if (PdfViewer.Document.FormFill != null)
		PdfViewer.Document.FormFill.ForceToKillFocus();

	//create an instance of PrintDocument class
	var printDoc = new PdfPrintDocument(PdfViewer.Document); // create an instance of Print document class that is used for printing PDF document.

	//Create a standard print dialog box
	var dlg = new PrintDialog();
	dlg.AllowCurrentPage = true;
	dlg.AllowSomePages = true;
	dlg.UseEXDialog = true;
	//sets the PrintDocument used to obtain PrinterSettings.
	dlg.Document = printDoc;
	//show PrinterDialog and print pdf document
	if (dlg.ShowDialog() == DialogResult.OK)
		printDoc.Print();   // C# Print PDF
}
 
 

So öffnen Sie eine PDF-Datei und extrahieren Text daraus (C#)

/// <summary>
/// Read PDF File and Extract Text From it in C#
/// </summary>public void ExtractText()
{
    //Initialize the SDK library
    //You have to call this function before you can call any PDF processing functions.
    PdfCommon.Initialize();

    //Open and load a PDF document from a file.
    using (var doc = PdfDocument.Load(@"c:\test001.pdf")) // C# Read PDF File
    {
        foreach (var page in doc.Pages)
        {
            //Gets number of characters in a page or -1 for error.
            //Generated characters, like additional space characters, new line characters, are also counted.
            int totalCharCount = page.Text.CountChars;

            //Extract text from page to the string
            string text = page.Text.GetText(0, totalCharCount);

            page.Dispose();
        }
    }
}

Das Pdfium.Net SDK ermöglicht Entwicklern das einfache Extrahieren von Volltext aus fast jeder PDF-Datei.

So suchen Sie nach Text in einer PDF-Datei (C#)

/// <summary>
/// Search for a Text in a PDF File in C# With Pdfium.Net SDK Library
/// </summary>
public void Search()
{
    //Open PDF document
    using (var doc = PdfDocument.Load(@"d:\0\test_big.pdf")) // Read PDF document and enumerate pages
    {
	    //Enumerate pages
	    foreach(var page in doc.Pages)
	    {
		    var found = page.Text.Find("text for search", FindFlags.MatchWholeWord, 0);
		    if (found == null)
			    return; //nothing found
		    do
		    {
			    var textInfo = found.FoundText;
			    foreach(var rect in textInfo.Rects)
			    {
				    float x = rect.left;
				    float y = rect.top;
				    //...
			    }
		    } while (found.FindNext());

		    page.Dispose();
	    }
    }
}

Dieses Beispiel zeigt, wie Sie mit einfachem C#-Code und einer PDF-Bibliothek nach Text in einem Dokument suchen können.

So suchen Sie asynchron nach Text (C#)

/// <summary>
/// Search for a Text Asynchronously in C# using PDF Library
/// </summary>
public void SearchAsync()
{
    //Open PDF document
    var doc = PdfDocument.Load(@"c:\test_big.pdf"); // C# Read PDF File
    PdfSearch search = new PdfSearch(doc);
    search.FoundTextAdded += (s, e) =>
	    {
		    var textInfo = doc.Pages[e.FoundText.PageIndex].Text.GetTextInfo(e.FoundText.CharIndex, e.FoundText.CharsCount);
		    foreach (var rect in textInfo.Rects)
		    {
			    float x = rect.left;
			    float y = rect.top;
			    Console.WriteLine(string.Format("Found text: {0}, Page = {1}, x= {2}, y={3}", textInfo.Text, e.FoundText.PageIndex, x, y));
			    //...
		    }
	    };
    search.SearchCompleted += (s, e) =>
	    {
		    doc.Dispose();
	    };
    search.SearchProgressChanged += (s, e) =>
	    {
		    Console.WriteLine(string.Format("Progress: {0}%", e.ProgressPercentage));
	    };
    search.Start("document", FindFlags.MatchWholeWord);
    Console.ReadLine();
}
 

Dieses Beispiel zeigt, wie Sie die C#-PDF-Bibliothek verwenden können, um asynchron nach Text zu suchen.

So erhalten Sie Koordinaten von Text, der aus PDF (C#) extrahiert wurde

/// <summary>
/// Extract Text Coordinates from Pdf in C# using PDF Library
/// </summary>
public void ExtractTextInfo()
{
    //Initialize the SDK library
    //You have to call this function before you can call any PDF processing functions.
    PdfCommon.Initialize();

    //Open and load a PDF document from a file.
    using (var doc = PdfDocument.Load(@"c:\test001.pdf")) // C# Read PDF File
    {
        //Get second page from document
        using (var page = doc.Pages[1])
        {
            //Extract text information structure from the page
            // 10 - Index for the start characters
            // 25 - Number of characters to be extracted
            var textInfo = page.Text.GetTextInfo(10, 25);

            //Gets text from textInfo strtucture
            string text = textInfo.Text;

            //Gets a collection of rectangular areas bounding specified text.
            var rects = textInfo.Rects;
        }
    }
}

Das Pdfium.Net SDK ermöglicht es Entwicklern außerdem, Textkoordinaten aus jeder PDF-Datei einfach zu extrahieren.

So extrahieren Sie Bilder aus einem PDF-Dokument (C#)

/// <summary>
/// Extracting Images from Pdf File With .Net C# and PDF Library
/// </summary>
private int _writedImageIndex = 0;

public void ExtractAllImages()
{
    //Initialize the SDK library
    //You have to call this function before you can call any PDF processing functions.
    PdfCommon.Initialize();

    //Open and load a PDF document from a file.
    using (var doc = PdfDocument.Load(@"c:\test001.pdf")) // C# Read PDF File
    {
        //Enumerate all pages sequentially in a given document
        foreach (var page in doc.Pages)
        {
            //Extract and save images
            ExtractImagesFromPage(page);

            //dipose page object to unload it from memory
            page.Dispose();
        }
    }
}

private void ExtractImagesFromPage(PdfPage page)
{
    //Enumerate all objects on a page
    foreach (var obj in page.PageObjects)
    {
        var imageObject = obj as PdfImageObject;
        if (imageObject == null)
            continue; //if not an image object then nothing do

        //Save image to disk
        var path = string.Format(@"c:\\Images\\image_{0}.png", ++_writedImageIndex);
        imageObject.Bitmap.Image.Save(path, ImageFormat.Png);
    }
}
 

Das Beispiel zeigt, wie Bilder verschiedener Formate aus einer PDF-Datei extrahiert und auf der Festplatte gespeichert werden.

So teilen Sie ein PDF-Dokument in separate Dokumente auf (C#)

/// <summary>
/// Split PDF in C# using PDF Library
/// </summary>
public void SplitDocument()
{
    //Initialize the SDK library
    //You have to call this function before you can call any PDF processing functions.
    PdfCommon.Initialize();

    //Open and load a PDF document from a file.
    using (var sourceDoc = PdfDocument.Load(@"c:\test001.pdf")) // C# Read PDF File
    {
        //Create one PDF document for pages 1-5.
        using (var doc = PdfDocument.CreateNew())
        {
            //Import pages from source document
            doc.Pages.ImportPages(sourceDoc, "1-5", 0);
            //And save it to doc1.pdf
            doc.Save(@"c:\doc1.pdf", SaveFlags.Incremental);
        }

        //Create another PDF document for pages 5-10.
        using (var doc = PdfDocument.CreateNew())
        {
            //Also import pages
            doc.Pages.ImportPages(sourceDoc, "5-10", 0);
            //And save them too
            doc.Save(@"c:\doc2.pdf", SaveFlags.Incremental);
        }
    }
}
 

Das folgende Codebeispiel zeigt, wie Sie eine PDF-Bibliothek verwenden, um ein Dokument in separate Seiten aufzuteilen.

So kombinieren Sie Seiten aus mehreren PDFs in ein einzelnes Dokument (C#)

/// <summary>
/// Merge PDFs in C# using PDF Library
/// </summary>
public void MergePdf()
{
    //Initialize the SDK library
    //You have to call this function before you can call any PDF processing functions.
    PdfCommon.Initialize();

    //Open and load a PDF document in which will be merged other files
    using (var mainDoc = PdfDocument.Load(@"c:\test001.pdf")) // C# Read source PDF File #1
    {
        //Open one PDF document.
        using (var doc = PdfDocument.Load(@"c:\doc1.pdf")) //Read PDF File #2
        {
            //Import all pages from document
            mainDoc.Pages.ImportPages(
                doc,
                string.Format("1-{0}", doc.Pages.Count),
                mainDoc.Pages.Count
                );
        }

        //Open another PDF document.
        using (var doc = PdfDocument.Load(@"c:\doc2.pdf"))
        {
            //Import all pages from document
            mainDoc.Pages.ImportPages(
                doc,
                string.Format("1-{0}", doc.Pages.Count),
                mainDoc.Pages.Count
                );
        }

        mainDoc.Save(@"c:\ResultDocument.pdf", SaveFlags.NoIncremental);


    }
}
 

Mit der C#-PDF-Bibliothek können Sie bestimmte Seiten aus Quelldateien auswählen und sie in ein einziges PDF-Dokument vereinigen.

Dieses Beispiel zeigt, wie dies mit der Operation ImportPages möglich ist.

Source Code10

Source Code11

So konvertieren Sie jede Seite eines PDF-Dokuments in ein Bild (C#)

/// <summary>
/// Render whole PDF document using C# PDF Library
/// </summary>
using (var doc = PdfDocument.Load(@"d:\0\test_big.pdf")) // C# Read PDF Document
{
    foreach (var page in doc.Pages)
    {
        int width = (int)(page.Width / 72.0 * 96);
        int height = (int)(page.Height / 72.0 * 96);
        using (var bitmap = new PdfBitmap(width, height, true))
        {
            bitmap.FillRect(0, 0, width, height, Color.White);
            page.Render(bitmap, 0, 0, width, height, PageRotate.Normal, RenderFlags.FPDF_LCD_TEXT);
            bitmap.Image.Save("...", ImageFormat.Png);
        }
    }
}

Dieses Beispiel erstellt eine Bitmap für jede Seite, indem die Breite und Höhe der Bitmap in Pixeln berechnet werden.

PDF-Seitengröße wird in Punkten angegeben (1 Punkt entspricht 1/72 Zoll). Daher wird die DPI des Bildes (in diesem Beispiel 96) mit der entsprechenden Punktgröße multipliziert und durch 72 dividiert.

So füllen und extrahieren Sie Daten programmgesteuert aus PDF-Feldern

/// <summary>
/// Filling Editable PDF Fields and Extracting Data From Them using .Net PDF Library
/// </summary>
private void btnTest_Click(object sender, RoutedEventArgs e)
{
	var forms = new PdfForms();
	var doc = PdfDocument.Load(@"c:\test.pdf", forms); // C# Read PDF Document
	//doc.FormFill is equal to forms and can be used to get access to acro forms as well;

	int i = 0;
	foreach(var field in forms.InterForm.Fields)
	{
		if(field.FieldType == Patagames.Pdf.Enums.FormFieldTypes.FPDF_FORMFIELD_TEXTFIELD)
		{
			field.Value = "This is a field #" + (++i);
		}
	}
}

Dieses Beispiel zeigt, wie bearbeitbare Formulare in einem PDF-Dokument mithilfe der .Net PDF-Bibliothek programmgesteuert ausgefüllt werden.

 

Verfügbarer Entwicklersupport

Durch den Kauf einer Produktlizenz erhalten Sie mehr als nur eine großartige Bibliothek. Um das Beste daraus zu machen, erhalten Sie außerdem 12 Monate kostenlosen technischen Support direkt von unserem Entwicklungsteam und kostenlose Updates für ein Jahr.

Ich habe Ihre neueste Version ausprobiert und sie funktioniert großartig – sie löst meine beiden Probleme! Vielen Dank, dass Sie meiner Bitte nachgekommen sind – ich weiß das sehr zu schätzen. Wir verwenden [anderes Produkt] immer noch für einige ältere Projekte, aber wir haben es für alle neuen Projekte eingestellt. Während die [anderes Produkt]-Bibliothek selbst gut ist, fanden wir ihre Unterstützung unbefriedigend – ohne Zweifel erwies sich die Pdfium.NET SDK-Unterstützung als viel besser, sowohl in Bezug auf Geschwindigkeit als auch Qualität !
Nochmals vielen Dank für den erstklassigen Service und das tolle Produkt. -Terry
The link is hidden due to ethical concerns.

Wir konzentrieren uns auf Einfachheit, damit Sie sich auf Ihre Apps konzentrieren können

Hauptziel bei der Entwicklung des Pdfium.Net SDK ist es, die Dinge für Entwickler einfach und intuitiv zu halten. Die Klassenbibliothek abstrahiert alle Details der Verwendung der zugrunde liegenden pdfium-Bibliothek und stellt eine Schnittstelle bereit, die auf Weltobjekten und anderen intuitiven Klassen basiert.

Außerdem Pdfium.Net Das SDK ist gut dokumentiert! Wir stellen umfangreiche Dokumentation zur Verfügung, um Anfängern und erfahrenen Benutzern einen Überblick darüber zu geben, was mit Pdfium.Net SDK möglich ist.

 

Optimiert für Unternehmens- und Cloud-Dienste

Eines unserer Ziele ist es, Entwicklern ein qualitativ hochwertiges Tool zur Verfügung zu stellen, um PDF-Dateien dynamisch auf jedem Backend-System wie Microsoft Azure zu erstellen.

Ich habe überprüft, dass Ihr SDK funktioniert, wenn es in Azure bereitgestellt wird (mehrere Produkte, die ich getestet habe, haben nicht funktioniert – Sie können dafür werben). Ich habe es gekauft.
Nochmals vielen Dank! -Cyberg
https://forum.patagames.com/posts/m1105-Workability-in-various-environments#post1105

Einbettbare Komponente für die PDF-Anzeige

Anzeigen von PDF-Dokumenten in .Net-Apps

Implementieren Sie die Möglichkeit, PDF-Dateien in Ihrer .Net-App anzuzeigen! Mit mehreren Ansichtsmodi, Feinabstimmung und vollständiger Formularunterstützung fügt sich der PDF-Viewer nahtlos in Ihre App ein und passt sich Ihrem Design an.

  • Vollständig anpassbare Benutzeroberfläche
  • Unterstützung für interaktive Formulare
  • Flexible Ereignisverarbeitung
  • Einfache Integration
  • Offener Quellcode
WPF PDF Viewer Winforms PDF Viewer
C# PDF Viewer
Weitere Informationen zur Web-Oberfläche von Pdf-Viewer finden Sie in der Dokumentation.

Pdfium.Net SDK

Herunterladen

Das NuGet-Paket ist im offiziellen Repository unter nuget.org verfügbar.

PM> Install-Package Pdfium.Net.SDK

Entwickelt für

Microsoft .Net Framework 2.0+ Microsoft .Net Standard 2.0+ Microsoft Visual Studio NuGet Microsoft Azure