在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
C# 生成 PDF 的功能對許多現代應用程式來說至關重要,從創建報告到開票系統。 在本文中,我們將探索六種生成的流行方法PDF使用 C# 處理文件,強調包括基於代碼的庫,例如IronPDF,以及在線 API 和工具。 無論您是需要在網頁應用程式中動態生成 PDF 文件,還是僅僅從現有文件創建 PDF 文件,這些工具都能滿足您的需求。
損壞的圖片 從Pixabay添加,從你的文件中選擇或拖放圖片到這裡。
IronPDF是一個專為需要高品質HTML到PDF文件轉換的開發人員設計的高級.NET PDF程式庫。 IronPDF 使用基於 Chromium 的渲染引擎來確保精確的轉換,這使其成為希望將 HTML 頁面或基於網頁的報告轉換為 C# 中 PDF 文件的網絡應用程序的理想選擇。 這個工具以其處理現有 PDF 文件的強大功能而聞名,並提供編輯、合併或分割 PDF 的功能。
IronPDF 通過 NuGet 套件管理器輕鬆整合到 C# 專案中,只需幾行程式碼即可開始生成 PDF 文件。 它是一個多功能工具,適用於動態 HTML 內容和伺服器生成的 PDF 文件輸出。
using IronPdf;
class Program
{
static void Main()
{
string html = "<h1>Hello, World!</h1><p>This PDF is generated from HTML.</p>";
ChromePdfRenderer renderer = new ChromePdfRenderer(); // Create an instance of ChromePdfRenderer
PdfDocument pdf = renderer.RenderHtmlAsPdf(html); // Render the HTML as a PDF document
pdf.SaveAs("Generated.pdf"); // Save the PDF to a specified file
}
}
using IronPdf;
class Program
{
static void Main()
{
string html = "<h1>Hello, World!</h1><p>This PDF is generated from HTML.</p>";
ChromePdfRenderer renderer = new ChromePdfRenderer(); // Create an instance of ChromePdfRenderer
PdfDocument pdf = renderer.RenderHtmlAsPdf(html); // Render the HTML as a PDF document
pdf.SaveAs("Generated.pdf"); // Save the PDF to a specified file
}
}
Imports IronPdf
Friend Class Program
Shared Sub Main()
Dim html As String = "<h1>Hello, World!</h1><p>This PDF is generated from HTML.</p>"
Dim renderer As New ChromePdfRenderer() ' Create an instance of ChromePdfRenderer
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html) ' Render the HTML as a PDF document
pdf.SaveAs("Generated.pdf") ' Save the PDF to a specified file
End Sub
End Class
命名空間導入:using IronPdf; 導入 IronPDF 庫以訪問其類別和方法。
HTML 字串:變數 HTML 包含您想要轉換為 PDF 的 HTML 內容。
渲染器實例:new ChromePdfRenderer();** 創建 HtmlToPdf 類別的實例,提供將 HTML 內容渲染為 PDF 格式的方法。
渲染 PDF:PdfDocument PDF = renderer.RenderHtmlAsPdf(HTML);**將HTML字串轉換為PDF文件。
iTextSharp 是一個成熟的 .NET PDF 庫,提供豐富的功能來創建和編輯 PDF 文件。 它廣泛應用於金融和法律等行業,這些行業需要對文件進行客製化和安全保護。 iTextSharp 允許您從頭開始創建 PDF 檔案、填寫表單及修改 PDF 檔案,提供對文件內容的廣泛控制。 它特別適用於需要生成具有精確佈局和動態數據的 PDF 檔的企業應用程式,例如發票或合約。
using System;
using System.Collections.Generic;
using System.Data.Entity.Core.Mapping;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using iTextSharp.text;
using iTextSharp.text.pdf;
using iTextSharp.tool.xml;
using Voodoo;
namespace Helpers
{
public class PdfGenerator
{
public static Byte[] GeneratePdfFromFragment(string htmlFragment)
{
var html = string.Format(@"
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en'>
<head>
<style type='text/css'>
table,td {{border: 1px solid black;}}
div {{ white-space: nowrap; padding: 2px;}}
table{{ border-collapse: collapse; width: 100%; empty-cells: show;}}
body table {{font-size: 50%;}}
th {{width:500px; height: 28px;}}
td {{width:300px; height: 28px;}}
</style>
</head><body>{0}</body></html>", htmlFragment);
return generate(html);
}
public static Byte[] GeneratePdfFromPage(string htmlPage)
{
return generate(htmlPage);
}
private static Byte[] generate (string html)
{
using (var memoryStream = new MemoryStream())
{
var pdfDocument = new Document(PageSize.LETTER);
var pdfWriter = PdfWriter.GetInstance(pdfDocument, memoryStream);
pdfDocument.Open();
using (var fw = new StringReader(html))
{
XMLWorkerHelper.GetInstance().ParseXHtml(pdfWriter, pdfDocument, fw);
pdfDocument.Close();
fw.Close();
}
return memoryStream.ToArray();
}
}
}
}
using System;
using System.Collections.Generic;
using System.Data.Entity.Core.Mapping;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using iTextSharp.text;
using iTextSharp.text.pdf;
using iTextSharp.tool.xml;
using Voodoo;
namespace Helpers
{
public class PdfGenerator
{
public static Byte[] GeneratePdfFromFragment(string htmlFragment)
{
var html = string.Format(@"
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en'>
<head>
<style type='text/css'>
table,td {{border: 1px solid black;}}
div {{ white-space: nowrap; padding: 2px;}}
table{{ border-collapse: collapse; width: 100%; empty-cells: show;}}
body table {{font-size: 50%;}}
th {{width:500px; height: 28px;}}
td {{width:300px; height: 28px;}}
</style>
</head><body>{0}</body></html>", htmlFragment);
return generate(html);
}
public static Byte[] GeneratePdfFromPage(string htmlPage)
{
return generate(htmlPage);
}
private static Byte[] generate (string html)
{
using (var memoryStream = new MemoryStream())
{
var pdfDocument = new Document(PageSize.LETTER);
var pdfWriter = PdfWriter.GetInstance(pdfDocument, memoryStream);
pdfDocument.Open();
using (var fw = new StringReader(html))
{
XMLWorkerHelper.GetInstance().ParseXHtml(pdfWriter, pdfDocument, fw);
pdfDocument.Close();
fw.Close();
}
return memoryStream.ToArray();
}
}
}
}
Imports System
Imports System.Collections.Generic
Imports System.Data.Entity.Core.Mapping
Imports System.IO
Imports System.Linq
Imports System.Text
Imports System.Threading.Tasks
Imports iTextSharp.text
Imports iTextSharp.text.pdf
Imports iTextSharp.tool.xml
Imports Voodoo
Namespace Helpers
Public Class PdfGenerator
Public Shared Function GeneratePdfFromFragment(ByVal htmlFragment As String) As Byte()
Dim html = String.Format("
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en'>
<head>
<style type='text/css'>
table,td {{border: 1px solid black;}}
div {{ white-space: nowrap; padding: 2px;}}
table{{ border-collapse: collapse; width: 100%; empty-cells: show;}}
body table {{font-size: 50%;}}
th {{width:500px; height: 28px;}}
td {{width:300px; height: 28px;}}
</style>
</head><body>{0}</body></html>", htmlFragment)
Return generate(html)
End Function
Public Shared Function GeneratePdfFromPage(ByVal htmlPage As String) As Byte()
Return generate(htmlPage)
End Function
Private Shared Function generate(ByVal html As String) As Byte()
Using memoryStream As New MemoryStream()
Dim pdfDocument = New Document(PageSize.LETTER)
Dim pdfWriter = PdfWriter.GetInstance(pdfDocument, memoryStream)
pdfDocument.Open()
Using fw = New StringReader(html)
XMLWorkerHelper.GetInstance().ParseXHtml(pdfWriter, pdfDocument, fw)
pdfDocument.Close()
fw.Close()
End Using
Return memoryStream.ToArray()
End Using
End Function
End Class
End Namespace
GeneratePdfFromFragment:處理 HTML 片段(如同部分 HTML 文件) 並通過將其包裹在基本結構中轉換成完整的 HTML 結構。
和模板。 然後它會調用內部的產生方法。GeneratePdfFromPage:接受完整的 HTML 頁面並直接調用生成方法。
generate:此方法負責將HTML轉換為PDF。
它初始化一個 MemoryStream 以在記憶體中保存生成的 PDF。
4.
PDFSharp 是一個輕量級的開源 .NET PDF 庫,非常適合 基本的 PDF 創建工作。 如果您的應用程式僅需簡單的操作,例如添加文字、圖像或表格,PdfSharp 是一個用於在 C# 中生成 PDF 文件的易用選擇。 它缺乏像 HTML 到 PDF 轉換這樣的高級功能,但在使用 C# 生成中小型 PDF 檔案時,以其簡單性而著稱。
using PdfSharp.Pdf;
using PdfSharp.Drawing;
class Program
{
static void Main()
{
// Create a new PDF document
PdfDocument document = new PdfDocument();
document.Info.Title = "Created with PdfSharp";
// Add a page to the document
PdfPage page = document.AddPage();
// Create an XGraphics object to draw on the page
XGraphics gfx = XGraphics.FromPdfPage(page);
// Set a font to use for drawing text
XFont font = new XFont("Verdana", 20, XFontStyle.Bold);
// Draw the text on the PDF page
gfx.DrawString("Hello, World!", font, XBrushes.Black,
new XRect(0, 0, page.Width, page.Height), XStringFormats.Center);
// Save the document to disk
document.Save("Generated.pdf");
}
}
using PdfSharp.Pdf;
using PdfSharp.Drawing;
class Program
{
static void Main()
{
// Create a new PDF document
PdfDocument document = new PdfDocument();
document.Info.Title = "Created with PdfSharp";
// Add a page to the document
PdfPage page = document.AddPage();
// Create an XGraphics object to draw on the page
XGraphics gfx = XGraphics.FromPdfPage(page);
// Set a font to use for drawing text
XFont font = new XFont("Verdana", 20, XFontStyle.Bold);
// Draw the text on the PDF page
gfx.DrawString("Hello, World!", font, XBrushes.Black,
new XRect(0, 0, page.Width, page.Height), XStringFormats.Center);
// Save the document to disk
document.Save("Generated.pdf");
}
}
Imports PdfSharp.Pdf
Imports PdfSharp.Drawing
Friend Class Program
Shared Sub Main()
' Create a new PDF document
Dim document As New PdfDocument()
document.Info.Title = "Created with PdfSharp"
' Add a page to the document
Dim page As PdfPage = document.AddPage()
' Create an XGraphics object to draw on the page
Dim gfx As XGraphics = XGraphics.FromPdfPage(page)
' Set a font to use for drawing text
Dim font As New XFont("Verdana", 20, XFontStyle.Bold)
' Draw the text on the PDF page
gfx.DrawString("Hello, World!", font, XBrushes.Black, New XRect(0, 0, page.Width, page.Height), XStringFormats.Center)
' Save the document to disk
document.Save("Generated.pdf")
End Sub
End Class
Syncfusion PDF Library 是一個高效能的綜合工具,專為需要在各種應用中處理 PDF 的企業設計。 它是更廣泛的Syncfusion套件的一部分,該套件為各種格式和平台提供庫。 PDF 庫的突出之處在於其廣泛的功能集,不僅限於簡單的文件創建,還允許詳細的操作,包括表單填寫、數字簽名和文件安全。
using Syncfusion.Pdf;
using Syncfusion.Pdf.Parsing;
using Syncfusion.Pdf.Graphics;
using Syncfusion.Pdf.Grid;
class Program
{
static void Main()
{
//Create a new PDF document.
PdfDocument document = new PdfDocument();
//Add a page to the document.
PdfPage page = document.Pages.Add();
//Create PDF graphics for the page.
PdfGraphics graphics = page.Graphics;
//Set the standard font.
PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 20);
//Draw the text.
graphics.DrawString("Hello World!!!", font, PdfBrushes.Black, new PointF(0, 0));
//Save the document.
document.Save("Output.pdf");
//Close the document.
document.Close(true);
}
}
using Syncfusion.Pdf;
using Syncfusion.Pdf.Parsing;
using Syncfusion.Pdf.Graphics;
using Syncfusion.Pdf.Grid;
class Program
{
static void Main()
{
//Create a new PDF document.
PdfDocument document = new PdfDocument();
//Add a page to the document.
PdfPage page = document.Pages.Add();
//Create PDF graphics for the page.
PdfGraphics graphics = page.Graphics;
//Set the standard font.
PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 20);
//Draw the text.
graphics.DrawString("Hello World!!!", font, PdfBrushes.Black, new PointF(0, 0));
//Save the document.
document.Save("Output.pdf");
//Close the document.
document.Close(true);
}
}
Imports Syncfusion.Pdf
Imports Syncfusion.Pdf.Parsing
Imports Syncfusion.Pdf.Graphics
Imports Syncfusion.Pdf.Grid
Friend Class Program
Shared Sub Main()
'Create a new PDF document.
Dim document As New PdfDocument()
'Add a page to the document.
Dim page As PdfPage = document.Pages.Add()
'Create PDF graphics for the page.
Dim graphics As PdfGraphics = page.Graphics
'Set the standard font.
Dim font As PdfFont = New PdfStandardFont(PdfFontFamily.Helvetica, 20)
'Draw the text.
graphics.DrawString("Hello World!!!", font, PdfBrushes.Black, New PointF(0, 0))
'Save the document.
document.Save("Output.pdf")
'Close the document.
document.Close(True)
End Sub
End Class
PDFShift 是一項雲端服務,旨在將 HTML 轉換成 PDF 文件。 它透過其 API 與 C# 應用程式無縫整合,允許您將動態生成的 HTML 網頁轉換為專業品質的 PDF。 PDFShift 對於希望即時從 HTML 內容生成 PDF 文件(例如發票或報告)的網頁開發人員特別有用。 由於PDFShift完全透過其REST API運行,您只需向服務發送幾行HTML,即可回收到可下載的PDF檔案。 這是一個用於網頁 PDF 檔案生成的簡單且可擴展的解決方案。
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
using (HttpClient client = new HttpClient())
{
string htmlContent = "<h1>Hello, World!</h1><p>This is generated using PDFShift API.</p>";
var content = new StringContent(htmlContent, Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync("https://api.pdfshift.io/v3/convert", content);
byte[] pdfBytes = await response.Content.ReadAsByteArrayAsync();
System.IO.File.WriteAllBytes("Generated.pdf", pdfBytes);
}
}
}
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
using (HttpClient client = new HttpClient())
{
string htmlContent = "<h1>Hello, World!</h1><p>This is generated using PDFShift API.</p>";
var content = new StringContent(htmlContent, Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync("https://api.pdfshift.io/v3/convert", content);
byte[] pdfBytes = await response.Content.ReadAsByteArrayAsync();
System.IO.File.WriteAllBytes("Generated.pdf", pdfBytes);
}
}
}
Imports System.Net.Http
Imports System.Text
Imports System.Threading.Tasks
Friend Class Program
Shared Async Function Main(ByVal args() As String) As Task
Using client As New HttpClient()
Dim htmlContent As String = "<h1>Hello, World!</h1><p>This is generated using PDFShift API.</p>"
Dim content = New StringContent(htmlContent, Encoding.UTF8, "application/json")
Dim response As HttpResponseMessage = Await client.PostAsync("https://api.pdfshift.io/v3/convert", content)
Dim pdfBytes() As Byte = Await response.Content.ReadAsByteArrayAsync()
System.IO.File.WriteAllBytes("Generated.pdf", pdfBytes)
End Using
End Function
End Class
DocRaptor 是另一個功能強大的基於 API 的 PDF 生成服務,可將 HTML 和 CSS 轉換為高質量的 PDF。 它以卓越的HTML文档渲染而闻名,尤其是在处理复杂的CSS样式、媒体查询和网页字体方面。 這使得DocRaptor成為從HTML模板直接生成專業外觀文件(如報告、發票和電子書)的絕佳選擇。
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
using (HttpClient client = new HttpClient())
{
string apiKey = "YOUR_API_KEY";
string htmlContent = "<h1>Professional Report</h1><p>Generated using DocRaptor API.</p>";
string jsonData = $"{{\"test\": true, \"document_content\": \"{htmlContent}\", \"name\": \"Generated.pdf\", \"document_type\": \"pdf\"}}";
var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync($"https://docraptor.com/docs?user_key={apiKey}", content);
byte[] pdfBytes = await response.Content.ReadAsByteArrayAsync();
System.IO.File.WriteAllBytes("Generated.pdf", pdfBytes);
}
}
}
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
using (HttpClient client = new HttpClient())
{
string apiKey = "YOUR_API_KEY";
string htmlContent = "<h1>Professional Report</h1><p>Generated using DocRaptor API.</p>";
string jsonData = $"{{\"test\": true, \"document_content\": \"{htmlContent}\", \"name\": \"Generated.pdf\", \"document_type\": \"pdf\"}}";
var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync($"https://docraptor.com/docs?user_key={apiKey}", content);
byte[] pdfBytes = await response.Content.ReadAsByteArrayAsync();
System.IO.File.WriteAllBytes("Generated.pdf", pdfBytes);
}
}
}
Imports System.Net.Http
Imports System.Text
Imports System.Threading.Tasks
Friend Class Program
Shared Async Function Main(ByVal args() As String) As Task
Using client As New HttpClient()
Dim apiKey As String = "YOUR_API_KEY"
Dim htmlContent As String = "<h1>Professional Report</h1><p>Generated using DocRaptor API.</p>"
Dim jsonData As String = $"{{""test"": true, ""document_content"": ""{htmlContent}"", ""name"": ""Generated.pdf"", ""document_type"": ""pdf""}}"
Dim content = New StringContent(jsonData, Encoding.UTF8, "application/json")
Dim response As HttpResponseMessage = Await client.PostAsync($"https://docraptor.com/docs?user_key={apiKey}", content)
Dim pdfBytes() As Byte = Await response.Content.ReadAsByteArrayAsync()
System.IO.File.WriteAllBytes("Generated.pdf", pdfBytes)
End Using
End Function
End Class
如果您不想編寫程式碼或需要快速生成 PDF 的解決方案,有幾個線上工具可以讓您快速輕鬆地建立 PDF。 以下是一些值得注意的選項:
Smallpdf 是一個線上平台,提供各種與 PDF 相關的工具,包括從多種文件格式創建 PDF 的功能。 它是為那些想要簡單拖放介面的使用者設計的,不需要編寫程式碼。 Smallpdf 廣泛用於快速文件轉換,例如將 Word 文件、Excel 表格或圖像轉換為 PDF。 它還提供合併、壓縮和拆分 PDF 的工具,使其成為一個多功能的基本 PDF 任務工具。
PDFescape 是一款易於使用的基於網頁的 PDF 編輯器,允許用戶在不需要安裝任何軟件的情況下創建、編輯和查看 PDF。 這是一個很棒的工具,適合需要快速編輯 PDF 的人,例如填寫表格、添加文字註釋或插入圖片。 PDFescape 也提供從頭開始創建新 PDF 的工具,使其成為基本文件創建的靈活選擇。
PDF Candy 是一套免費的在線 PDF 工具,涵蓋從文件轉換到編輯的一系列 PDF 相關任務。 對於需要快速執行 PDF 操作又不想註冊帳號或安裝軟體的用戶來說,這是一個絕佳的選擇。 PDF Candy 支援將多種檔案類型,如 Word 文件、圖片和文字檔,轉換為 PDF。 它還提供合併、拆分和壓縮PDF的工具。
選擇在 C# 中生成 PDF 文件的正確工具取決於您的需求。 如果您需要從 HTML 內容生成 PDF 文件,IronPDF 和 PDFShift 是出色的選擇。 iTextSharp 和 Syncfusion 提供了廣泛的自訂選項和對文件結構的控制,適用於較為複雜的專案。 對於較簡單的開源解決方案,PDFsharp 是修改 PDF 文件或創建基本 PDF 的可靠選擇。 最後,對於非開發人員而言,Smallpdf、PDFescape 和 PDF Candy 提供了簡單且無需代碼的選項來處理 PDF 文件。
對於有興趣嘗試的人IronPDF這使其成為開發人員在購買付費授權之前,測試其HTML轉PDF轉換和PDF操作功能的絕佳選擇。 試用版讓您探索其高級功能,如高品質 PDF 文件生成、安全選項和修改現有 PDF 文件,使您能親身體驗工具的能力。 如果您的專案需要頻繁的 HTML 到 PDF 轉換或進行複雜的 PDF 編輯,IronPDF 的免費試用是查看它是否符合您需求的好方法。
通過評估每種工具的特定功能以及您的專案範圍,您可以選擇最佳解決方案以在 C# 中有效生成 PDF 文件。