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.
/// <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.
/// <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.
/// <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
}
/// <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.
/// <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.
/// <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.
/// <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.
/// <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.
/// <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.
/// <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.
/// <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.
/// <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.
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. -TerryThe link is hidden due to ethical concerns.
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.
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! -Cyberghttps://forum.patagames.com/posts/m1105-Workability-in-various-environments#post1105
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.
Das NuGet-Paket ist im offiziellen Repository unter nuget.org verfügbar.