C# Pobierz liczbę stron PDF
Problem z niechroniona dystrybucja PDF
Poufny raport analityczny wysłany jako zwykły załącznik PDF opuścił w tym momencie budynek. Odbiorca może go przesłać dalej, opublikować publicznie, wyciągnąć treść do prezentacji konkurenta lub po prostu zostawić w skrzynce odbiorczej, która zostanie skompromitowana w wyniku naruszenia danych. Organizacja, która go stworzyła, nie ma możliwości działania, a w regulowanych branżach potencjalnie brak obrony.
Scenariusze, w których ma to znaczenie, są różne, ale podstawowe ryzyko jest spójne. Kancelaria prawna rozsyła projekty dokumentów do przeciwnej strony do wglądu, jeśli te projekty nie są oznaczone jako poufne lub wstępne, mogą być udostępniane bez kontekstu lub odpowiedzialności. Firma badawcza dystrybuuje raporty analityczne do płacących subskrybentów jako niezaszyfrowane PDF-y, jeden subskrybent może redystrybuować cały raport do listy mailingowej w dwóch kliknięciach. Platforma nieruchomości wysyła wyceny nieruchomości do agentów zgłaszających, bez znacznika specyficznego dla odbiorcy nie ma możliwości śledzenia źródła wycieku. Organizacja medyczna przesyłająca dokumenty pacjentów pocztą e-mail bez szyfrowania działa poza wymogami transmisji HIPAA.
Ręczne znakowanie wodne każdego pliku w programie Acrobat przed dostawą nie skaluje się poza kilka dokumentów dziennie. Jest to także niespójne, ktoś zapomina nałożyć znak wodny lub stosuje niewłaściwą etykietę klasyfikacyjną, a niechroniona wersja wychodzi.
Ochrona musi być wbudowana w proces dostarczania, stosowana automatycznie na podstawie klasyfikacji dokumentu i poziomu dostępu odbiorcy, bez możliwości pominięcia ręcznego kroku.
Rozwiązanie: Programowa ochrona przed każdą dostawą
IronPDF umożliwia aplikacjom .NET stosowanie znaków wodnych, haseł i ograniczeń dostępu do PDF-ów jako część procesu generowania lub dostarczania. Po tym, jak ChromePdfRenderer stworzy dokument, aplikacja wstawia znak wodny, ustawia hasła i konfiguruje flagi dostępu, wszystko w kodzie przed zapisaniem, wysłaniem strumieniem lub załączeniem w e-mailu.
Każdy dokument opuszczający system ma stosowaną politykę ochrony odpowiednią dla swojej klasyfikacji. Wewnętrzny projekt otrzymuje wizualną nakładkę "DRAFT". Raport dla klientów ma na każdej stronie wstawione imię odbiorcy. Zarchiwizowany dokument regulacyjny otrzymuje szyfrowanie hasłem właściciela z wyłączoną edycją. Bez programu Acrobat, bez ręcznych kroków, bez zewnętrznej usługi DRM. Ochrona stosowana jest w istniejącej aplikacji .NET jako pojedyncza paczka NuGet.
Jak to działa w praktyce
1. PDF generowany przez normalny proces
Warstwa bezpieczeństwa znajduje się po renderowaniu, a nie w jego środku. ChromePdfRenderer tworzy obiekt PdfDocument z szablonu HTML lub istniejącego pliku dokładnie tak, jak dla niechronionego dokumentu. Po tym, jak obiekt PdfDocument istnieje w pamięci, rozpoczyna się system ochrony.
Specyficzne zabezpieczenia, które są stosowane, zależą od klasyfikacji dokumentu i kontekstu odbiorcy, określonego przez wyzwalacz dostawy, typ dokumentu lub poziom dostępu odbiorcy. Ten sam PDF może opuścić system w trzech różnych stanach: jedynie z znakiem wodnym do przeglądu wewnętrznego, z znakiem wodnym i zabezpieczony hasłem do zewnętrznej dostawy oraz całkowicie zablokowany z ograniczeniami dostępu do archiwizacji regulacyjnej.
2. Znakowanie wodne każdego arkusza
Ukośny tekstowy znak wodny stosuje się przy użyciu HtmlStamper, fragmentu HTML z CSS kontrolującym rozmiar czcionki, kolor, przezroczystość i obrót. Daje to pełną kontrolę projektową nad wyglądem znaku wodnego bez potrzeby korzystania z zasobów graficznych:
using IronPdf;
using IronPdf.Editing;
var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(documentHtml);
// Stamp a recipient-specific diagonal watermark across every page
var stamper = new HtmlStamper
{
Html = $@"<div style='
font-size: 48px;
color: rgba(180, 0, 0, 0.18);
font-family: Arial, sans-serif;
font-weight: bold;
transform: rotate(-40deg);
white-space: nowrap;'>
CONFIDENTIAL — {recipient.FullName}
</div>",
VerticalAlignment = VerticalAlignment.Middle,
HorizontalAlignment = HorizontalAlignment.Center,
};
pdf.ApplyStamp(stamper);
pdf.SaveAs($"secured/{documentId}-{recipient.Id}.pdf");
using IronPdf;
using IronPdf.Editing;
var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(documentHtml);
// Stamp a recipient-specific diagonal watermark across every page
var stamper = new HtmlStamper
{
Html = $@"<div style='
font-size: 48px;
color: rgba(180, 0, 0, 0.18);
font-family: Arial, sans-serif;
font-weight: bold;
transform: rotate(-40deg);
white-space: nowrap;'>
CONFIDENTIAL — {recipient.FullName}
</div>",
VerticalAlignment = VerticalAlignment.Middle,
HorizontalAlignment = HorizontalAlignment.Center,
};
pdf.ApplyStamp(stamper);
pdf.SaveAs($"secured/{documentId}-{recipient.Id}.pdf");
Imports IronPdf
Imports IronPdf.Editing
Dim renderer As New ChromePdfRenderer()
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(documentHtml)
' Stamp a recipient-specific diagonal watermark across every page
Dim stamper As New HtmlStamper With {
.Html = $"<div style='
font-size: 48px;
color: rgba(180, 0, 0, 0.18);
font-family: Arial, sans-serif;
font-weight: bold;
transform: rotate(-40deg);
white-space: nowrap;'>
CONFIDENTIAL — {recipient.FullName}
</div>",
.VerticalAlignment = VerticalAlignment.Middle,
.HorizontalAlignment = HorizontalAlignment.Center
}
pdf.ApplyStamp(stamper)
pdf.SaveAs($"secured/{documentId}-{recipient.Id}.pdf")
Wyjściowy dokument PDF z nałożonym znakiem wodnym
Użycie imienia odbiorcy zamiast ogólnej etykiety sprawia, że każda wyciekająca kopia jest możliwa do śledzenia jako konkretny event dostawy. Wartość przezroczystości — tutaj 0,18 — utrzymuje znak wodny widocznym bez zasłaniania treści dokumentu dla legalnych czytelników.
3. Hasła i flagi dostępu stosowane do ustawień bezpieczeństwa
using IronPdf;
// Owner password controls who can change security settings
// User password controls who can open the document
pdf.SecuritySettings.OwnerPassword = "internal-owner-secret";
pdf.SecuritySettings.UserPassword = recipientAccessCode;
// Restrict what the recipient can do after opening
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.NoEdit;
pdf.SaveAs($"secured/{documentId}-{recipient.Id}-protected.pdf");
using IronPdf;
// Owner password controls who can change security settings
// User password controls who can open the document
pdf.SecuritySettings.OwnerPassword = "internal-owner-secret";
pdf.SecuritySettings.UserPassword = recipientAccessCode;
// Restrict what the recipient can do after opening
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.NoEdit;
pdf.SaveAs($"secured/{documentId}-{recipient.Id}-protected.pdf");
Imports IronPdf
' Owner password controls who can change security settings
' User password controls who can open the document
pdf.SecuritySettings.OwnerPassword = "internal-owner-secret"
pdf.SecuritySettings.UserPassword = recipientAccessCode
' Restrict what the recipient can do after opening
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.NoEdit
pdf.SaveAs($"secured/{documentId}-{recipient.Id}-protected.pdf")
Wyjściowy PDF z niestandardowymi ustawieniami szyfrowania
Hasło właściciela jest przechowywane wewnętrznie i nigdy nie jest dystrybuowane, jest używane tylko wtedy, gdy organizacja potrzebuje zmienić ustawienia bezpieczeństwa dokumentu. Hasło użytkownika to hasło komunikowane odbiorcy za pośrednictwem oddzielnego kanału. Ustawienie AllowUserCopyPasteContent = false uniemożliwia odbiorcy zaznaczanie i wyodrębnianie tekstu nawet po otwarciu dokumentu, co jest istotne dla badania możliwości firmy lub projektów prawnych, gdzie obawa dotyczy ekstrakcji treści, a nie dostępu.
Korzyści w praktyce
Detekcja wycieku. Wstawienie imienia lub adresu e-mail odbiorcy na każdej stronie sprawia, że nieautoryzowane udostępnienie staje się możliwe do śledzenia. Większość nieautoryzowanego udostępniania dzieje się, ponieważ wydaje się to bez konsekwencji — widoczny specyficzny dla odbiorcy znak wodny zmienia tę kalkulację bez potrzeby stosowania infrastruktury DRM.
Kontrola dostępu. Hasło użytkownika zapewnia, że tylko zamierzony odbiorca może otworzyć dokument. Nawet jeśli e-mail zostanie przechwycony lub plik zostanie znaleziony w przesłanej dalej wątku, jest nieczytelny bez hasła, które wówczas otrzymał oryginalny odbiorca.
Ograniczenia użycia. Flagi dostępu ograniczają to, co odbiorca może zrobić po otwarciu. Subskrybent, który zapłacił za raport badawczy, może go czytać, ale nie może skopiować tekstu do analizy konkurenta, wydrukować nieograniczonych kopii ani zrobić adnotacji, które można eksportować. Treść jest dostępna; ekstrakcja i ponowne wykorzystanie nie są.
Elastyczność klasyfikacji. Ten sam dokument uzyskuje różne profile ochrony w zależności od kontekstu: znak wodny "DRAFT" bez hasła do wewnętrznych cykli przeglądowych, znak wodny specyficzny dla odbiorcy z hasłem użytkownika do dostawy do klientów i pełne szyfrowanie z wyłączoną edycją do archiwizacji regulacyjnej. Jedna linia produkcyjna, wiele polityk wyjściowych.
Zgodność. Szyfrowane AES-256 PDF-y z kontrolą dostępu spełniają wymagania bezpieczeństwa transmisji zgodnie z politykami obsługi dokumentów HIPAA, SOC 2 i standardami elektronicznej komunikacji FINRA. Szyfrowanie jest stosowane procesowo, nie przez oddzielne narzędzie zgodności.
Brak kosztów za dokument. Znakowanie wodne i szyfrowanie są wykonywane w procesie wewnątrz aplikacji .NET. Nie ma zewnętrznego DRM ani API znakowania wodnego, brak opłaty za dokument i brak modelu cenowego, który sprawia, że wysoka wolumenowa dystrybucja jest kosztowna.
Zakończenie
PDF, który opuszcza system bez ochrony, jest dokumentem, nad którym organizacja utraciła kontrolę. To akceptowalny kompromis dla treści publicznej. Dla poufnych raportów, projektów umów, regulowanych dokumentów pacjentów i płatnych badań nie jest.
Budowanie ochrony w proces generacyjny: stosowana automatycznie na podstawie klasyfikacji, przed każdym zdarzeniem dostawy, usuwa ręczny krok, który jest pomijany i subiektywne podejmowanie decyzji, które prowadzi do błędów. IronPDF obsługuje cały cykl życia generowania PDF w C# na ironpdf.com, od renderowania szablonów HTML po znakowanie wodne, szyfrowanie i kontrolowanie uprawnień na wyjściu. Jeśli jesteś gotowy dodać politykę bezpieczeństwa do swojego systemu dostarczania dokumentów, rozpocznij bezpłatny 30-dniowy okres próbny i zweryfikuj znaki wodne oraz kontrolę dostępu w odniesieniu do swoich własnych klasyfikacji treści, zanim kolejny poufny dokument opuści firmę.




