Pdfium.Net SDK は、Portable Document Format (PDF) ファイルを作成、操作、および表示するための主要な .Net ライブラリです。 Web サーバーまたはその他のバックエンド システムで動的に PDF を作成し、既存のデスクトップまたは Web アプリケーションに「PDF として保存」機能を実装するための高レベルの c# API を提供します。
/// <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);
}
C# Pdfium.Net SDK ライブラリを使用すると、開発者は PDF ドキュメントを簡単に作成できます。 この例は、ページ オブジェクトを使用してそのようなドキュメントを作成する方法を示しています。
さまざまなタイプ (テキスト、画像、アウトライン、図形など) のページ オブジェクトを作成して、ページ上の任意の場所に配置できます。
/// <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
};
}
この例では、単純な C# コードと PDF ライブラリを使用して、スキャンした一連の画像から PDF ドキュメントを作成する方法を示します。
/// <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();
}
上記のコードは、デフォルトのプリンターで PDF ドキュメントを印刷します。 また、印刷の進行状況を示す標準の印刷ダイアログも表示されます。 進行状況ウィンドウを非表示にする場合は、次のようにコードを変更します。
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 は標準の PrintDocument クラスから派生しているため、ユーザー入力に従って PrintDocument を設定する .Net Framework 印刷ダイアログ (PrinterDialog) を使用できます。
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();
}
}
}
Pdfium.Net SDK を使用すると、開発者はほぼすべての PDF ファイルから全文を簡単に抽出できます。
/// <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();
}
}
}
この例では、単純な C# コードと PDF ライブラリを使用してドキュメント内のテキストを検索する方法を示します。
/// <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();
}
この例では、C# PDF ライブラリを使用してテキストを非同期的に検索する方法を示します。
/// <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;
}
}
}
Pdfium.Net SDK を使用すると、開発者は任意の PDF ファイルからテキスト座標を簡単に抽出することもできます。
/// <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);
}
}
この例では、PDF ファイルからさまざまな形式の画像を抽出してディスクに保存する方法を示します。
/// <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);
}
}
}
次のコード例は、PDF ライブラリを使用してドキュメントを個別のページに分割する方法を示しています。
/// <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);
}
}
C# PDF ライブラリを使用すると、ソース ファイルから特定のページを選択し、それらを 1 つの PDF ドキュメントにマージできます。
この例は、ImportPages 操作を使用してこれを行う方法を示しています。
/// <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);
}
}
}
この例では、ビットマップの幅と高さをピクセル単位で計算して、各ページのビットマップを作成します。
PDF ページ サイズはドット単位で指定されます (1 ドットは 1/72 インチに相当します)。 したがって、画像の DPI (この例では 96) に対応するドット サイズを掛けて、72 で割ります。
/// <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);
}
}
}
この例では、.Net PDF ライブラリを使用して、PDF ドキュメントの編集可能なフォームにプログラムで入力する方法を示します。
製品ライセンスを購入すると、優れたライブラリ以上のものを手に入れることができます。 それを最大限に活用するために、開発チームから直接 12 か月間の無料テクニカル サポートと 1 年間の無料アップデートも利用できます。
あなたの最新リリースを試してみましたが、完璧に動作します ― 私の両方の問題を解決します! リクエストに応えていただきありがとうございます ―大変感謝しています。 [他の製品] を一部のレガシー プロジェクトで使用していますが、すべての新しいプロジェクトで使用を中止しています。 [他の製品] ライブラリ自体は優れていますが、サポートが貧弱であることがわかりました ― 間違いなく、Pdfium.NET サポートは、速度と品質の両方ではるかに優れていることが証明されています!
繰り返しますが、最高のサービスと優れた製品に感謝します。 -TerryThe link is hidden due to ethical concerns.
Pdfium.Net SDK を開発する主な目標は、開発者にとって物事をシンプルかつ直感的に保つことです。 クラス ライブラリは、基礎となる pdfium ライブラリの使用に関するすべての詳細を抽象化し、ワールド オブジェクトおよびその他の直感的なクラスに基づくインターフェイスを提供します。
また、Pdfium.Net SDK は十分に文書化されています! 初心者と経験豊富なユーザーに Pdfium.Net SDK で可能なことの概要を提供することを目的とした広範なドキュメントを提供します。
私たちの目標の 1 つは、Microsoft Azure などのバックエンド システムで PDF ファイルを動的に作成するための高品質のツールを開発者に提供することです。
お客様の SDK が Azure にデプロイされたときに機能することを確認しました (私がテストしたいくつかの製品は機能しませんでした。宣伝してください)。 購入しました。
またよろしくお願いします! -Cyberghttps://forum.patagames.com/posts/m1105-Workability-in-various-environments#post1105
.Net アプリケーションで PDF ファイルを表示する機能を実装してください! 複数のビュー モード、微調整、および完全なフォーム サポートにより、PDF ビューアーはアプリケーションにシームレスに適合し、デザインに適応します。