如何使用 IronPDF 的 PDF API .NET 解決方案
在ASP.NET Core中將數位簽章新增到PDF可保護文件完整性,確認簽署者身份,並使文件在大多數司法管轄區具有法律效力。 使用IronPDF,您可以在伺服器端使用證書文件簽署PDF,新增可見簽章圖像,並嵌入互動簽章表單字段──所有這些都在幾行C#程式碼中完成。
從NuGet安裝程式庫,獲取您的.pfx證書,然後按照下面的範例構建一個適合生產的文件簽署工作流。
Install-Package IronPdf
您也可以通過Visual Studio中的NuGet Package Manager安裝它,或直接從IronPDF產品頁面下載。 開始免費試用以測試所有簽署功能,無需承諾。
什麼是PDF數位簽章,為什麼這很重要?
數位簽章是一種加密機制,將簽署者的身份與文件的特定版本綁定在一起。 它不同於簡單的電子簽名──例如輸入的名字或掃描的圖片──因為它使用公鑰加密來建立可驗證且防篡改的印記。
當某人數位簽署PDF時,簽署軟體會生成文件內容的雜湊,並用簽署者的私鑰加密該雜湊。 生成的簽章嵌入在PDF中,並附上簽署者的公證書。 任何支持數位簽章的PDF閱讀器──包括Adobe Acrobat Reader和現代瀏覽器內建的PDF查看器──都可以使用公鑰解密雜湊並將其與文件的新計算的雜湊進行比較。 如果雜湊值匹配,則文件是正本且未被修改。
數位簽章在法律上的重要性
在大多數國家,數位簽署的文件具有與手寫紙質合同相同的法律效力。 歐盟的eIDAS法規和美國的ESIGN法案都承認在某些條件滿足時,電子簽名具有法律約束力。 基於證書的數位簽章滿足這些要求中最強的等級。
數位簽章在ASP.NET Core中的應用
在ASP.NET Core應用中進行伺服器端簽署允許您在處理過程中自動簽署文件──無需使用者端軟體。 合同、發票、合規報告和NDA都可以在生成時簽署,且簽署的文件可以直接返回給使用者或儲存在文件管理系統中。 IronPDF處理整個流程,從HTML到PDF渲染到加密簽署,因此您可以實現工作流程而無需觸及低級別的PDF規格細節。
如何在ASP.NET Core專案中安裝IronPDF?
通往有效簽署環境的最快路徑是NuGet套件。 在Visual Studio中打開Package Manager Console,然後運行:
Install-Package IronPdf
或者,在Solution Explorer中右鍵點選專案,選擇"管理NuGet套件",搜尋IronPdf,然後點選安裝。 安裝後,將以下using指令新增到控制器或服務類的頂部:
using IronPdf;
using IronPdf.Signing;
using IronPdf;
using IronPdf.Signing;
Imports IronPdf
Imports IronPdf.Signing
IronPDF以.NET 8和.NET 9/10為目標,所以它自然適合現代ASP.NET Core專案。 要獲得首次設置的詳細指導,請參看IronPDF快速入門指南。
如何在ASP.NET Core中使用證書文件簽署PDF?
最常見的簽署方法是使用.p12證書文件。這些文件將私鑰和公證書鏈合併成一個受密碼保護的檔案。您可以從信任的證書授權機構(CA)如DigiCert或GlobalSign獲得,或生成自簽名證書以用於開發和測試。
下面的範例從HTML生成PDF並應用基於證書的數位簽章:
using IronPdf;
using IronPdf.Signing;
using Microsoft.AspNetCore.Mvc;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapPost("/sign-with-certificate", (IWebHostEnvironment env) =>
{
// Generate a PDF from HTML content
var renderer = new ChromePdfRenderer();
var document = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1><p>Terms and conditions...</p>");
// Locate the PFX certificate on the server
string certPath = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx");
// Build the signature object
var signature = new PdfSignature(certPath, "yourPassword")
{
SigningContact = "legal@yourcompany.com",
SigningLocation = "Chicago, IL, USA",
SigningReason = "Document Approval"
};
// Apply the signature and save
document.Sign(signature);
string outputPath = Path.Combine(Path.GetTempPath(), "signed-contract.pdf");
document.SaveAs(outputPath);
return Results.File(outputPath, "application/pdf", "signed-contract.pdf");
});
app.Run();
using IronPdf;
using IronPdf.Signing;
using Microsoft.AspNetCore.Mvc;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapPost("/sign-with-certificate", (IWebHostEnvironment env) =>
{
// Generate a PDF from HTML content
var renderer = new ChromePdfRenderer();
var document = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1><p>Terms and conditions...</p>");
// Locate the PFX certificate on the server
string certPath = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx");
// Build the signature object
var signature = new PdfSignature(certPath, "yourPassword")
{
SigningContact = "legal@yourcompany.com",
SigningLocation = "Chicago, IL, USA",
SigningReason = "Document Approval"
};
// Apply the signature and save
document.Sign(signature);
string outputPath = Path.Combine(Path.GetTempPath(), "signed-contract.pdf");
document.SaveAs(outputPath);
return Results.File(outputPath, "application/pdf", "signed-contract.pdf");
});
app.Run();
Imports IronPdf
Imports IronPdf.Signing
Imports Microsoft.AspNetCore.Mvc
Dim builder = WebApplication.CreateBuilder(args)
Dim app = builder.Build()
app.MapPost("/sign-with-certificate", Function(env As IWebHostEnvironment)
' Generate a PDF from HTML content
Dim renderer = New ChromePdfRenderer()
Dim document = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1><p>Terms and conditions...</p>")
' Locate the PFX certificate on the server
Dim certPath As String = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx")
' Build the signature object
Dim signature = New PdfSignature(certPath, "yourPassword") With {
.SigningContact = "legal@yourcompany.com",
.SigningLocation = "Chicago, IL, USA",
.SigningReason = "Document Approval"
}
' Apply the signature and save
document.Sign(signature)
Dim outputPath As String = Path.Combine(Path.GetTempPath(), "signed-contract.pdf")
document.SaveAs(outputPath)
Return Results.File(outputPath, "application/pdf", "signed-contract.pdf")
End Function)
app.Run()
ChromePdfRenderer將任何有效的HTML字串或URL轉換為PDF。 SigningReason)新增PDF查看器在簽名面板中顯示的元資料。 SaveAs將簽署文件寫入磁碟。
從記憶體返回簽署文件
當您不想將臨時文件寫入磁碟時,將PDF保存到MemoryStream並直接從控制器動作中返回:
var stream = new MemoryStream();
document.SaveAs(stream);
stream.Position = 0;
return Results.File(stream, "application/pdf", "signed-contract.pdf");
var stream = new MemoryStream();
document.SaveAs(stream);
stream.Position = 0;
return Results.File(stream, "application/pdf", "signed-contract.pdf");
Dim stream As New MemoryStream()
document.SaveAs(stream)
stream.Position = 0
Return Results.File(stream, "application/pdf", "signed-contract.pdf")
此方法適合高吞吐量的API,因為臨時文件管理會增加不必要的開銷。
有關完整屬性參考,請參考PdfSignature API文件。
如何將可見簽章圖像新增到PDF?
加密簽章保護文件完整性,但在生成的PDF中不可見。 許多工作流程──特別是涉及合同或信件的──還要求可見的表示,如掃描的手寫簽名或公司印章,印在頁面上。
IronPDF透過LoadSignatureImageFromFile方法支持此功能。 該方法接受圖像路徑、頁面索引和IronSoftware.Drawing.Rectangle,定義可見簽章的位置和尺寸:
using IronPdf;
using IronPdf.Signing;
using IronSoftware.Drawing;
using Microsoft.AspNetCore.Mvc;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapPost("/sign-with-visible-image", (IWebHostEnvironment env) =>
{
// Load an existing PDF (for example, an invoice template)
string pdfPath = Path.Combine(env.ContentRootPath, "Documents", "invoice.pdf");
var document = PdfDocument.FromFile(pdfPath);
// Paths to the certificate and the signature image
string certPath = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx");
string imagePath = Path.Combine(env.ContentRootPath, "Images", "signature.png");
// Define where the visible signature appears (x, y, width, height in points)
var signatureArea = new Rectangle(50, 680, 200, 80);
var signature = new PdfSignature(certPath, "yourPassword");
signature.LoadSignatureImageFromFile(imagePath, pageIndex: 0, signatureArea);
document.Sign(signature);
string outputPath = Path.Combine(Path.GetTempPath(), "signed-invoice.pdf");
document.SaveAs(outputPath);
return Results.File(outputPath, "application/pdf", "signed-invoice.pdf");
});
app.Run();
using IronPdf;
using IronPdf.Signing;
using IronSoftware.Drawing;
using Microsoft.AspNetCore.Mvc;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapPost("/sign-with-visible-image", (IWebHostEnvironment env) =>
{
// Load an existing PDF (for example, an invoice template)
string pdfPath = Path.Combine(env.ContentRootPath, "Documents", "invoice.pdf");
var document = PdfDocument.FromFile(pdfPath);
// Paths to the certificate and the signature image
string certPath = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx");
string imagePath = Path.Combine(env.ContentRootPath, "Images", "signature.png");
// Define where the visible signature appears (x, y, width, height in points)
var signatureArea = new Rectangle(50, 680, 200, 80);
var signature = new PdfSignature(certPath, "yourPassword");
signature.LoadSignatureImageFromFile(imagePath, pageIndex: 0, signatureArea);
document.Sign(signature);
string outputPath = Path.Combine(Path.GetTempPath(), "signed-invoice.pdf");
document.SaveAs(outputPath);
return Results.File(outputPath, "application/pdf", "signed-invoice.pdf");
});
app.Run();
Imports IronPdf
Imports IronPdf.Signing
Imports IronSoftware.Drawing
Imports Microsoft.AspNetCore.Mvc
Dim builder = WebApplication.CreateBuilder(args)
Dim app = builder.Build()
app.MapPost("/sign-with-visible-image", Function(env As IWebHostEnvironment)
' Load an existing PDF (for example, an invoice template)
Dim pdfPath As String = Path.Combine(env.ContentRootPath, "Documents", "invoice.pdf")
Dim document = PdfDocument.FromFile(pdfPath)
' Paths to the certificate and the signature image
Dim certPath As String = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx")
Dim imagePath As String = Path.Combine(env.ContentRootPath, "Images", "signature.png")
' Define where the visible signature appears (x, y, width, height in points)
Dim signatureArea As New Rectangle(50, 680, 200, 80)
Dim signature As New PdfSignature(certPath, "yourPassword")
signature.LoadSignatureImageFromFile(imagePath, pageIndex:=0, signatureArea)
document.Sign(signature)
Dim outputPath As String = Path.Combine(Path.GetTempPath(), "signed-invoice.pdf")
document.SaveAs(outputPath)
Return Results.File(outputPath, "application/pdf", "signed-invoice.pdf")
End Function)
app.Run()
可見簽章圖像被合成到您提供的座標上的指定頁面上。加密簽章同時應用於整個文件,因此您可以在一個操作中獲得安全性和視覺確認。
如果圖像位於記憶體中(例如從資料庫或雲端儲存提取),請改用LoadSignatureImageFromStream。 欲了解更多關於視覺簽名選項的詳細內情,請參考PDF簽署指導指南。
如何為外部簽名者建立簽章表單字段?
在某些工作流程中,文件由您的系統建立,但必須由外部方──顧客、合作夥伴或監管機構簽署。 與其在前期收集該方的證書,不如在PDF中嵌入專用的簽章表單字段並將文件發送給他們。 接收方在Adobe Acrobat Reader或其他相容的查看器中打開PDF,點選簽章字段,並應用其自身的證書或電子簽名。
using IronPdf;
using IronPdf.Forms;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/generate-signable-form", (IWebHostEnvironment env) =>
{
// Render the document that requires a client signature
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(@"
<h1>Client Service Agreement</h1>
<p>Please review the terms below and sign in the field provided.</p>
<p>By signing, you confirm acceptance of all listed terms and conditions.</p>
");
// Define the signature field: name, page, x, y, width, height (in points)
var signatureField = new SignatureFormField(
"ClientSignature",
pageIndex: 0,
x: 50,
y: 600,
width: 300,
height: 100
);
pdf.Form.Add(signatureField);
string outputPath = Path.Combine(Path.GetTempPath(), "client-agreement.pdf");
pdf.SaveAs(outputPath);
return Results.File(outputPath, "application/pdf", "client-agreement.pdf");
});
app.Run();
using IronPdf;
using IronPdf.Forms;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/generate-signable-form", (IWebHostEnvironment env) =>
{
// Render the document that requires a client signature
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(@"
<h1>Client Service Agreement</h1>
<p>Please review the terms below and sign in the field provided.</p>
<p>By signing, you confirm acceptance of all listed terms and conditions.</p>
");
// Define the signature field: name, page, x, y, width, height (in points)
var signatureField = new SignatureFormField(
"ClientSignature",
pageIndex: 0,
x: 50,
y: 600,
width: 300,
height: 100
);
pdf.Form.Add(signatureField);
string outputPath = Path.Combine(Path.GetTempPath(), "client-agreement.pdf");
pdf.SaveAs(outputPath);
return Results.File(outputPath, "application/pdf", "client-agreement.pdf");
});
app.Run();
Imports IronPdf
Imports IronPdf.Forms
Imports Microsoft.AspNetCore.Builder
Imports Microsoft.AspNetCore.Hosting
Imports Microsoft.Extensions.Hosting
Dim builder = WebApplication.CreateBuilder(args)
Dim app = builder.Build()
app.MapGet("/generate-signable-form", Function(env As IWebHostEnvironment)
' Render the document that requires a client signature
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("
<h1>Client Service Agreement</h1>
<p>Please review the terms below and sign in the field provided.</p>
<p>By signing, you confirm acceptance of all listed terms and conditions.</p>
")
' Define the signature field: name, page, x, y, width, height (in points)
Dim signatureField = New SignatureFormField(
"ClientSignature",
pageIndex:=0,
x:=50,
y:=600,
width:=300,
height:=100
)
pdf.Form.Add(signatureField)
Dim outputPath As String = Path.Combine(Path.GetTempPath(), "client-agreement.pdf")
pdf.SaveAs(outputPath)
Return Results.File(outputPath, "application/pdf", "client-agreement.pdf")
End Function)
app.Run()
SignatureFormField構造函式參數直接映射到頁面上的字段位置。 當接收方打開PDF時,他們會看到一個清晰劃定的框,顯示簽名應該放置的位置。 完成的表單然後可以返回到您的系統,在那裡您可以載入、驗證嵌入的簽名並存檔。
有關更多PDF表單處理的內容──包括回讀提交的表單資料──請參考PDF表單編輯指導指南。
如何程式化地驗證數位簽章?
在文件簽署並返回後,您可能需要驗證簽名仍然有效並且文件未被更改。 IronPDF通過PdfDocument物件公開簽章驗證:
using IronPdf;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/verify-signature", (IWebHostEnvironment env) =>
{
string signedPath = Path.Combine(env.ContentRootPath, "Documents", "signed-contract.pdf");
var document = PdfDocument.FromFile(signedPath);
// Retrieve all embedded signatures
var signatures = document.GetSignatures();
foreach (var sig in signatures)
{
bool isValid = sig.VerifySignature();
string status = isValid
? $"Valid -- signed by {sig.SignerName} on {sig.SigningTime:D}"
: "INVALID -- document may have been tampered with";
Console.WriteLine(status);
}
return Results.Ok(new { SignatureCount = signatures.Count });
});
app.Run();
using IronPdf;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/verify-signature", (IWebHostEnvironment env) =>
{
string signedPath = Path.Combine(env.ContentRootPath, "Documents", "signed-contract.pdf");
var document = PdfDocument.FromFile(signedPath);
// Retrieve all embedded signatures
var signatures = document.GetSignatures();
foreach (var sig in signatures)
{
bool isValid = sig.VerifySignature();
string status = isValid
? $"Valid -- signed by {sig.SignerName} on {sig.SigningTime:D}"
: "INVALID -- document may have been tampered with";
Console.WriteLine(status);
}
return Results.Ok(new { SignatureCount = signatures.Count });
});
app.Run();
Imports IronPdf
Imports Microsoft.AspNetCore.Builder
Imports Microsoft.AspNetCore.Hosting
Imports Microsoft.Extensions.Hosting
Dim builder = WebApplication.CreateBuilder(args)
Dim app = builder.Build()
app.MapGet("/verify-signature", Function(env As IWebHostEnvironment)
Dim signedPath As String = Path.Combine(env.ContentRootPath, "Documents", "signed-contract.pdf")
Dim document = PdfDocument.FromFile(signedPath)
' Retrieve all embedded signatures
Dim signatures = document.GetSignatures()
For Each sig In signatures
Dim isValid As Boolean = sig.VerifySignature()
Dim status As String = If(isValid,
$"Valid -- signed by {sig.SignerName} on {sig.SigningTime:D}",
"INVALID -- document may have been tampered with")
Console.WriteLine(status)
Next
Return Results.Ok(New With {.SignatureCount = signatures.Count})
End Function)
app.Run()
GetSignatures()返回嵌入在PDF中的所有數位簽章的列表。 每個VerifySignature()、簽署者名稱、簽署時間戳和證書鏈。 該資訊足以構建審計蹤跡或文件管理儀錶板,標示出具有損壞或過期簽章的PDF。
如何在生產中管理證書?
將.pfx文件儲存在文件系統上在開發過程中有效,但不適合生產環境。 證書文件包含私鑰,如果文件被破解,用該密鑰簽署的每個文件都處於風險中。
使用Azure Key Vault
Azure Key Vault讓您在不讓私鑰離開金庫的情況下儲存和使用證書。 .NET SDK提供的CertificateClient下載公開的證書資訊。 對於保持私鑰在Key Vault中的實際簽署操作,您可以使用Azure.Security.KeyVault.Keys套件在伺服器端執行加密操作。
使用環境變數和機密
對於小型專案,將證書作為Base64編碼字串儲存在環境變數或ASP.NET Core Secrets Manager中,並在運行時進行解碼:
string certBase64 = Environment.GetEnvironmentVariable("PDF_SIGNING_CERT")
?? throw new InvalidOperationException("PDF_SIGNING_CERT environment variable is not set.");
byte[] certBytes = Convert.FromBase64String(certBase64);
string certPassword = Environment.GetEnvironmentVariable("PDF_SIGNING_CERT_PASSWORD")
?? throw new InvalidOperationException("PDF_SIGNING_CERT_PASSWORD environment variable is not set.");
var signature = new PdfSignature(certBytes, certPassword);
string certBase64 = Environment.GetEnvironmentVariable("PDF_SIGNING_CERT")
?? throw new InvalidOperationException("PDF_SIGNING_CERT environment variable is not set.");
byte[] certBytes = Convert.FromBase64String(certBase64);
string certPassword = Environment.GetEnvironmentVariable("PDF_SIGNING_CERT_PASSWORD")
?? throw new InvalidOperationException("PDF_SIGNING_CERT_PASSWORD environment variable is not set.");
var signature = new PdfSignature(certBytes, certPassword);
Imports System
Dim certBase64 As String = Environment.GetEnvironmentVariable("PDF_SIGNING_CERT")
If certBase64 Is Nothing Then
Throw New InvalidOperationException("PDF_SIGNING_CERT environment variable is not set.")
End If
Dim certBytes As Byte() = Convert.FromBase64String(certBase64)
Dim certPassword As String = Environment.GetEnvironmentVariable("PDF_SIGNING_CERT_PASSWORD")
If certPassword Is Nothing Then
Throw New InvalidOperationException("PDF_SIGNING_CERT_PASSWORD environment variable is not set.")
End If
Dim signature = New PdfSignature(certBytes, certPassword)
此模式將憑據排除在源程式碼控制之外,並使旋轉變得簡單──更新環境變數並重啟服務。
如何高效地批量簽署多個PDF?
當您需要在一次操作中簽署數十或數百個文件時──例如,在月底簽署整批發票──一次載入證書並在所有文件中重用PdfSignature物件可以減少開銷:
using IronPdf;
using IronPdf.Signing;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapPost("/batch-sign", (IWebHostEnvironment env) =>
{
string certPath = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx");
var signature = new PdfSignature(certPath, "yourPassword")
{
SigningReason = "Batch Invoice Approval"
};
string[] invoicePaths = Directory.GetFiles(
Path.Combine(env.ContentRootPath, "Invoices"),
"*.pdf"
);
string outputDir = Path.Combine(env.ContentRootPath, "Signed");
Directory.CreateDirectory(outputDir);
foreach (string invoicePath in invoicePaths)
{
var doc = PdfDocument.FromFile(invoicePath);
doc.Sign(signature);
string outputFile = Path.Combine(outputDir, Path.GetFileName(invoicePath));
doc.SaveAs(outputFile);
}
return Results.Ok(new { SignedCount = invoicePaths.Length });
});
app.Run();
using IronPdf;
using IronPdf.Signing;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapPost("/batch-sign", (IWebHostEnvironment env) =>
{
string certPath = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx");
var signature = new PdfSignature(certPath, "yourPassword")
{
SigningReason = "Batch Invoice Approval"
};
string[] invoicePaths = Directory.GetFiles(
Path.Combine(env.ContentRootPath, "Invoices"),
"*.pdf"
);
string outputDir = Path.Combine(env.ContentRootPath, "Signed");
Directory.CreateDirectory(outputDir);
foreach (string invoicePath in invoicePaths)
{
var doc = PdfDocument.FromFile(invoicePath);
doc.Sign(signature);
string outputFile = Path.Combine(outputDir, Path.GetFileName(invoicePath));
doc.SaveAs(outputFile);
}
return Results.Ok(new { SignedCount = invoicePaths.Length });
});
app.Run();
Imports IronPdf
Imports IronPdf.Signing
Dim builder = WebApplication.CreateBuilder(args)
Dim app = builder.Build()
app.MapPost("/batch-sign", Function(env As IWebHostEnvironment)
Dim certPath As String = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx")
Dim signature As New PdfSignature(certPath, "yourPassword") With {
.SigningReason = "Batch Invoice Approval"
}
Dim invoicePaths As String() = Directory.GetFiles(
Path.Combine(env.ContentRootPath, "Invoices"),
"*.pdf"
)
Dim outputDir As String = Path.Combine(env.ContentRootPath, "Signed")
Directory.CreateDirectory(outputDir)
For Each invoicePath As String In invoicePaths
Dim doc = PdfDocument.FromFile(invoicePath)
doc.Sign(signature)
Dim outputFile As String = Path.Combine(outputDir, Path.GetFileName(invoicePath))
doc.SaveAs(outputFile)
Next
Return Results.Ok(New With {.SignedCount = invoicePaths.Length})
End Function)
app.Run()
在迴圈外部只建立一次PdfSignature物件意味著證書文件將被讀取和解析一次。 每次迭代載入、簽署和保存單個PDF。 對於非常大的批次,考慮使用PdfDocument實例隔離到單個執行緒時。
如何排除常見的簽署錯誤?
"找不到證書"或"密碼無效"
在將證書路徑傳遞給File.Exists(certPath)仔細檢查。 證書密碼對大小寫敏感,必須完全匹配。 在開發過程中,通常會生成帶有簡單密碼的自簽名證書; 在生產中,將密碼視為秘密,並從機密管理器中載入。
"簽章無效"在PDF查看器中
在Adobe Acrobat中"簽章無效"警告通常意味著三種情況之一:(1)證書不被查看器的證書儲存信任,(2)文件在簽署後被修改,或(3)簽署證書已經過期。 對於生產使用,從信任的CA獲取證書,並確保系統時鐘同步。 對於開發,Adobe提供了暫時信任自簽名證書的指導。
"呼叫Sign()後文件未簽署"
呼叫SaveAs或保存到流時簽章才會完成。 確保您在Sign後呼叫保存方法,並確認輸出文件路徑是可寫的。
如需完整的API詳情和故障排除資源,請存取IronPDF文件中心和IronPDF物件參考。 如果您需要支援,IronPDF支援頁面可以讓您與工程團隊聯繫。
您的下一步是什麼?
在了解三個核心操作後,為ASP.NET Core中的數位PDF簽署會變得簡單:載入證書、呼叫Sign,並保存結果。 IronPDF處理加密的繁重工作,因此您可以專注於應用程式的業務邏輯。
要繼續構建您的文件工作流程,請探索這些相關主題:
- 如何從HTML生成PDF在ASP.NET Core中──大多數簽署工作流程的基礎
- 如何新增PDF密碼和權限──將簽署與加密相結合以獲得最大安全性
- 如何合併和拆分PDF──在簽署前組合多文件包
- IronPDF授權選擇──選擇符合您部署的計劃
- IronPDF NuGet套件──檢查最新的發行版本和更改日誌
從免費IronPDF試用開始,並在一小時內讓您首個簽署的PDF運行。 如果您有問題或遇到邊界情況,Iron Software支援團隊將隨時為您提供幫助,保證您發送可靠且合法合規的文件簽署工作流程。
常見問題
什麼是ASP.NET Core中的數位簽章?
ASP.NET Core中的數位簽章類似於數位封蠟,用於驗證PDF文件的真偽和完整性。它確保文件具有法律效力且未經篡改。
如何使用IronPDF為PDF文件新增數位簽章?
您可以通過包含證書並設置簽署文件來使用IronPDF為PDF文件新增數位簽章,確保其既安全又可驗證。
為什麼數位簽章對我的商業文件很重要?
數位簽章至關重要,因為它驗證合約或發票等文件的真偽和未變更,從而保護您的業務免受潛在法律風險。
我可以使用IronPDF在PDF中建立互動式表單欄位嗎?
是的,IronPDF允許您在PDF中建立互動式表單欄位,可以提升使用者互動並簡化在ASP.NET Core應用中的文件流程。
是否可以將可見的簽名新增到我的PDF文件中?
是的,使用IronPDF,您可以將可見的簽名新增到您的PDF文件中,使接收方清楚文件已安全簽署並驗證。
在PDF中用於數位簽章的證書型別有哪些?
您可以在PDF中使用多種型別的證書進行數位簽章,包括自簽名證書和由受信任證書頒發機構簽發的證書,具體取決於所需的安全級別和信任度。
IronPDF如何確保PDF文件未被篡改?
IronPDF通過使用驗證文件完整性和真實性的數位簽章,來確保PDF文件未被篡改,如果在簽署後進行了更改,則會提醒接收者。
我可以在ASP.NET Core應用中自動化數位簽署過程嗎?
是的,您可以在ASP.NET Core應用中使用IronPDF自動化數位簽署過程,這允許批量處理並整合到現有的工作流程中。

