該頁面可以包含自動翻譯的文字。
使用 C# 和 VB.NET 建立 PDF 文檔
身為 .NET 開發人員,您是否需要產生 PDF 報表、發票、收據或其他文件? 使用 Docotic.Pdf 函式 庫 在 .NET Core、.NET Standard 或 .NET Framework 專案中產生 PDF 文件。 您可以輕鬆 完成此操作,而無需了解 PDF 格式。
用於 PDF 產生的 .NET API
Docotic.Pdf 是 100% 託管程式碼庫,無需外部依賴。 您可以使用它在 Windows、Linux、Amazon 和 Azure 雲 端環境中建立 PDF 文件。 macOS、iOS、Android 和其他雲端環境也很好。
該庫提供了生成 PDF 文件的不同方法。 首先,您可以使用進階版面配置 API 新增頁首和頁尾、表格、段落,並 自動將內容分解到頁面。 佈局 API 可在 免費的 Docotic.Pdf.Layout 附加元 件 中找到。
或者,您可以使用 HTML to PDF 外掛程式(也是免費的)基於 HTML 範本建 立 PDF 文件。 閱讀將 HTML 轉換為 PDF 文章以了解更多詳細資訊。
您也可以使用核心庫 API 產生 PDF 文件。 它支援任何 PDF 內容:
但是,核心 API 不支援高階佈局元件,例如標題、表格、部分。 使用核心庫,您將需要自行測量內容並將其分割到 PDF 頁面之間。
9.5.17664-dev 9.5.17664-dev 9.5.17664-dev14,820 已通過 NuGet 總下載量 4,998,853
您也可以將附加元件與核心庫一起使用。 例如,使用佈局 API 產生 PDF 文檔,然後使用核心庫新增更多內容。 請注意,佈局插件支援 .NET Standard 2.1、.NET Core、.NET 5 和更新的框架。 核心庫和 HTML 到 PDF 附加 元件支援 .NET Standard 2.0、.NET 4.7.2+、.NET Core、.NET 5 及更高版本。
Docotic.Pdf 附加元件可在 NuGet 上使用,並包含在庫二進位檔案的 zip 中。在 下載 C# .NET PDF 函式庫 頁面上取得庫、附加元件和免費的限時許可證金鑰。
使用佈局 API 建立 PDF 文檔
此 C# 範例展示如何使用佈局 API 在 C# 中產生 PDF 文件:
PdfDocumentBuilder
.Create()
.Generate("long-text.pdf", doc => doc.Pages(page =>
{
string text = File.ReadAllText(@"C# in Depth, Fourth Edition.txt");
page.Content().Text(text);
page.Footer().AlignCenter().Text(t => t.CurrentPageNumber());
}));
該程式碼將文字檔案轉換為 PDF。 它將長文本拆分為頁面,並在頁腳區域繪製頁碼。 您不需要計算文字高度或 計算頁數 - 該程式庫會處理這些日常任務。
佈局 API 是一個流暢的 API。 大多數呼叫都可以連結在一起,因此您可以編寫比“聲明式”框架更緊湊的程式 碼。 讓我們更詳細地回顧一下該 API。
設定 PDF 文件屬性
PDF 產生從 PdfDocumentBuilder 類別 開始。 它允許您指 定生成的 PDF 文件的屬性。 例如,您可以設定元資料、加密、PDF 版本或啟用快速 Web 檢視。 這是基本的 C# 範例:
PdfDocumentBuilder
.Create()
.Encryption(new PdfStandardEncryptionHandler("owner", "user"))
.Info(info =>
{
info.Author = "Docotic.Pdf library";
info.Title = "How to create PDF in .NET";
info.Keywords = "C#, VB.NET";
})
.Version(PdfVersion.Pdf16)
.Generate("result.pdf", doc => doc.Pages(_ => {}));
此範例使用自訂元資料建立一個空的受密碼保護的 PDF 文檔,並將其儲存到文件中。 您也可以將文件儲存到流 中,只需使用 PdfDocumentBuilder.Generate(Stream, ..) 重 載。
當您設定 PdfDocumentBuilder
時,就可以用內容填入 PDF 文件了。 佈局 API 提供了一個
Document 對象,用於註冊公共資源(排版、圖像)和定義 PDF 頁面內
容。 您可以在 PdfDocumentBuilder.Generate
方法的第二個參數中配置 Document
。 讓我們學習如何設定
PDF 頁面。
定義 PDF 頁面佈局
此 C# 範例展示如何建立橫向 A3 頁面的 PDF 文件:
PdfDocumentBuilder.Create().Generate("pages.pdf", doc =>
{
doc.Pages((PageLayout page) =>
{
page.Size(PdfPaperSize.A3, PdfPaperOrientation.Landscape)
.MarginVertical(50)
.MarginHorizontal(40);
page.Header().PaddingBottom(30).AlignRight().Text("Hello PDF");
page.Content().Column(c =>
{
c.Item().Text("Page 1");
c.Item().PageBreak();
c.Item().Text("Page 2");
});
page.Footer().Text(t => t.CurrentPageNumber());
});
});
Document.Pages() 方法 定義一頁或多頁的佈局。 首先,範例程 式碼為所有頁面設定通用設定 - 大小、方向、邊距。 您也可以指定內容方向、預設文字樣式或背景顏色。
然後,該範例會產生頁面佈局和內容。 PageLayout 類別 提供了將頁 面內容放置在以下槽中的方法:
Background()
- 被其他內容覆蓋的背景層Header()
- 所有頁面的公共標題Content()
- 首頁內容Footer()
- 所有頁面的通用頁腳Foreground()
- 覆蓋其他內容的前景層
佈局引擎會根據新增至 PageLayout.Content()
槽的內容產生頁面。 其他插槽在每個頁面上重複。 您可以使
用 LayoutContainer 類別 將內容新增至插槽。 這是佈局 API
的關鍵構建塊,它允許您生成任意佈局、表格、文字或圖像。
上一個範例使用垂直堆疊內容的 LayoutContainer.Column
方法。 此列包含 3 個項目 - 第一頁的文字區塊、
明確分頁符號和第二頁的文字區塊。
還有 LayoutContainer.Row
方法。 查看如何同時使用行和列建立多列 PDF 文件。
您可以在 PDF 文件中混合不同的頁面佈局。 只需多次呼叫 Document.Pages
方法即可。 有關範例,請參閱
GitHub 上的 PDF 頁面佈局設定 範例。
新增文字到 PDF 文件
文字是PDF文件的重要組成部分。 您可以使用 LayoutContainer.Text 方
法 新增文字。 之前,您看到了
LayoutContainer.Text(string)
重載的用例。 讓我們看看這個方法的另一個重載:
PdfDocumentBuilder.Create().Generate("text.pdf", doc =>
{
doc.Pages(p => p.Content().Text(text =>
{
text.Span("VB.NET").Style(t => t.Strong);
text.Span(" is a multi-paradigm, object-oriented programming language, implemented on.NET, Mono, and the ");
text.Hyperlink(".NET Framework", new Uri("https://dotnet.microsoft.com/en-us/download/dotnet-framework"));
text.Line(".");
text.Line("Microsoft launched VB.NET in 2002 as the successor to its original Visual Basic language.");
}));
});
TextContainer 類別 提供了繪製文字、連結、頁碼的方法。 使用
Span
和 Line
方法將文字新增至目前行。 Line
方法也完成目前行。 此範例也使用新增外部資源連結的
Hyperlink
方法。
這是另一個範例,顯示如何在頁腳中使用動態頁碼:
PdfDocumentBuilder.Create().Generate("footer.pdf", doc =>
{
doc.Pages(p => p.Footer().AlignRight().Text(text =>
{
text.Style(t => t.Parent.FontColor(new PdfRgbColor(255, 0, 0)));
text.CurrentPageNumber();
text.Span(" / ");
text.PageCount();
}));
});
佈局 API 提供了一種設定頁碼格式的方法。 例如,您可以像這樣繪製十六進位頁碼:
text.CurrentPageNumber().Format(p => "0x" + p?.ToString("x2"));
在 C# 和 VB.NET 中為 PDF 文件新增頁首和頁尾範例 展示如何將頁碼格式設定為羅馬數字。
您可能會看到上面的範例使用 Style
方法。 讓我們更詳細地研究文本樣式的概念。
版式
文字樣式可讓您自訂文字外觀。 TextStyle 類別 提供更改字體大小、
字母間距、顏色和其他文字屬性的方法。 TextStyle
物件是不可變的,因此每個方法呼叫都會產生新的文字樣
式。 您可以在不同的版面配置層級套用文字樣式:
PdfDocumentBuilder.Create().Generate("text-styles.pdf", doc =>
{
doc.Pages(page =>
{
page.TextStyle(TextStyle.Parent.FontSize(30));
page.Content()
.TextStyle(TextStyle.Parent.FontColor(new PdfRgbColor(0, 0, 255)))
.Text(t =>
{
t.Style(TextStyle.Parent.Underline());
t.Span("Hello PDF").Style(TextStyle.Parent.DirectionRightToLeft());
});
});
});
TextStyle.Parent
屬性傳回一個特殊樣式,所有文字屬性均未定義。 前面的範例以相反的順序(從右到左)
將「Hello PDF」繪製為藍色、底線、30 點字體大小。 請參閱自訂 PDF 文件中的文字外
觀 範例,以了解另一個文字樣式繼承範例。
TextStyle
類別支援自訂除關聯字型之外的所有內容。 當您需要為文字樣式指定自訂字體時,請使用
Document.TextStyleWithFont
方法。 此 C# 範例展示如何使用系統字體:
PdfDocumentBuilder.Create().Generate("fonts.pdf", doc =>
{
doc.Pages(page =>
{
TextStyle style = doc.TextStyleWithFont(SystemFont.Family("Arial").Bold());
page.Content().Text("Bold text").Style(style);
});
});
預設情況下,佈局引擎會刪除未使用的字體字形。 因此,即使對於大字體,生成的文件也可能具有較小的尺寸。 您也可以指定自訂字型載入器、後備字型、缺失字形的處理程序。 有關更多詳細信息,請參閱在 PDF 文件中使 用不同字體 範例。
佈局 API 提供了一組預定義樣式。 您可以透過 Typography 類別 使 用或自訂它們:
PdfDocumentBuilder.Create().Generate("typography.pdf", doc =>
{
doc.Typography(t =>
{
var baseFont = new FileInfo("arial.ttf");
t.Document = doc.TextStyleWithFont(baseFont);
t.Header = t.Parent.FontSize(20).FontColor(new PdfGrayColor(20));
t.Footer = t.Footnote;
});
doc.Pages(page =>
{
page.Header().AlignCenter().Text("Header");
page.Content().Text(t =>
{
t.Line("Title").Style(t => t.Title);
t.Line("Heading 1").Style(t => t.Heading1);
t.Line("Regular");
});
page.Footer().Height(20).AlignCenter().Text(t => t.CurrentPageNumber());
});
});
使用 Typography
類,您不需要使用變數來保留文字樣式引用。 您可以使用 Document.Typography 方
法 註冊必要的樣式,然後從 Typography
物件載入它們。
了解如何在 Typography 範例中使用預設和自訂樣式。
圖片
與文字和字體一樣,圖像是 PDF 文件的另一個基本部分。 佈局 API 允許您新增這樣的圖像:
PdfDocumentBuilder.Create().Generate("image.pdf", doc =>
{
var imageFile = new FileInfo("image.jpg");
Image image = doc.Image(imageFile);
doc.Pages(page => page.Content().MaxWidth(200).Image(image));
});
表格
佈局 API 可讓您產生表格。 此 C# 範例展示如何將表格新增至 PDF 文件:
PdfDocumentBuilder.Create().Generate("table.pdf", doc =>
{
doc.Pages(page =>
{
page.Content().Table(t =>
{
t.Columns(c =>
{
c.ConstantColumn(200);
c.RelativeColumn(1);
});
t.Header(h =>
{
h.Cell().Text("Product");
h.Cell().Text("Features");
});
t.Cell().Text("Docotic.Pdf");
t.Cell().Text("Extract text, PDF to images, compress PDF");
t.Cell().Text("Docotic.Pdf.Layout");
t.Cell().Text("Create PDF");
});
});
});
您可以建立任何複雜程度的表。 此範例 展示如何使用儲存格邊框、背景和跨度。
內部連結
PDF 文件支援內部鏈接,可讓您產生書籤或目錄。 此基本 C# 範例展示如何使用佈局 API 新增指向文件部分的連結:
PdfDocumentBuilder.Create().Generate("link.pdf", doc =>
{
doc.Pages(page =>
{
page.Content().Column(c =>
{
const string SectionName = "Chapter 1";
c.Item().SectionLink(SectionName).Text("Link");
c.Item().PageBreak();
c.Item().Section(SectionName).Text("Target");
});
});
});
您也可以從 GitHub 下載並嘗試將目錄新增至 PDF 文件 範例。
複雜的佈局
您可以組合不同的佈局元件來產生複雜的 PDF 文件。 從 GitHub 下載並嘗試產生具有複雜佈局的 PDF 文 件 範例。
可以擴充佈局 API。 LayoutContainer.Component
和 LayoutContainer.Container
方法可讓您重複使用自
訂元件。 佈局元件 範例展示如何使用 ILayoutComponent
介面實作自訂元件。
結論
Docotic.Pdf 庫 提供了在 C# 和 VB.NET 中建立 PDF 文件的不同方法。 您可以使用或不 使用佈局插件從頭開始產生PDF文件。 或者,您可以使用 HTML 到 PDF 外掛程 式 從 HTML 建立 PDF。
如果您對 PDF 產生有任何疑問,請聯絡我們。