A Developer's Guide to Digitally Signing PDFs with C
Ten obszerny przewodnik pokazuje programistom C#, jak cyfrowo podpisywać PDF-y za pomocą IronPDF, obejmując podpisy oparte na certyfikatach, wizualne stemple i interaktywne pola formularzy, aby zapewnić autentyczność i bezpieczeństwo dokumentów.
Dodanie podpisu do dokumentu PDF to często wymóg w wielu aplikacjach, ale "podpisywanie" może znaczyć różne rzeczy. Dla niektórych to kwestia stosowania niezmiennego podpisu cyfrowego za pomocą certyfikatu zabezpieczeń. Dla innych może to być stemplowanie wizualnego obrazu podpisu odręcznego na dokumencie lub dodanie interaktywnego pola formularza do elektronicznego podpisania przez użytkowników.
Ten przewodnik zapewnia szczegółowy przegląd dla programistów C#, jak wykonać wszystkie te zadania, używając biblioteki IronPDF for .NET. Omówimy wszystko, od stosowania bezpiecznego X509Certificate2 podpisu cyfrowego, po stemplowanie sygnatur graficznych i tworzenie interaktywnych pól podpisów, zapewniając, że dokumenty PDF są autentyczne, bezpieczne i profesjonalne.
Szybki start: Cyfrowo podpisz PDF za pomocą IronPDF
Szybko rozpocznij pracę z IronPDF, aby cyfrowo podpisywać swoje dokumenty PDF za pomocą prostej, bezpośredniej procedury. Ten przykład pokazuje, jak użyć certyfikatu .pfx do uwierzytelnienia i podpisania pliku PDF, zapewniając integralność i autentyczność dokumentu. Postępuj zgodnie z tymi krokami, aby płynnie zintegrować cyfrowe podpisywanie w swojej aplikacji.
-
Install IronPDF with NuGet Package Manager
PM > Install-Package IronPdf -
Skopiuj i uruchom ten fragment kodu.
new IronPdf.Signing.PdfSignature("certificate.pfx", "password").SignPdfFile("input.pdf"); -
Wdrożenie do testowania w środowisku produkcyjnym
Rozpocznij używanie IronPDF w swoim projekcie już dziś z darmową wersją próbną
Minimalny proces (5 kroków)
- Zainstaluj bibliotekę IronPDF for .NET.
- Zastosuj podpis cyfrowy za pomocą obiektu
X509Certificate2. - Dodaj wizualny obraz, aby przedstawić podpis cyfrowy.
- Stemplem graficznym lub odręcznym podpisem na pliku PDF.
- Dodaj interaktywne pole formularza podpisu do elektronicznego podpisania.
Jak zastosować podpis cyfrowy do PDF za pomocą certyfikatu?
Możesz zastosować podpis cyfrowy do dokumentu PDF, używając pliku certyfikatu cyfrowego (takiego jak .pfx lub .p12), aby zagwarantować autentyczność i integralność dokumentu. Ten proces zapewnia, że dokument nie został zmieniony od momentu jego podpisania. Dla pełnego przeglądu możliwości cyfrowego podpisywania, zapoznaj się z naszym szczegółowym przewodnikiem po podpisach cyfrowych.
IronPDF zapewnia prosty interfejs API do tego celu, wspierając wiele sposobów zastosowania podpisu cyfrowego. Rdzeniem tej funkcjonalności jest klasa PdfSignature, która kapsułkuje certyfikat i wszystkie powiązane metadane dla podpisu.
| Metoda podpisywania | Opis |
|---|---|
Sign |
Podpisuje plik PDF za pomocą PdfSignature obiektu, który jest tworzony i konfigurowany. |
SignWithFile |
Podpisuje PDF za pomocą pliku certyfikatu podpisu cyfrowego (.pfx lub .p12) zlokalizowanego na dysku. |
SignWithStore |
Podpisuje PDF za pomocą podpisu cyfrowego z przechowalni certyfikatów komputera, zidentyfikowanego przez ID odciskiem palca. |
Użycie obiektu X509Certificate2
Dla maksymalnej kontroli możesz utworzyć obiekt X509Certificate2 z pliku certyfikatu. IronPDF w pełni przestrzega standardu X509Certificate2, oferując solidną i bezpieczną metodę implementacji podpisu cyfrowego. Podczas tworzenia obiektu certyfikatu należy upewnić się, że X509KeyStorageFlags są ustawione na Exportable, co jest wymagane przez podstawowe interfejsy kryptograficzne API. Sprawdź praktyczne przykłady podpisów cyfrowych w naszym repozytorium kodu.
Install-Package IronPdf
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;
// Create a new PDF from an HTML string for demonstration.
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Signed Document</h1><p>This document has been digitally signed.</p>");
// Load the certificate from a .pfx file with its password.
// The X509KeyStorageFlags.Exportable flag is crucial for allowing the private key to be used in the signing process.
var cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);
// Create a PdfSignature object using the loaded certificate.
var signature = new PdfSignature(cert);
// Apply the signature to the PDF document.
pdf.Sign(signature);
// Save the securely signed PDF document.
pdf.SaveAs("Signed.pdf");
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;
// Create a new PDF from an HTML string for demonstration.
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Signed Document</h1><p>This document has been digitally signed.</p>");
// Load the certificate from a .pfx file with its password.
// The X509KeyStorageFlags.Exportable flag is crucial for allowing the private key to be used in the signing process.
var cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);
// Create a PdfSignature object using the loaded certificate.
var signature = new PdfSignature(cert);
// Apply the signature to the PDF document.
pdf.Sign(signature);
// Save the securely signed PDF document.
pdf.SaveAs("Signed.pdf");
Imports IronPdf
Imports IronPdf.Signing
Imports System.Security.Cryptography.X509Certificates
' Create a new PDF from an HTML string for demonstration.
Private renderer = New ChromePdfRenderer()
Private pdf = renderer.RenderHtmlAsPdf("<h1>Signed Document</h1><p>This document has been digitally signed.</p>")
' Load the certificate from a .pfx file with its password.
' The X509KeyStorageFlags.Exportable flag is crucial for allowing the private key to be used in the signing process.
Private cert = New X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable)
' Create a PdfSignature object using the loaded certificate.
Private signature = New PdfSignature(cert)
' Apply the signature to the PDF document.
pdf.Sign(signature)
' Save the securely signed PDF document.
pdf.SaveAs("Signed.pdf")
Powyższy kod najpierw generuje prosty PDF. Następnie ładuje plik certyfikatu .pfx do obiektu X509Certificate2. Ten obiekt, reprezentujący cyfrową tożsamość, jest przekazywany do konstruktora PdfSignature. Ostatecznie, metoda pdf.Sign stosuje ten podpis do dokumentu przed jego zapisaniem. Więcej informacji na temat klasy X509Certificate2 można znaleźć w oficjalnej dokumentacji Microsoft.
Dodawanie szczegółowych informacji do podpisu cyfrowego
Podpis cyfrowy może zawierać więcej niż tylko certyfikat; można osadzić bogate metadane, aby dostarczyć kontekst dotyczący podpisu. Obejmuje to lokalizację podpisu, powód, informacje kontaktowe i bezpieczny znacznik czasu od zaufanego organu. Można również ustawiać i edytować metadane dla dodatkowych właściwości dokumentu.
Dodanie tych szczegółów poprawia ścieżkę audytu dokumentu i dostarcza weryfikatorom cennych informacji. IronPDF obsługuje również serwery czasu, które używają nowoczesnych SHA256 i SHA512 algorytmów haszujących.
using IronPdf;
using IronPdf.Signing;
using IronSoftware.Drawing;
using System;
// Load an existing PDF document to be signed.
var pdf = PdfDocument.FromFile("invoice.pdf");
// Create a PdfSignature object directly from the certificate file and password.
var signature = new PdfSignature("IronSoftware.pfx", "123456");
// Add detailed metadata to the signature for a comprehensive audit trail.
// These properties enhance the signature's credibility and provide context
signature.SignatureDate = DateTime.Now;
signature.SigningContact = "legal@ironsoftware.com";
signature.SigningLocation = "Chicago, USA";
signature.SigningReason = "Contractual Agreement";
// Add a secure timestamp from a trusted Time Stamp Authority (TSA).
// This provides cryptographic proof of the signing time.
signature.TimeStampUrl = new Uri("[http://timestamp.digicert.com](http://timestamp.digicert.com)");
signature.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256;
// Apply a visual appearance to the signature. (More on this in the next section)
signature.SignatureImage = new PdfSignatureImage("assets/visual-signature.png", 0, new Rectangle(350, 750, 200, 100));
// Sign the PDF document with the configured signature object.
pdf.Sign(signature);
// Save the final, signed PDF document.
pdf.SaveAs("DetailedSignature.pdf");
using IronPdf;
using IronPdf.Signing;
using IronSoftware.Drawing;
using System;
// Load an existing PDF document to be signed.
var pdf = PdfDocument.FromFile("invoice.pdf");
// Create a PdfSignature object directly from the certificate file and password.
var signature = new PdfSignature("IronSoftware.pfx", "123456");
// Add detailed metadata to the signature for a comprehensive audit trail.
// These properties enhance the signature's credibility and provide context
signature.SignatureDate = DateTime.Now;
signature.SigningContact = "legal@ironsoftware.com";
signature.SigningLocation = "Chicago, USA";
signature.SigningReason = "Contractual Agreement";
// Add a secure timestamp from a trusted Time Stamp Authority (TSA).
// This provides cryptographic proof of the signing time.
signature.TimeStampUrl = new Uri("[http://timestamp.digicert.com](http://timestamp.digicert.com)");
signature.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256;
// Apply a visual appearance to the signature. (More on this in the next section)
signature.SignatureImage = new PdfSignatureImage("assets/visual-signature.png", 0, new Rectangle(350, 750, 200, 100));
// Sign the PDF document with the configured signature object.
pdf.Sign(signature);
// Save the final, signed PDF document.
pdf.SaveAs("DetailedSignature.pdf");
Imports IronPdf
Imports IronPdf.Signing
Imports IronSoftware.Drawing
Imports System
' Load an existing PDF document to be signed.
Dim pdf = PdfDocument.FromFile("invoice.pdf")
' Create a PdfSignature object directly from the certificate file and password.
Dim signature = New PdfSignature("IronSoftware.pfx", "123456")
' Add detailed metadata to the signature for a comprehensive audit trail.
' These properties enhance the signature's credibility and provide context
signature.SignatureDate = DateTime.Now
signature.SigningContact = "legal@ironsoftware.com"
signature.SigningLocation = "Chicago, USA"
signature.SigningReason = "Contractual Agreement"
' Add a secure timestamp from a trusted Time Stamp Authority (TSA).
' This provides cryptographic proof of the signing time.
signature.TimeStampUrl = New Uri("http://timestamp.digicert.com")
signature.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256
' Apply a visual appearance to the signature. (More on this in the next section)
signature.SignatureImage = New PdfSignatureImage("assets/visual-signature.png", 0, New Rectangle(350, 750, 200, 100))
' Sign the PDF document with the configured signature object.
pdf.Sign(signature)
' Save the final, signed PDF document.
pdf.SaveAs("DetailedSignature.pdf")
Możesz zauważyć ikonę ostrzeżenia w niektórych przeglądarkach PDF, jeśli certyfikat podpisu nie jest w zaufanym magazynie systemowym. Aby uzyskać zielony znacznik, certyfikat musi zostać dodany do zaufanych tożsamości przeglądarki.
Jak mogę dodać wizualną reprezentację do podpisu cyfrowego?
Podczas gdy podpis cyfrowy jest kryptograficznie osadzony w PDF, często przydatne jest posiadanie wizualnej reprezentacji na stronie. Może to być logo firmy, obraz podpisu odręcznego lub inne grafiki. IronPDF ułatwia dodanie obrazu do obiektu PdfSignature.
Możesz załadować obraz z pliku lub strumienia i precyzyjnie umieścić go na dowolnej stronie PDF. Obsługiwane formaty obrazów to PNG, JPEG, GIF, BMP, TIFF i WebP. Ta technika jest podobna do sposobu, w jaki możesz stemplować tekst i obrazy na dokumentach PDF.
using IronPdf.Signing;
using IronSoftware.Drawing;
// This example demonstrates various ways to add a visual image to a PDF signature.
// Create a PdfSignature object.
var signature = new PdfSignature("IronSoftware.pfx", "123456");
// Define the position and size for the signature image on the first page (index 0).
// Rectangle parameters: x position, y position, width, height
var signatureRectangle = new Rectangle(350, 750, 200, 100);
// Option 1: Set the SignatureImage property directly.
// This is the most straightforward approach
signature.SignatureImage = new PdfSignatureImage("assets/visual-signature.png", 0, signatureRectangle);
// Option 2: Use the LoadSignatureImageFromFile method.
// This method provides the same functionality with a different syntax
signature.LoadSignatureImageFromFile("assets/visual-signature.png", 0, signatureRectangle);
// Option 3: Load an image from a stream. This is useful for images generated in memory.
// Perfect for scenarios where images are retrieved from databases or web services
AnyBitmap image = AnyBitmap.FromFile("assets/visual-signature.png");
using (var imageStream = image.ToStream())
{
signature.LoadSignatureImageFromStream(imageStream, 0, signatureRectangle);
}
// After configuring the signature image, apply it to a PDF.
var pdf = PdfDocument.FromFile("invoice.pdf");
pdf.Sign(signature);
pdf.SaveAs("VisualSignature.pdf");
using IronPdf.Signing;
using IronSoftware.Drawing;
// This example demonstrates various ways to add a visual image to a PDF signature.
// Create a PdfSignature object.
var signature = new PdfSignature("IronSoftware.pfx", "123456");
// Define the position and size for the signature image on the first page (index 0).
// Rectangle parameters: x position, y position, width, height
var signatureRectangle = new Rectangle(350, 750, 200, 100);
// Option 1: Set the SignatureImage property directly.
// This is the most straightforward approach
signature.SignatureImage = new PdfSignatureImage("assets/visual-signature.png", 0, signatureRectangle);
// Option 2: Use the LoadSignatureImageFromFile method.
// This method provides the same functionality with a different syntax
signature.LoadSignatureImageFromFile("assets/visual-signature.png", 0, signatureRectangle);
// Option 3: Load an image from a stream. This is useful for images generated in memory.
// Perfect for scenarios where images are retrieved from databases or web services
AnyBitmap image = AnyBitmap.FromFile("assets/visual-signature.png");
using (var imageStream = image.ToStream())
{
signature.LoadSignatureImageFromStream(imageStream, 0, signatureRectangle);
}
// After configuring the signature image, apply it to a PDF.
var pdf = PdfDocument.FromFile("invoice.pdf");
pdf.Sign(signature);
pdf.SaveAs("VisualSignature.pdf");
Imports IronPdf.Signing
Imports IronSoftware.Drawing
' This example demonstrates various ways to add a visual image to a PDF signature.
' Create a PdfSignature object.
Dim signature As New PdfSignature("IronSoftware.pfx", "123456")
' Define the position and size for the signature image on the first page (index 0).
' Rectangle parameters: x position, y position, width, height
Dim signatureRectangle As New Rectangle(350, 750, 200, 100)
' Option 1: Set the SignatureImage property directly.
' This is the most straightforward approach
signature.SignatureImage = New PdfSignatureImage("assets/visual-signature.png", 0, signatureRectangle)
' Option 2: Use the LoadSignatureImageFromFile method.
' This method provides the same functionality with a different syntax
signature.LoadSignatureImageFromFile("assets/visual-signature.png", 0, signatureRectangle)
' Option 3: Load an image from a stream. This is useful for images generated in memory.
' Perfect for scenarios where images are retrieved from databases or web services
Dim image As AnyBitmap = AnyBitmap.FromFile("assets/visual-signature.png")
Using imageStream = image.ToStream()
signature.LoadSignatureImageFromStream(imageStream, 0, signatureRectangle)
End Using
' After configuring the signature image, apply it to a PDF.
Dim pdf As PdfDocument = PdfDocument.FromFile("invoice.pdf")
pdf.Sign(signature)
pdf.SaveAs("VisualSignature.pdf")
Ten kod pokazuje trzy równoważne sposoby dodania komponentu wizualnego do podpisu cyfrowego. Niezależnie czy masz obraz na dysku czy w pamięci, możesz łatwo stemplować go na PDF jako część procesu podpisywania. To wypełnia lukę między niewidocznym zabezpieczeniem kryptograficznym a widoczną aprobatą dokumentu.
Jak mogę kontrolować uprawnienia dokumentu po jego podpisaniu?
Podczas podpisywania dokumentu możesz określić, jakie zmiany, jeśli w ogóle, są dozwolone po tym fakcie. Na przykład, możesz chcieć całkowicie zablokować dokument lub tylko pozwolić użytkownikom na wypełnianie pól formularzy. IronPDF pozwala ustawić te uprawnienia za pomocą SignaturePermissions enumeracji. Dla zaawansowanej kontroli uprawnień, zobacz nasz przewodnik po ustawianiu haseł i uprawnień PDF.
Ustawienie uprawnień podpisu jest kluczową częścią zarządzania cyklem życia dokumentu. Zapewnia, że integralność dokumentu jest utrzymana zgodnie z przyjętymi zasadami po zastosowaniu podpisu. Jeśli użytkownik wykona niedozwolone działanie, podpis stanie się nieważny.
| `SignaturePermissions` Członek | Definicja |
|---|---|
| `NoChangesAllowed` | Żadne zmiany nie są dozwolone. Dokument jest skutecznie zablokowany. |
| `FormFillingAllowed` | Dozwolone jest jedynie wypełnianie istniejących pól formularzy i podpisywanie. |
| `AnnotationsAndFormFillingAllowed` | Pozwala na wypełnianie formularzy, podpisywanie i tworzenie lub modyfikowanie adnotacji. |
Zapisywanie i podpisywanie konkretnej rewizji PDF
PDF-y mogą przechowywać historię zmian, podobnie jak system kontroli wersji. To nazywa się zapisywaniem inkrementalnym. Podczas podpisywania PDF, podpis dotyczy konkretnej rewizji dokumentu. Jest to kluczowe dla procesów, w których dokument przechodzi przez wiele etapów aprobaty. Dowiedz się więcej o zarządzaniu historią rewizji PDF w naszym szczegółowym przewodniku.
W poniższym przykładzie ładujemy dokument PDF, dokonujemy edycji, a następnie podpisujemy bieżącą rewizję, jednocześnie pozwalając tylko na wypełnianie formularzy jako przyszłą zmianę. Używamy SaveAsRevision, aby zatwierdzić bieżący stan do historii dokumentu przed jego zapisaniem.
using IronPdf.Signing;
// Load a PDF file with change tracking enabled.
// This enables incremental save functionality for revision management
var pdf = PdfDocument.FromFile("annual_census.pdf", ChangeTrackingModes.EnableChangeTracking);
// Placeholder for edits: You might add text, fill forms, or add annotations here.
// For example: pdf.Annotations.Add(new TextAnnotation(...));
// Or: pdf.Form["fieldName"].Value = "New Value";
// Sign the current state of the document using SignWithFile for convenience.
// We set permissions to allow further signatures and form filling.
pdf.SignWithFile(
"assets/IronSignature.p12",
"password",
SignaturePermissions.AdditionalSignaturesAndFormFillingAllowed);
// Save the current state as a distinct revision within the PDF's history.
// This creates a snapshot that can be referenced later
PdfDocument pdfWithRevision = pdf.SaveAsRevision();
// Save the final PDF with its full revision history to a new file.
pdfWithRevision.SaveAs("annual_census_signed.pdf");
using IronPdf.Signing;
// Load a PDF file with change tracking enabled.
// This enables incremental save functionality for revision management
var pdf = PdfDocument.FromFile("annual_census.pdf", ChangeTrackingModes.EnableChangeTracking);
// Placeholder for edits: You might add text, fill forms, or add annotations here.
// For example: pdf.Annotations.Add(new TextAnnotation(...));
// Or: pdf.Form["fieldName"].Value = "New Value";
// Sign the current state of the document using SignWithFile for convenience.
// We set permissions to allow further signatures and form filling.
pdf.SignWithFile(
"assets/IronSignature.p12",
"password",
SignaturePermissions.AdditionalSignaturesAndFormFillingAllowed);
// Save the current state as a distinct revision within the PDF's history.
// This creates a snapshot that can be referenced later
PdfDocument pdfWithRevision = pdf.SaveAsRevision();
// Save the final PDF with its full revision history to a new file.
pdfWithRevision.SaveAs("annual_census_signed.pdf");
Imports IronPdf.Signing
' Load a PDF file with change tracking enabled.
' This enables incremental save functionality for revision management
Dim pdf = PdfDocument.FromFile("annual_census.pdf", ChangeTrackingModes.EnableChangeTracking)
' Placeholder for edits: You might add text, fill forms, or add annotations here.
' For example: pdf.Annotations.Add(New TextAnnotation(...))
' Or: pdf.Form("fieldName").Value = "New Value"
' Sign the current state of the document using SignWithFile for convenience.
' We set permissions to allow further signatures and form filling.
pdf.SignWithFile(
"assets/IronSignature.p12",
"password",
SignaturePermissions.AdditionalSignaturesAndFormFillingAllowed)
' Save the current state as a distinct revision within the PDF's history.
' This creates a snapshot that can be referenced later
Dim pdfWithRevision As PdfDocument = pdf.SaveAsRevision()
' Save the final PDF with its full revision history to a new file.
pdfWithRevision.SaveAs("annual_census_signed.pdf")
Zrozumienie zapisów inkrementalnych jest kluczowe dla zaawansowanych procesów z PDF. Podczas gdy prosty edytor może pokazywać tylko najnowszą wersję, narzędzie takie jak Adobe Acrobat może ujawnić całą historię rewizji, pokazując, kto podpisał którą wersję i jakie zmiany zostały dokonane między podpisami. IronPDF daje pełną programową kontrolę nad tym procesem.
Dla firm zarządzających złożonymi procesami dokumentów wymagającymi wysokiego poziomu bezpieczeństwa i zgodności może być potrzebne kompleksowe rozwiązanie. Iron Software oferuje Iron Suite, która zawiera IronPDF do podpisywania i manipulacji, plus inne biblioteki do szerokiego zakresu zadań przetwarzania dokumentów, dostępne za jednorazową opłatę.
Jak mogę zarządzać i weryfikować podpisy na wielu rewizjach?
Dokument PDF może mieć wiele podpisów zastosowanych na różnych jego rewizjach. IronPDF zapewnia narzędzia do skutecznego zarządzania tą historią.
- Przywróć do poprzedniej rewizji: Dokument można przywrócić do wcześniejszego stanu używając metody
GetRevision. Odrzuci to wszystkie zmiany i podpisy dokonane po tej rewizji. - Zweryfikuj wszystkie podpisy: Metoda
VerifySignaturessprawdza ważność wszystkich podpisów w wszystkich rewizjach dokumentu. Zwracatruetylko wtedy, gdy każdy podpis jest ważny i nie dokonano nieautoryzowanych zmian. - Usuń podpisy: Metoda
RemoveSignaturesusunie wszystkie podpisy cyfrowe ze wszystkich rewizji dokumentu, tworząc czystą, niepodpisaną wersję.
// Load a PDF with a complex signature history.
var pdf = PdfDocument.FromFile("multi_signed_report.pdf");
// Verify all signatures across all revisions.
// This ensures document integrity throughout its entire history
bool allSignaturesValid = pdf.VerifySignatures();
Console.WriteLine($"All signatures are valid: {allSignaturesValid}");
// Roll back to the first revision (index 0).
// Useful for reviewing the original document state
if (pdf.RevisionCount > 1)
{
PdfDocument firstRevision = pdf.GetRevision(0);
firstRevision.SaveAs("report_first_revision.pdf");
}
// Create a completely unsigned version of the document.
// This removes all digital signatures while preserving content
pdf.RemoveSignatures();
pdf.SaveAs("report_unsigned.pdf");
// Load a PDF with a complex signature history.
var pdf = PdfDocument.FromFile("multi_signed_report.pdf");
// Verify all signatures across all revisions.
// This ensures document integrity throughout its entire history
bool allSignaturesValid = pdf.VerifySignatures();
Console.WriteLine($"All signatures are valid: {allSignaturesValid}");
// Roll back to the first revision (index 0).
// Useful for reviewing the original document state
if (pdf.RevisionCount > 1)
{
PdfDocument firstRevision = pdf.GetRevision(0);
firstRevision.SaveAs("report_first_revision.pdf");
}
// Create a completely unsigned version of the document.
// This removes all digital signatures while preserving content
pdf.RemoveSignatures();
pdf.SaveAs("report_unsigned.pdf");
Imports System
' Load a PDF with a complex signature history.
Dim pdf = PdfDocument.FromFile("multi_signed_report.pdf")
' Verify all signatures across all revisions.
' This ensures document integrity throughout its entire history
Dim allSignaturesValid As Boolean = pdf.VerifySignatures()
Console.WriteLine($"All signatures are valid: {allSignaturesValid}")
' Roll back to the first revision (index 0).
' Useful for reviewing the original document state
If pdf.RevisionCount > 1 Then
Dim firstRevision As PdfDocument = pdf.GetRevision(0)
firstRevision.SaveAs("report_first_revision.pdf")
End If
' Create a completely unsigned version of the document.
' This removes all digital signatures while preserving content
pdf.RemoveSignatures()
pdf.SaveAs("report_unsigned.pdf")
Jak mogę stemplować odręczny podpis na PDF?
Czasami zamiast kryptograficznego zabezpieczenia podpisu cyfrowego potrzeba jedynie zastosowania wizualnego, elektronicznego podpisu, jak zeskanowany odręczny podpis. To jest często określane jako stemplowanie. IronPDF może to zrobić, używając swoich funkcji Watermark lub Stamp. Dla zaawansowanych opcji znakowania wodnego, zapoznaj się z naszym przewodnikiem po spersonalizowanych znakach wodnych.
Zacznijmy od przykładowego faktury PDF i obrazu podpisu odręcznego .png.
Oryginalna faktura PDF przed stemplowaniem podpisu.
Oto obraz podpisu, który zastosujemy:
Przykład obrazu podpisu odręcznego.
Poniższy kod używa właściwości Watermark do stemplowania tego obrazu w dolnym prawym rogu PDF.
using IronPdf.Editing;
// Load the existing PDF document.
var pdf = PdfDocument.FromFile("invoice.pdf");
// Create an HtmlStamp containing our signature image.
// HtmlStamp allows us to position HTML content precisely on the page
var signatureStamp = new HtmlStamp("<img src='assets/signature.png'/>")
{
// Configure the stamp's position and appearance.
VerticalAlignment = VerticalAlignment.Bottom,
HorizontalAlignment = HorizontalAlignment.Right,
Margin = 10, // Add some space from the edge.
Opacity = 90 // Make it slightly transparent for a more authentic look.
};
// Apply the stamp to all pages of the PDF.
// You can also specify specific page numbers if needed
pdf.ApplyStamp(signatureStamp);
// Save the modified PDF document.
pdf.SaveAs("official_invoice.pdf");
using IronPdf.Editing;
// Load the existing PDF document.
var pdf = PdfDocument.FromFile("invoice.pdf");
// Create an HtmlStamp containing our signature image.
// HtmlStamp allows us to position HTML content precisely on the page
var signatureStamp = new HtmlStamp("<img src='assets/signature.png'/>")
{
// Configure the stamp's position and appearance.
VerticalAlignment = VerticalAlignment.Bottom,
HorizontalAlignment = HorizontalAlignment.Right,
Margin = 10, // Add some space from the edge.
Opacity = 90 // Make it slightly transparent for a more authentic look.
};
// Apply the stamp to all pages of the PDF.
// You can also specify specific page numbers if needed
pdf.ApplyStamp(signatureStamp);
// Save the modified PDF document.
pdf.SaveAs("official_invoice.pdf");
Imports IronPdf.Editing
' Load the existing PDF document.
Dim pdf = PdfDocument.FromFile("invoice.pdf")
' Create an HtmlStamp containing our signature image.
' HtmlStamp allows us to position HTML content precisely on the page
Dim signatureStamp = New HtmlStamp("<img src='assets/signature.png'/>") With {
' Configure the stamp's position and appearance.
.VerticalAlignment = VerticalAlignment.Bottom,
.HorizontalAlignment = HorizontalAlignment.Right,
.Margin = 10, ' Add some space from the edge.
.Opacity = 90 ' Make it slightly transparent for a more authentic look.
}
' Apply the stamp to all pages of the PDF.
' You can also specify specific page numbers if needed
pdf.ApplyStamp(signatureStamp)
' Save the modified PDF document.
pdf.SaveAs("official_invoice.pdf")
Jaki jest efekt końcowy stemplowanego PDF?
Po uruchomieniu kodu, obraz podpisu jest stemplowany na dokumencie, tworząc wizualnie podpisaną fakturę.
Końcowy PDF z obrazem podpisu odręcznego wstemplowanym w dolnym prawym rogu.
Jak mogę dodać interaktywne pole podpisu do PDF?
Dla dokumentów, które muszą być podpisane przez użytkownika końcowego w przeglądarce PDF, takiej jak Adobe Acrobat, możesz dodać interaktywne pole formularza podpisu. Tworzy to puste, klikalne pole, które zachęca użytkownika do zastosowania własnego podpisu cyfrowego. Dla pełnego przewodnika po formularzach PDF, zobacz nasz samouczek tworzenia formularzy PDF.
Można stworzyć SignatureFormField i dodać go do kolekcji formularzy PDF. Pozwala to na precyzyjną kontrolę nad jego lokalizacją i rozmiarem na stronie. Jest to szczególnie przydatne dla dokumentów, które wymagają kilku podpisów lub gdy konieczne jest zebranie podpisów od zewnętrznych stron.
using IronPdf.Forms;
using IronSoftware.Drawing;
// Create a new PDF to add the signature field to.
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Please Sign Below</h1>");
// Define the properties for the signature form field.
string fieldName = "ClientSignature"; // Unique identifier for the field
int pageIndex = 0; // Add to the first page (zero-indexed)
var fieldRect = new Rectangle(50, 200, 300, 100); // Position: (x, y), Size: (width, height)
// Create the SignatureFormField object.
// This creates an interactive field that users can click to sign
var signatureField = new SignatureFormField(fieldName, pageIndex, fieldRect);
// Add the signature field to the PDF's form.
pdf.Form.Add(signatureField);
// Save the PDF with the new interactive signature field.
pdf.SaveAs("interactive_signature.pdf");
using IronPdf.Forms;
using IronSoftware.Drawing;
// Create a new PDF to add the signature field to.
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Please Sign Below</h1>");
// Define the properties for the signature form field.
string fieldName = "ClientSignature"; // Unique identifier for the field
int pageIndex = 0; // Add to the first page (zero-indexed)
var fieldRect = new Rectangle(50, 200, 300, 100); // Position: (x, y), Size: (width, height)
// Create the SignatureFormField object.
// This creates an interactive field that users can click to sign
var signatureField = new SignatureFormField(fieldName, pageIndex, fieldRect);
// Add the signature field to the PDF's form.
pdf.Form.Add(signatureField);
// Save the PDF with the new interactive signature field.
pdf.SaveAs("interactive_signature.pdf");
Imports IronPdf.Forms
Imports IronSoftware.Drawing
' Create a new PDF to add the signature field to.
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Please Sign Below</h1>")
' Define the properties for the signature form field.
Dim fieldName As String = "ClientSignature" ' Unique identifier for the field
Dim pageIndex As Integer = 0 ' Add to the first page (zero-indexed)
Dim fieldRect As New Rectangle(50, 200, 300, 100) ' Position: (x, y), Size: (width, height)
' Create the SignatureFormField object.
' This creates an interactive field that users can click to sign
Dim signatureField As New SignatureFormField(fieldName, pageIndex, fieldRect)
' Add the signature field to the PDF's form.
pdf.Form.Add(signatureField)
' Save the PDF with the new interactive signature field.
pdf.SaveAs("interactive_signature.pdf")
Kiedy użytkownik otworzy ten PDF, zobaczy klikalne pole, pozwalające na dokończenie procesu podpisu z użyciem własnego cyfrowego identyfikatora. Możesz dowiedzieć się więcej o tworzeniu i zarządzaniu interaktywnymi formularzami w naszym przewodniku po tworzeniu formularzy PDF.
Niepodpisane, interaktywne pole podpisu dodane programowo do dokumentu PDF.
Jak mogę odzyskać nazwę podpisującego z podpisów zweryfikowanych?
Aby uzyskać popularną nazwę właściciela certyfikatu, który podpisał podpis, można użyć klasy VerifiedSignature, aby uzyskać dostęp do właściwości SignerName. Poniżej znajduje się fragment kodu pokazujący, jak to zrobić.
:path=/static-assets/pdf/content-code-examples/how-to/signing-find-signer-name.cs
using IronPdf;
using System;
// Import the Signed PDF report
var pdf = PdfDocument.FromFile("multi_signed_report.pdf");
// Using GetVerifiedSignatures() obtain a list of `VerifiedSignature` objects from the PDF
pdf.GetVerifiedSignatures().ForEach(signature =>
{
// Print out the SignerName of each `VerifiedSignature` object
Console.WriteLine($"SignatureName: {signature.SignerName}");
});
Imports IronPdf
Imports System
' Import the Signed PDF report
Dim pdf = PdfDocument.FromFile("multi_signed_report.pdf")
' Using GetVerifiedSignatures() obtain a list of `VerifiedSignature` objects from the PDF
pdf.GetVerifiedSignatures().ForEach(Sub(signature)
' Print out the SignerName of each `VerifiedSignature` object
Console.WriteLine($"SignatureName: {signature.SignerName}")
End Sub)
Po zaimportowaniu podpisanego pliku PDF, wykorzystujemy metodę GetVerifiedSignatures, aby odzyskać listę VerifiedSignature obiektów w ramach raportu i wydrukować SignerName dla każdego podpisu.
Należy pamiętać, że ta wartość jest wyodrębniona z Rozróżnionego Nazwiska Podmiotu (SubjectDN) certyfikatu i zwróci null, jeśli pole CN nie jest obecne.
Jakie są kolejne kroki dla podpisywania PDF za pomocą IronPDF?
Ten przewodnik pokazał potężne i elastyczne możliwości podpisywania PDF za pomocą IronPDF. Niezależnie od tego, czy konieczne jest zastosowanie bezpiecznych podpisów cyfrowych z dokładnymi metadanymi, zarządzanie rewizjami dokumentu, stemplowanie wizualnych podpisów czy tworzenie interaktywnych formularzy, IronPDF zapewnia kompleksowy i przyjazny dla dewelopera interfejs API do wykonania zadania.
Aby kontynuować eksplorację, można pobrać bibliotekę IronPDF for .NET i uzyskać bezpłatną licencję próbną, aby przetestować wszystkie jej funkcje. Dla zaawansowanych technik manipulacji dokumentem, w tym dodawania adnotacji i pracy z polami formularza, warto zapoznać się z rozległą dokumentacją i samouczkami.
Gotowy, aby sprawdzić, co jeszcze można zrobić? Zapoznaj się ze stroną z samouczkami tutaj: Podpisywanie i zabezpieczanie plików PDF
Często Zadawane Pytania
How do I digitally sign a PDF using a certificate in C#?
With IronPDF, you can digitally sign a PDF in just one line of code using the PdfSignature class. Simply create a new PdfSignature object with your certificate file (.pfx or .p12) and password, then call SignPdfFile() method. For example: new IronPdf.Signing.PdfSignature("certificate.pfx", "password").SignPdfFile("input.pdf"). This applies a tamper-proof digital signature using your X509Certificate2 to ensure document authenticity.
What types of PDF signatures are supported?
IronPDF supports three main types of PDF signatures: 1) Digital signatures using X509Certificate2 certificates for authentication and tamper-proofing, 2) Visual signature stamps that add graphical or handwritten signature images to documents, and 3) Interactive signature form fields that allow users to electronically sign PDFs. Each type serves different purposes for document security and workflow requirements.
What certificate formats can be used for digital signing?
IronPDF supports common digital certificate formats including .pfx (Personal Information Exchange) and .p12 files. These certificate files contain both the public key and private key needed for digital signing. The PdfSignature class in IronPDF can work with any X509Certificate2 object, providing flexibility in how you load and manage your signing certificates.
Can I add a visual representation to my digital signature?
Yes, IronPDF allows you to add visual elements to your digital signatures. You can include a graphical representation such as a handwritten signature image, company logo, or custom stamp alongside the cryptographic signature. This combines the security of digital certificates with visual confirmation, making signed documents both secure and professionally presentable.
How do I create an interactive signature field for users to sign electronically?
IronPDF enables you to add interactive signature form fields to PDF documents. These fields allow users to sign documents electronically by clicking and drawing their signature or uploading a signature image. This feature is perfect for creating documents that require signature collection, such as contracts or forms that need to be signed by multiple parties.
Does signing a PDF ensure document integrity?
Yes, when you digitally sign a PDF using IronPDF with an X509Certificate2, it creates a tamper-proof seal that ensures document integrity. The digital signature guarantees that the document has not been altered since it was signed. Any modifications to the PDF after signing will invalidate the signature, alerting recipients that the document may have been compromised.

