IRONSOFTWAREHOME

PDF Redaction in C#: Remove Sensitive Data and Sanitize Documents with IronPDF

Curtis Chau
Curtis Chau
Updated: 4 Haziran 2026

IronPDF ile PDF karartma işlemi, bir belgenin iç yapısındaki hassas içeriği kalıcı olarak kaldırır, sadece görsel olarak örtmekle kalmaz, böylece kopyalama, arama veya adli analiz yoluyla orijinal verilerin geri alınması imkansız hale gelir. Bu, sadece metin üzerindeki siyah dikdörtgenleri çok daha öteye taşır: IronPDF, düzenli ifade deseni eşleştirme ile metin karartma, imzalar ve resimler için bölge tabanlı karartma, metadata sıyırma, gömülü betikleri yok etmek için belge temizleme ve güvenli boşluk tarama sağlayarak .NET geliştiricileri için HIPAA, GDPR ve PCI DSS uyumlu belge koruma iş akışları için kapsamlı bir araç seti sunar.

Kısa-Özet: Hızlı Başlangıç Kılavuzu

Bu kılavuz, C# .NET'de PDF belgelerinden kalıcı olarak hassas içeriği kaldırmayı kapsar, metin desenleri, resim bölgeleri, metadata ve gömülü betikler.

  • Kimler için: Sağlık, hukuk, mali veya hükümet bağlamlarında hassas belgeleri ele alan .NET geliştiricileri.
  • Neler Oluşturacaksınız: Metin karartma için regex desen eşleştirme (SSN'ler, kredi kartları, e-postalar), imzalar ve fotoğraflar için koordinat tabanlı bölge karartma, metadata temizliği, gömülü betikleri sıyırmak için PDF temizlemesi ve YARA tabanlı güvenlik açığı tarama.
  • Nerede çalışır: .NET 10, .NET 8 LTS, .NET Framework 4.6.2+ ve .NET Standard 2.0. Tüm işlemler yerel olarak, dış bağımlılık olmadan çalışır.
  • Bu yaklaşımı ne zaman kullanmalısınız: Yasal keşif, FOIA istekleri veya dış dağıtım için belgeleri paylaşmanız gerektiğinde ve kaldırılan içeriğin gerçekten kaldırıldığını sağlayacak güvenceleri aradığınızda.
  • Teknik olarak neden önemlidir: Görsel üst kaplamalar, PDF'nin içerik akışlarında orijinal metni geri kazanılabilir bırakır. IronPDF'in karartması, belge yapısının kendisinden karakter verilerini siler, geri almayı imkansız hale getirir.

Sadece birkaç satır kodla bir PDF'den hassas metinleri çıkarın:

  1. 1Install IronPDF with NuGet Package Manager

    PM > Install-Package IronPdf

  2. 2Bu kod parçacığını kopyalayın ve çalıştırın.

    using IronPdf;
    
    PdfDocument pdf = PdfDocument.FromFile("confidential-report.pdf");
    pdf.RedactTextOnAllPages("CONFIDENTIAL");
    pdf.SaveAs("redacted-report.pdf");
    C#
  3. 3Canlı ortamınızda test için dağıtım yapın

    Ücretsiz deneme ile bugün projenizde IronPDF kullanmaya başlayın
    arrow pointer

IronPDF'yi satın aldıktan veya 30 günlük denemeye kaydolduktan sonra, başvurunuzda lisans anahtarınızı ekleyin.

IronPdf.License.LicenseKey = "KEY";

Start using IronPDF in your project today with a free trial.

İlk Adım:
arrow pointer
NuGetNuGet ile yükleyin

PM > Install-Package IronPdf

Install IronPDF by running the command above in the NuGet Package Manager Console, or search for the package in the NuGet Package Manager.

İçindekiler

Gerçek Redaksiyon ile Görsel Örtü Arasındaki Fark Nedir?

Gerçek redaksiyon ile görsel örtü arasındaki farkı anlamak, hassas belgelerle uğraşan herkes için kritiktir. Birçok araç ve manuel yöntem, veri altındaki bilgileri gerçekten kaldırmadan redaksiyon görünümü oluşturur. Bu sahte güvenlik duygusu, çok sayıda yüksek profilli veri ihlaline ve uyum başarısızlıklarına neden olmuştur.

Görsel örtü yaklaşımları tipik olarak hassas içerik üzerine opak şekiller çizmektedir. Metin, PDF yapısı içinde tamamen bozulmadan kalır. Belgeyi görüntüleyen biri siyah bir dikdörtgen görür, ancak orijinal karakterler dosya içeriği akışlarında hala mevcuttur. Sayfadaki tüm metni seçmek, erişilebilirlik araçlarını kullanmak veya ham PDF verilerini incelemek, sözde gizlenmiş olan her şeyi ortaya çıkarır. Dava dosyaları, karşıt avukatın basitçe redakte etmesiyle zayıflatılmıştır. Hükümet kurumları yanlışlıkla sansürlü görünen ancak tamamen kurtarılabilir olan sınıflandırılmış bilgileri yayımlamıştır.

Gerçek redaksiyon farklı çalışır. IronPDF'nin redaksiyon yöntemlerini kullandığınızda, kütüphane, PDF'nin iç yapısındaki belirli metni bulur ve tamamıyla kaldırır. Karakter verileri içerik akışlarından silinir. Görsel temsili bir redaksiyon işareti ile değiştirilir, genellikle siyah bir dikdörtgen, ancak orijinal içerik dosyanın hiçbir yerinde artık mevcut değildir. Herhangi bir seçme, kopyalama veya adli analiz, kalıcı olarak silinmiş olanı geri getiremez.

IronPDF, PDF'yi yapısal düzeyde değiştirerek gerçek redaksiyon uygular. RedactTextOnAllPages yöntemi ve varyantları, sayfa içeriğinde arama yapar, eşleşen metni tanımlar, belge nesne modelinden kaldırır ve içerik daha önce görünürken isteğe bağlı olarak görsel bir gösterge çizer. Bu yaklaşım, güvenli belge redaksiyonu için NIST gibi kuruluşların kılavuzlarıyla uyumludur.

Pratik sonuçlar çok büyüktür. Belgeleri harici olarak paylaşmanız, yasal keşif için dosya teslim etmeniz, bilgi edinme hakkı istekleri altında kayıtlar yayımlamanız veya kişisel kimlik bilgilerini korurken raporları dağıtmanız gerektiğinde, yalnızca gerçek redaksiyon yeterli koruma sağlar. Görsel örtüler, belirli bölümlerden dikkat çekmek istediğiniz iç taslaklar için yeterli olabilir, ancak gerçek veri koruması için asla güvenilmemelidir. Ek belge güvenlik önlemleri için, PDF'lerin şifrelenmesine ve dijital imzalar konusundaki rehberlerimize bakın.


How do I Redact PDF Text in C# Across an Entire Document?

En yaygın redaksiyon senaryosu, belirli bir metnin bir belge boyunca tüm örneklerinin kaldırılmasını içerir. Belki bir kişinin adını bir rapordan çıkarmanız, mali tablolardan hesap numaralarını kaldırmanız veya harici dağıtım öncesi dahili referans kodlarını ortadan kaldırmanız gerekiyor. IronPDF, RedactTextOnAllPages yöntemi ile bunu kolaylaştırır.

Girdi

Kişisel bilgileri içeren, adları, Sosyal Güvenlik numaralarını ve çalışan kimlik numaralarını içeren bir çalışan kayıt belgesi.

using IronPdf;

// Load the source document
PdfDocument pdf = PdfDocument.FromFile("employee-records.pdf");

// Redact an employee name from the entire document
pdf.RedactTextOnAllPages("John Smith");

// Redact a Social Security Number
pdf.RedactTextOnAllPages("123-45-6789");

// Redact an internal employee ID
pdf.RedactTextOnAllPages("EMP-2024-0042");

// Save the cleaned document
pdf.SaveAs("employee-records-redacted.pdf");

Bu kod, çalışan bilgilerini içeren bir PDF yükler ve RedactTextOnAllPages çağırılarak her bir değer için üç parça gizli veriyi kaldırır. Her çağrı, belgedeki her sayfayı tarar ve çalışanın adı, Sosyal Güvenlik numarası ve dahili tanımlayıcının tüm eşleşen örneklerini kalıcı olarak kaldırır.

Örnek Çıktı

Varsayılan davranış, redakte edilen metnin göründüğü yere siyah dikdörtgenler çizer ve gerçek karakterlerin yerine belge yapısında yıldız işaretleri koyar. Bu hem redaksiyonun gerçekleştiğinin görsel onayını sağlar hem de orijinal içeriğin tamamen kaybolmasını sağlar.

Daha uzun belgelerle veya birden fazla redaksiyon hedefiyle çalışırken, bu çağrıları verimli bir şekilde zincirleyebilirsiniz:

using IronPdf;
using System.Collections.Generic;

// Load the document once
PdfDocument pdf = PdfDocument.FromFile("quarterly-report.pdf");

// Define all terms that need redaction
List<string> sensitiveTerms = new List<string>
{
    "Project Titan",
    "Sarah Johnson",
    "Budget: $4.2M",
    "Q3-INTERNAL-2024",
    "sarah.johnson@company.com"
};

// Redact each term
foreach (string term in sensitiveTerms)
{
    pdf.RedactTextOnAllPages(term);
}

// Save the result
pdf.SaveAs("quarterly-report-public.pdf");

Bu model, kaldırılması gereken bilinen bir hassas değer listesine sahip olduğunuzda iyi çalışır. Belge bir kez yüklenir, tüm redaksiyonlar bellek içinde uygulanır ve nihai sonuç kaydedilir. Her terim bağımsız olarak işlenir, bu nedenle terimler arasındaki kısmi eşleşmeler veya biçimlendirme farklılıkları diğer redaksiyonları etkilemez.

Yalnızca Belirli Sayfalardaki Metni Nasıl Redakte Edebilirim?

Bazen redaksiyonların nerede gerçekleştiği üzerinde daha hassas kontrol gerekir. Bir belge, bilgi taşıyan ve bozulmadan kalması gereken bir kapak sayfasına sahip olabilir veya gizli verilerin yalnızca belirli bölümlerde göründüğünü biliyor olabilirsiniz. IronPDF, tek sayfa sansürü için RedactTextOnPage ve birden fazla belirli sayfayı hedeflemek için RedactTextOnPages sunar.

Girdi

Birden fazla sayfalı bir sözleşme demeti, imza sayfasında müşteri adları ve belgede belirli sayfalarda görünen mali terimler.

using IronPdf;

// Load the document
PdfDocument pdf = PdfDocument.FromFile("contract-bundle.pdf");

// Redact text only on page 1 (index 0)
pdf.RedactTextOnPage(0, "Client Name: Acme Corporation");

// Redact text on pages 3, 5, and 7 (indices 2, 4, 6)
int[] financialPages = { 2, 4, 6 };
pdf.RedactTextOnPages(financialPages, "Payment Terms: Net 30");

// Other pages remain untouched except for the specific redactions applied

pdf.SaveAs("contract-bundle-redacted.pdf");

Bu kod, tek bir sayfa için RedactTextOnPage ve birden fazla belirli sayfalar için RedactTextOnPages kullanarak hedefli sansürü gösterir. Müşteri adı yalnızca sayfa 1'den (indeks 0) kaldırılırken, ödeme koşulları sayfa 3, 5 ve 7'den (indeksler 2, 4, 6) redakte edilir, diğer tüm sayfalar dokunulmadan bırakılır.

Örnek Çıktı

IronPDF'teki sayfa indeksleri sıfır tabanlıdır, yani ilk sayfa indeks 0, ikinci indeks 1 ve bu şekilde devam eder. Bu, standart programlama kurallarıyla da uyuşur ve çoğu geliştiricinin dizi erişimi hakkında düşündüğü şeye uygun hale gelir.

Büyük belgeleri işlerken belirli sayfaları hedeflemek, performansı artırır. Yalnızca birkaç konumda görünen metin için yüzlerce sayfa taramak yerine, redaksiyon motorunu tam olarak nerede arayacağını yönlendirebilirsiniz. Bu, binlerce belgeyle uğraşabileceğiniz toplu işlem senaryolarında önemlidir. Maksimum verim elde etmek için tezgah ve çoklu iş parçacığı tekniklerini kullanmayı düşünün.

using IronPdf;

// Process a large document efficiently
PdfDocument pdf = PdfDocument.FromFile("annual-report-500-pages.pdf");

// We know from document structure that:
// - Executive summary with names is on pages 1-3
// - Financial data is on pages 45-60
// - Appendix with employee info is on pages 480-495

// Redact executive names from summary section
for (int i = 0; i <= 2; i++)
{
    pdf.RedactTextOnPage(i, "CEO: Robert Williams");
    pdf.RedactTextOnPage(i, "CFO: Maria Garcia");
}

// Redact specific financial figures from the financial section
int[] financialSection = { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59 };
pdf.RedactTextOnPages(financialSection, "Net Revenue: $847M");

// Redact employee identifiers from appendix
for (int i = 479; i <= 494; i++)
{
    pdf.RedactTextOnPage(i, "Employee ID:");
}

pdf.SaveAs("annual-report-public-release.pdf");

Bu hedefli yaklaşım, 500 sayfalık bir belgenin yalnızca ilgili bölümlerini işler, her redaksiyon terimi için her sayfayı taramaya kıyasla yürütme süresini önemli ölçüde azaltır.

Redakte Edilen İçeriğin Görünümünü Nasıl Özelleştirebilirim?

IronPDF, redaksiyonların son belgede nasıl görüneceğini kontrol etmek için çeşitli parametreler sunar. Büyük/küçük harf duyarlılığını, tam kelime eşleşmesini, görsel dikdörtgenler çizmeyi ve redakte edilen içeriğin yerine hangi metnin görüneceğini ayarlayabilirsiniz.

Girdi

Sınıflandırma etiketleri, şifreler ve farklı redaksiyon işlemleri gerektiren dahili referans kodları dahil olmak üzere çeşitli hassas terimler içeren bir yasal dosya.

using IronPdf;

// Load the document
PdfDocument pdf = PdfDocument.FromFile("legal-brief.pdf");

// Case-sensitive redaction: only matches exact case
// "CLASSIFIED" will be redacted but "classified" or "Classified" will not
pdf.RedactTextOnAllPages(
    "CLASSIFIED",
    CaseSensitive: true,
    OnlyMatchWholeWords: true,
    DrawRectangles: true,
    ReplacementText: "[REDACTED]"
);

// Case-insensitive redaction: matches regardless of case
// Will redact "Secret", "SECRET", "secret", etc.
pdf.RedactTextOnAllPages(
    "secret",
    CaseSensitive: false,
    OnlyMatchWholeWords: true,
    DrawRectangles: true,
    ReplacementText: "*****"
);

// Whole word disabled: matches partial strings too
// Will redact "password", "passwords", "mypassword123", etc.
pdf.RedactTextOnAllPages(
    "password",
    CaseSensitive: false,
    OnlyMatchWholeWords: false,
    DrawRectangles: true,
    ReplacementText: "XXXXX"
);

// No visual rectangle: text is removed but no black box appears
// Useful when you want seamless removal without obvious redaction marks
pdf.RedactTextOnAllPages(
    "internal-reference-code",
    CaseSensitive: true,
    OnlyMatchWholeWords: true,
    DrawRectangles: false,
    ReplacementText: ""
);

pdf.SaveAs("legal-brief-redacted.pdf");

Bu kod, RedactTextOnAllPages yönteminin isteğe bağlı parametrelerini kullanarak dört farklı sansür yapılandırmasını gösterir. Büyük/küçük harf duyarlı tam eşleşme ile "[REDACTED]" değişimi, yıldız işaretleriyle büyük/küçük harf duyarsız eşleşme, "şifreler" gibi varyasyonları yakalamak için kısmi kelime eşleşmesi ve naif kalan içerik temizlemek için görsel dikdörtgenler olmadan görünmez kaldırımı gösterir.

Örnek Çıktı

Parametreler, gereksinimlerinize bağlı olarak farklı amaçlara hizmet eder:

CaseSensitive, eşleşmenin harf büyüklüğünü dikkate alıp almadığını belirler. Yasal belgeler genellikle anlam taşıyan belirli büyük harf kullanımlarını içerir, bu yüzden büyük/küçük harf duyarlı eşleştirme, yalnızca tam eşleşmeleri kaldırmanızı sağlar. Genel metin işleme sırasında harf değişikliği olabilen durumlar için, tüm örnekleri yakalamak amacıyla büyük/küçük harf duyarlı olmayan eşleştirme gerekebilir.

OnlyMatchWholeWords, aramanın tam kelimeleri mi yoksa kısmi dizeleri mi eşleştirdiğini kontrol eder. İsimleri redakte ederken, genellikle "Smith"in "Blacksmith" veya "Smithfield"'in bir bölümünü kazara redakte etmemesi için tam kelime eşleşmesini istersiniz. Hesap numarası önekleri gibi kalıpları redakte ederken, varyasyonları yakalamak için kısmi eşleşme gerekebilir.

DrawRectangles, içeriğin kaldırıldığı yerlere siyah kutuların görünüp görünmediğini belirtir. Çoğu düzenleyici ve yasal bağlam, içeriğin kasten kaldırıldığına dair kanıt olarak görünen redaksiyon işaretlerini gerektirir. Dahili iş akışları ise daha temiz bir çıktı için görünmez kaldırmayı tercih edebilir.

ReplacementText, sansürlenen içeriğin yerine hangi karakterlerin görüneceğini tanımlar. Yaygın seçimler arasında yıldız işaretleri, "REDACTED" etiketleri veya boş dizgiler bulunur. Birisi redakte edilen alanı seçmeye veya kopyalamaya çalışırsa, yer değiştirme metni belge yapısında görünür.


Hassas Kalıpları Bulmak ve Redakte Etmek için Düzenli İfadeleri Nasıl Kullanabilirim?

Bilinen metin dizgilerini redakte etmek, çıkarılması için belirli değerleriniz olduğunda işe yarar, ancak birçok gizli veri türü, belirli değerler yerine öngörülebilir kalıpları izler. Sosyal Güvenlik numaraları, kredi kartı numaraları, e-posta adresleri, telefon numaraları ve tarihler, düzenli ifadelerle eşleşebilecek tanınabilir biçimlere sahiptir. Model tabanlı bir redaksiyon sistemi oluşturmak, her bir belirli değeri önceden bilmeden PDF içeriğinden özel bilgileri kaldırmanıza izin verir.

IronPDF'nin metin çıkarma yetenekleri ile redaksiyon yöntemleri güçlü kalıp eşleme iş akışlarını mümkün kılar. Metni çıkarır, .NET düzenli ifadelerini kullanarak eşleşmeleri tanımlar ve ardından bulunan her değeri redakte edersiniz.

using IronPdf;
using System.Text.RegularExpressions;
using System.Collections.Generic;

public class PatternRedactor
{
    // Common patterns for sensitive data
    private static readonly Dictionary<string, string> SensitivePatterns = new Dictionary<string, string>
    {
        // US Social Security Number: 123-45-6789
        { "SSN", @"\b\d{3}-\d{2}-\d{4}\b" },

        // Credit Card Numbers: various formats with 13-19 digits
        { "CreditCard", @"\b(?:\d{4}[-\s]?){3}\d{1,4}\b" },

        // Email Addresses
        { "Email", @"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b" },

        // US Phone Numbers: (123) 456-7890 or 123-456-7890
        { "Phone", @"\b(?:\(\d{3}\)\s?|\d{3}[-.])\d{3}[-.]?\d{4}\b" },

        // Dates: MM/DD/YYYY or MM-DD-YYYY
        { "Date", @"\b\d{1,2}[/-]\d{1,2}[/-]\d{2,4}\b" },

        // IP Addresses
        { "IPAddress", @"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b" }
    };

    public void RedactPatterns(string inputPath, string outputPath, params string[] patternNames)
    {
        // Load the PDF
        PdfDocument pdf = PdfDocument.FromFile(inputPath);

        // Extract all text from the document
        string fullText = pdf.ExtractAllText();

        // Track unique matches to avoid duplicate redaction attempts
        HashSet<string> matchesToRedact = new HashSet<string>();

        // Find all matches for requested patterns
        foreach (string patternName in patternNames)
        {
            if (SensitivePatterns.TryGetValue(patternName, out string pattern))
            {
                Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);
                MatchCollection matches = regex.Matches(fullText);

                foreach (Match match in matches)
                {
                    matchesToRedact.Add(match.Value);
                }
            }
        }

        // Redact each unique match
        foreach (string sensitiveValue in matchesToRedact)
        {
            pdf.RedactTextOnAllPages(sensitiveValue);
        }

        // Save the redacted document
        pdf.SaveAs(outputPath);
    }
}

// Usage example
class Program
{
    static void Main()
    {
        PatternRedactor redactor = new PatternRedactor();

        // Redact SSNs and credit cards from a financial document
        redactor.RedactPatterns(
            "customer-data.pdf",
            "customer-data-safe.pdf",
            "SSN", "CreditCard", "Email"
        );
    }
}

Bu model tabanlı yaklaşım iyi ölçeklenir çünkü desenleri bir kez tanımlar ve herhangi bir belgeye uygularsınız. Yeni veri türleri eklemek sadece sözlüğe yeni regex kalıpları eklemeyi gerektirir.

Yeniden Kullanılabilir Hassas Veri Tarayıcı Nasıl Kurabilirim?

Üretim ortamları için belgeleri taramanıza ve redaksiyon yapılması gerekip gerekmediğine karar vermeden önce hangi gizli bilgilerin mevcut olduğunu rapor etmenize sıklıkla ihtiyaç duyarsınız. Bu, uyum denetlemesi ile yardımcı olur ve redaksiyon kararlarının insan incelemesine olanak tanır. Aşağıdaki sınıf, redaksiyonla birlikte tarama yetenekleri sunar.

using IronPdf;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Linq;

public class SensitiveDataMatch
{
    public string PatternType { get; set; }
    public string Value { get; set; }
    public int PageNumber { get; set; }
}

public class ScanResult
{
    public string FilePath { get; set; }
    public List<SensitiveDataMatch> Matches { get; set; } = new List<SensitiveDataMatch>();
    public bool ContainsSensitiveData => Matches.Count > 0;

    public Dictionary<string, int> GetSummary()
    {
        return Matches.GroupBy(m => m.PatternType)
                      .ToDictionary(g => g.Key, g => g.Count());
    }
}

public class DocumentScanner
{
    private readonly Dictionary<string, string> _patterns;

    public DocumentScanner()
    {
        _patterns = new Dictionary<string, string>
        {
            { "Social Security Number", @"\b\d{3}-\d{2}-\d{4}\b" },
            { "Credit Card", @"\b(?:\d{4}[-\s]?){3}\d{1,4}\b" },
            { "Email Address", @"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b" },
            { "Phone Number", @"\b(?:\(\d{3}\)\s?|\d{3}[-.])\d{3}[-.]?\d{4}\b" },
            { "Date of Birth Pattern", @"\b(?:DOB|Date of Birth|Birth Date)[:\s]+\d{1,2}[/-]\d{1,2}[/-]\d{2,4}\b" }
        };
    }

    public ScanResult ScanDocument(string filePath)
    {
        ScanResult result = new ScanResult { FilePath = filePath };
        PdfDocument pdf = PdfDocument.FromFile(filePath);

        // Scan each page individually to track location
        for (int pageIndex = 0; pageIndex < pdf.PageCount; pageIndex++)
        {
            string pageText = pdf.ExtractTextFromPage(pageIndex);

            foreach (var pattern in _patterns)
            {
                Regex regex = new Regex(pattern.Value, RegexOptions.IgnoreCase);
                MatchCollection matches = regex.Matches(pageText);

                foreach (Match match in matches)
                {
                    result.Matches.Add(new SensitiveDataMatch
                    {
                        PatternType = pattern.Key,
                        Value = MaskValue(match.Value, pattern.Key),
                        PageNumber = pageIndex + 1
                    });
                }
            }
        }

        return result;
    }

    // Partially mask values for safe storage
    private string MaskValue(string value, string patternType)
    {
        if (patternType == "Social Security Number" && value.Length >= 4)
        {
            return "XXX-XX-" + value.Substring(value.Length - 4);
        }
        if (patternType == "Credit Card" && value.Length >= 4)
        {
            return "****-****-****-" + value.Substring(value.Length - 4);
        }
        if (patternType == "Email Address")
        {
            int atIndex = value.IndexOf('@');
            if (atIndex > 2)
            {
                return value.Substring(0, 2) + "***" + value.Substring(atIndex);
            }
        }
        return value.Length > 4 ? value.Substring(0, 2) + "***" : "****";
    }

    public void ScanAndRedact(string inputPath, string outputPath)
    {
        // First scan to identify sensitive data
        ScanResult scanResult = ScanDocument(inputPath);

        if (!scanResult.ContainsSensitiveData)
        {
            return;
        }

        // Load document for redaction
        PdfDocument pdf = PdfDocument.FromFile(inputPath);

        // Extract unique actual values (not masked) for redaction
        string fullText = pdf.ExtractAllText();
        HashSet<string> valuesToRedact = new HashSet<string>();

        foreach (var pattern in _patterns)
        {
            Regex regex = new Regex(pattern.Value, RegexOptions.IgnoreCase);
            foreach (Match match in regex.Matches(fullText))
            {
                valuesToRedact.Add(match.Value);
            }
        }

        // Apply redactions
        foreach (string value in valuesToRedact)
        {
            pdf.RedactTextOnAllPages(value);
        }

        pdf.SaveAs(outputPath);
    }
}

// Usage
class Program
{
    static void Main()
    {
        DocumentScanner scanner = new DocumentScanner();

        // Scan only (for audit purposes)
        ScanResult result = scanner.ScanDocument("application-form.pdf");
        var summary = result.GetSummary();

        // Scan and redact in one operation
        scanner.ScanAndRedact("application-form.pdf", "application-form-redacted.pdf");
    }
}

Tarayıcı, herhangi bir değişiklik oluşmadan önce hangi gizli bilgilerin mevcut olduğunu görmenizi sağlar. Bu, bulguların ve kaldırılanların belgelenmesi gereken uyum iş akışlarını destekler. Maskeleme işlevi, günlük dosyalarının ve raporların kendilerinin veri açığı kaynakları olmamasını sağlar.


Bir PDF'de Belirli Bölgeleri veya Alanları Nasıl Redakte Edebilirim?

Metin redaksiyonu, karakter tabanlı içeriği etkili bir şekilde işler, ancak PDF'ler genellikle metin eşleştirme ile adreslenemeyen formlar halinde hassas bilgiler içerir. İmzalar, fotoğraflar, el yazısı notlar, damgalar ve grafik öğeler farklı bir yaklaşım gerektirir. Bölge tabanlı redaksiyon, koordinatlarıyla dikdörtgen alanları belirtmenize ve bu sınırlar içindeki her şeyi kalıcı olarak örtmenize izin verir.

IronPDF, sansür bölgelerini tanımlamak için RectangleF yapısını kullanır. Üst sol köşenin X ve Y koordinatlarını, ardından alanın genişlik ve yüksekliğini belirtirsiniz. Koordinatlar, sayfanın sol altından, PDF gerekliliklerinin koordinat sistemiyle eşleşecek şekilde ölçülür.

Girdi

El yazısıyla imzalar ve kimlik fotoğrafı içeren bir anlaşma belgesi, koordinat tabanlı bölge hedefleme kullanılarak redakte edilmesi gerekmektedir.

using IronPdf;
using IronSoftware.Drawing;

// Load a document with signature blocks and photos
PdfDocument pdf = PdfDocument.FromFile("signed-agreement.pdf");

// Define a region for a signature block
// Located 100 points from left, 650 points from bottom
// Width of 200 points, height of 50 points
RectangleF signatureRegion = new RectangleF(100, 650, 200, 50);

// Redact the signature region on all pages
pdf.RedactRegionsOnAllPages(signatureRegion);

// Define a region for a photo ID in the upper right
RectangleF photoRegion = new RectangleF(450, 700, 100, 120);
pdf.RedactRegionsOnAllPages(photoRegion);

// Save the document with regions redacted
pdf.SaveAs("signed-agreement-redacted.pdf");

Bu kod, sansür için dikdörtgen alanları tanımlamak için RectangleF yapılarını kullanır. İmza bölgesi, (100, 650) koordinatlarında 200x50 piksel alanda yerleştirilirken, fotoğraf bölgesi (450, 700) koordinatlarında 100x120 piksel alanda yer almaktadır. RedactRegionsOnAllPages yöntemi, bu bölgeler üzerine tüm sayfalarda siyah dikdörtgenler uygular.

Örnek Çıktı

Doğru koordinatları belirlemek genellikle biraz deneme veya ölçüm gerektirebilir. PDF sayfaları genellikle bir noktanın, bir inçin 1/72'si olduğu bir koordinat sistemi kullanır. Standart bir ABD Mektup sayfası 612 puan genişliğinde ve 792 puan uzunluğundadır. A4 sayfaları yaklaşık olarak 595'e 842 puandır. PDF görüntüleme araçları, imleçle hareket ettikçe koordinatları gösteren, yardımcı olabilir veya sayfa boyutlarını programatik olarak çıkarabilirsiniz:

using IronPdf;
using IronSoftware.Drawing;

PdfDocument pdf = PdfDocument.FromFile("form-document.pdf");

// Get dimensions of the first page
var pageInfo = pdf.Pages[0];

// Calculate regions relative to page dimensions
// Redact the bottom quarter of the page where signatures appear
float signatureAreaHeight = (float)(pageInfo.Height / 4);
RectangleF bottomQuarter = new RectangleF(
    0,                              // Start at left edge
    0,                              // Start at bottom
    (float)pageInfo.Width,          // Full page width
    signatureAreaHeight             // Quarter of page height
);

pdf.RedactRegionsOnAllPages(bottomQuarter);

// Redact a header area at the top containing letterhead with address
float headerHeight = 100;
RectangleF headerArea = new RectangleF(
    0,
    (float)(pageInfo.Height - headerHeight), // Position from bottom
    (float)pageInfo.Width,
    headerHeight
);

pdf.RedactRegionsOnAllPages(headerArea);

pdf.SaveAs("form-document-redacted.pdf");

Bu türden favori kütüphanem IronPDF'dir. PDF dosyalarının hızlı ve verimli bir şekilde işlenmesine olanak tanır. Ayrıca, PDF/A formatına dışa aktarma ve dijital imzalama gibi birçok değerli özelliğe sahiptir.

Milan Jovanovic

Microsoft MVP

Vaka çalışmasını görüntüle

IronOCR, manuel işleme maliyetinden yıllık 40.000 USD tasarruf etmemizi sağlıyor, üretkenliği artırıyor ve yüksek etkili görevler için kaynakları serbest bırakıyor. Kesinlikle tavsiye ederim.

Brent Matzelle

Teknoloji Müdürü, OPYN

Vaka çalışmasını görüntüle

IronSuite, operasyonlarımızda kritik bir rol oynar. Bunlar, iş süreçlerinde verimliliği artıran, kat planları oluşturmak ve envanter yönetimini geliştirmek gibi araçlardır.

David Jones

Baş Yazılım Mühendisi, Agorus Build

Vaka çalışmasını görüntüle

Farklı Sayfalardaki Çoklu Bölgeleri Nasıl Redakte Edebilirim?

Karmaşık belgeler genellikle farklı sayfalarda farklı bölgelerin redakte edilmesini gerektirir. Çok sayfalı bir formda imza çizgileri farklı konumlarda olabilir veya farklı sayfalarda fotoğraflar, damgalar veya diğer grafiksel öğeler özgün yerlerde olabilir. IronPDF tarafında, hedefli bölge redaksiyonu için sayfa özelinde yöntemler bulunmaktadır.

using IronPdf;
using IronSoftware.Drawing;

PdfDocument pdf = PdfDocument.FromFile("multi-page-application.pdf");

// Define page-specific redaction regions
// Page 1: Cover page with applicant photo
RectangleF page1Photo = new RectangleF(450, 600, 120, 150);
pdf.RedactRegionOnPage(0, page1Photo);

// Page 2: Personal information section
RectangleF page2InfoBlock = new RectangleF(50, 400, 250, 200);
pdf.RedactRegionOnPage(1, page2InfoBlock);

// Pages 3-5: Signature lines at the same position
RectangleF signatureLine = new RectangleF(100, 100, 200, 40);
int[] signaturePages = { 2, 3, 4 };
pdf.RedactRegionOnPages(signaturePages, signatureLine);

// Page 6: Multiple regions - notary stamp and witness signature
RectangleF notaryStamp = new RectangleF(400, 150, 150, 150);
RectangleF witnessSignature = new RectangleF(100, 150, 200, 40);
pdf.RedactRegionOnPage(5, notaryStamp);
pdf.RedactRegionOnPage(5, witnessSignature);

pdf.SaveAs("multi-page-application-redacted.pdf");

Tutarlı düzenlere sahip belgeler, yeniden kullanılabilir bölge tanımlamalarından yararlanır:

using IronPdf;
using IronSoftware.Drawing;

public class FormRegions
{
    // Standard form regions based on common templates
    public static RectangleF HeaderLogo => new RectangleF(20, 720, 150, 60);
    public static RectangleF SignatureBlock => new RectangleF(72, 72, 200, 50);
    public static RectangleF DateField => new RectangleF(400, 72, 120, 20);
    public static RectangleF PhotoId => new RectangleF(480, 650, 100, 130);
    public static RectangleF AddressBlock => new RectangleF(72, 600, 250, 80);
}

class Program
{
    static void Main()
    {
        PdfDocument pdf = PdfDocument.FromFile("standard-form.pdf");
        
        // Apply standard redactions using predefined regions
        pdf.RedactRegionsOnAllPages(FormRegions.SignatureBlock);
        pdf.RedactRegionsOnAllPages(FormRegions.DateField);
        pdf.RedactRegionOnPage(0, FormRegions.PhotoId);
        
        pdf.SaveAs("standard-form-redacted.pdf");
    }
}
C#

Gizli Bilgiyi Açığa Çıkarabilecek Metadata Nasıl Kaldırılır?

PDF meta verileri, genellikle gözden kaçan bir bilgi sızıntısı kaynağını temsil eder. Her PDF, hassas ayrıntıları ortaya çıkarabilecek özellikler taşır: belgenin yazarı ve kullanıcı adı, belgeyi oluşturmak için kullanılan yazılım, oluşturulma ve değiştirilme zaman damgaları, orijinal dosya adı, revizyon geçmişi ve çeşitli uygulamalar tarafından eklenen özel özellikler. Belgeleri harici olarak paylaşmadan önce, bu meta veriyi çıkarmak veya temizlemek hayati önem taşır. Meta veri işlemlerinin kapsamlı bir özeti için meta veri nasıl yapılır kılavuzumuza bakın.

IronPDF, varolan değerleri okumanıza, değiştirmenize veya tamamen kaldırmanıza izin veren MetaData özelliği ile belge meta verilerini açığa çıkarır.

using IronPdf;
using System;

// Load a document containing sensitive metadata
PdfDocument pdf = PdfDocument.FromFile("internal-report.pdf");

// Access current metadata properties
string author = pdf.MetaData.Author;
string title = pdf.MetaData.Title;
string subject = pdf.MetaData.Subject;
string keywords = pdf.MetaData.Keywords;
string creator = pdf.MetaData.Creator;
string producer = pdf.MetaData.Producer;
DateTime? creationDate = pdf.MetaData.CreationDate;
DateTime? modifiedDate = pdf.MetaData.ModifiedDate;

// Get all metadata keys including custom properties
var allKeys = pdf.MetaData.Keys();

Dağıtmadan önce gizli metaverileri çıkarmak amacıyla:

Girdi

Yazar adları, oluşturulma zaman damgaları ve çeşitli uygulamalar tarafından eklenen özel özellikler gibi gömülü metaveri içeren bir dahili memo.

using IronPdf;
using System;

PdfDocument pdf = PdfDocument.FromFile("confidential-memo.pdf");

// Replace identifying metadata with generic values
pdf.MetaData.Author = "Organization Name";
pdf.MetaData.Creator = "Document System";
pdf.MetaData.Producer = "";
pdf.MetaData.Title = "Public Document";
pdf.MetaData.Subject = "";
pdf.MetaData.Keywords = "";

// Normalize dates to remove timing information
pdf.MetaData.CreationDate = DateTime.Now;
pdf.MetaData.ModifiedDate = DateTime.Now;

// Remove specific custom metadata keys
pdf.MetaData.RemoveMetaDataKey("OriginalFilename");
pdf.MetaData.RemoveMetaDataKey("LastSavedBy");
pdf.MetaData.RemoveMetaDataKey("Company");
pdf.MetaData.RemoveMetaDataKey("Manager");

// Remove custom properties added by applications
try
{
    pdf.MetaData.CustomProperties.Remove("SourcePath");
}
catch { }

pdf.SaveAs("confidential-memo-cleaned.pdf");

Bu kod, kimlik belirleyen metaveri alanlarını genel değerlerle değiştirir, zaman damgalarını geçerli tarih için normalleştirir ve uygulamaların eklemiş olabileceği özel deniklendirme anahtarlarını kaldırır. RemoveMetaDataKey yöntemi, 'OrijinalDosyaAdi' ve 'SonKaydeden' gibi dahili bilgileri açığa çıkarabilecek belirli özellikleri hedef alır.

Örnek Çıktı

Toplu işlemler için kapsamlı meta veri temizleme, sistematik bir yaklaşım gerektirir:

using IronPdf;
using System;
using System.Collections.Generic;

public class MetadataCleaner
{
    private readonly string _defaultAuthor;
    private readonly string _defaultCreator;
    
    public MetadataCleaner(string organizationName)
    {
        _defaultAuthor = organizationName;
        _defaultCreator = $"{organizationName} Document System";
    }
    
    public void CleanMetadata(PdfDocument pdf)
    {
        // Replace standard metadata fields
        pdf.MetaData.Author = _defaultAuthor;
        pdf.MetaData.Creator = _defaultCreator;
        pdf.MetaData.Producer = "";
        pdf.MetaData.Subject = "";
        pdf.MetaData.Keywords = "";
        
        // Normalize timestamps
        DateTime now = DateTime.Now;
        pdf.MetaData.CreationDate = now;
        pdf.MetaData.ModifiedDate = now;
        
        // Get all keys and remove potentially sensitive ones
        List<string> keysToRemove = new List<string>();
        foreach (string key in pdf.MetaData.Keys())
        {
            // Keep only essential keys
            if (!IsEssentialKey(key))
            {
                keysToRemove.Add(key);
            }
        }
        
        foreach (string key in keysToRemove)
        {
            pdf.MetaData.RemoveMetaDataKey(key);
        }
    }
    
    private bool IsEssentialKey(string key)
    {
        // Keep only the basic display properties
        string[] essentialKeys = { "Title", "Author", "CreationDate", "ModifiedDate" };
        foreach (string essential in essentialKeys)
        {
            if (key.Equals(essential, StringComparison.OrdinalIgnoreCase))
            {
                return true;
            }
        }
        return false;
    }
}

// Usage
class Program
{
    static void Main()
    {
        MetadataCleaner cleaner = new MetadataCleaner("Acme Corporation");
        
        PdfDocument pdf = PdfDocument.FromFile("report.pdf");
        cleaner.CleanMetadata(pdf);
        pdf.SaveAs("report-clean.pdf");
    }
}
C#

Emdirilmiş Skriptler ve Gizli Tehditleri Kaldırmak İçin PDF Nasıl Temizlenir?

PDF temizleme, görünen içerik ve meta verilerin ötesine geçen güvenlik kaygılarını ele alır. PDF dosyaları JavaScript kodu, gömülü yürütülebilir dosyalar, harici bağlantıları tetikleyen form eylemleri ve diğer potansiyel zararlı öğeler içerebilir. Bu beceriler, etkileşimli formlar ve multimedya içerikler gibi yasal amaçlar için mevcuttur, ancak aynı zamanda saldırı vektörleri oluştururlar. Temizleme, PDF'nin bu aktif öğelerini kaldırırken görsel içeriği korur. Temizleme yöntemleriyle ilgili ek ayrıntılar için PDF nasıl temizlenir kılavuzumuza bakın.

IronPDF'nin Cleaner sınıfı, PDF'yi önce bir imaj formatına dönüştürüp sonra geri çevirerek verimli bir yaklaşımla temizleme işlemini gerçekleştirir. Bu işlem, JavaScript'i, gömülü nesneleri, form eylemlerini ve ek notları çıkarırken görsel görünümü bozulmadan tutar. Kütüphane, farklı özelliklere sahip iki temizleme yöntemi sunar.

Girdi

Bir dış kaynaktan alınan PDF belgesi, JavaScript, gömülü nesneler veya başka potansiyel olarak zararlı aktif içerik içerebilir.

using IronPdf;

// Load a PDF that may contain active content
PdfDocument pdf = PdfDocument.FromFile("received-document.pdf");

// Sanitize using SVG conversion
// Faster processing, results in searchable text, slight layout variations possible
PdfDocument sanitizedSvg = Cleaner.SanitizeWithSvg(pdf);
sanitizedSvg.SaveAs("sanitized-svg.pdf");

// Sanitize using Bitmap conversion
// Slower processing, text becomes image (not searchable), exact visual reproduction
PdfDocument sanitizedBitmap = Cleaner.SanitizeWithBitmap(pdf);
sanitizedBitmap.SaveAs("sanitized-bitmap.pdf");

Bu kod, IronPDF'nin Cleaner sınıfı tarafından sağlanan iki temizleme yöntemini gösterir. SanitizeWithSvg, PDF'yi bir SVG ara formatı üzerinden dönüştürerek aranabilir metni korur ve aktif içeriği kaldırır. SanitizeWithBitmap, sayfaları önce imajlara dönüştürerek, tam görsel kopyalar üretir ancak metni aranamaz grafikler olarak işler.

Örnek Çıktı

SVG yöntemi daha hızlı çalışır ve metni aranabilir içerik olarak korur, bu da belgelerin indekslenmesi veya erişilebilir kalması gerektiğinde uygun hale getirir. Bitmap yöntemi tam görsel kopyalar üretir, ancak metni görüntülere dönüştürür, bu da metin seçimini ve aramayı engeller. Çıkış belgesi için gereksinimlerinize bağlı olarak seçim yapın.

Temizleme sırasında çıkış seçeneklerini ayarlamak için görüntüleme seçeneklerini de uygulayabilirsiniz:

using IronPdf;

// Load the potentially unsafe document
PdfDocument pdf = PdfDocument.FromFile("untrusted-source.pdf");

// Configure rendering options for sanitization
var renderOptions = new ChromePdfRenderOptions
{
    MarginTop = 10,
    MarginBottom = 10,
    MarginLeft = 10,
    MarginRight = 10
};

// Sanitize with custom options
PdfDocument sanitized = Cleaner.SanitizeWithSvg(pdf, renderOptions);
sanitized.SaveAs("untrusted-source-safe.pdf");

Yüksek güvenlikli ortamlar genellikle temizleme işlemini diğer koruyucu önlemlerle birleştirmeyi gerektirir:

using IronPdf;
using System;

public class SecureDocumentProcessor
{
    public PdfDocument ProcessUntrustedDocument(string inputPath)
    {
        // Load the document
        PdfDocument original = PdfDocument.FromFile(inputPath);

        // Step 1: Sanitize to remove active content
        PdfDocument sanitized = Cleaner.SanitizeWithSvg(original);

        // Step 2: Clean metadata
        sanitized.MetaData.Author = "Processed Document";
        sanitized.MetaData.Creator = "Secure Processor";
        sanitized.MetaData.Producer = "";
        sanitized.MetaData.CreationDate = DateTime.Now;
        sanitized.MetaData.ModifiedDate = DateTime.Now;

        // Remove all custom metadata
        foreach (string key in sanitized.MetaData.Keys())
        {
            if (key != "Title" && key != "Author" && key != "CreationDate" && key != "ModifiedDate")
            {
                sanitized.MetaData.RemoveMetaDataKey(key);
            }
        }

        return sanitized;
    }
}

// Usage
class Program
{
    static void Main()
    {
        SecureDocumentProcessor processor = new SecureDocumentProcessor();
        PdfDocument safe = processor.ProcessUntrustedDocument("email-attachment.pdf");
        safe.SaveAs("email-attachment-safe.pdf");
    }
}

Bir PDF'yi Güvenlik Açıkları için Nasıl Tararım?

Belgeleri işlemeye veya temizlemeye başlamadan önce hangi potansiyel tehditleri içerdiğini değerlendirmek isteyebilirsiniz. IronPDF'nin Cleaner.ScanPdf yöntemi, belgeleri kötü amaçlı yazılım analizi ve tehdit algılamada yaygın olarak kullanılan şablon tanımları olan YARA kuralları ile inceler. Tarama, zararlı PDF dosyalarıyla ilişkili özellikleri tanımlar.

using IronPdf;

// Load the document to scan
PdfDocument pdf = PdfDocument.FromFile("suspicious-document.pdf");

// Scan using default YARA rules
CleanerScanResult scanResult = Cleaner.ScanPdf(pdf);

// Check the scan results
bool threatsDetected = scanResult.IsDetected;
int riskCount = scanResult.Risks.Count;

// Process identified risks
if (scanResult.IsDetected)
{
    foreach (var risk in scanResult.Risks)
    {
        // Handle each identified risk
    }

    // Sanitize the document before use
    PdfDocument sanitized = Cleaner.SanitizeWithSvg(pdf);
    sanitized.SaveAs("suspicious-document-safe.pdf");
}

Özel tespit gereksinimleri için özel YARA kural dosyaları sağlayabilirsiniz. Belirli tehdit modelleri veya uyum ihtiyaçları olan kuruluşlar, genellikle belirli zafiyet kalıplarını hedefleyen kendi kural dizilerini korur.

using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("incoming-document.pdf");

// Scan with custom YARA rules
string[] customYaraFiles = { "corporate-rules.yar", "industry-specific.yar" };
CleanerScanResult result = Cleaner.ScanPdf(pdf, customYaraFiles);

if (result.IsDetected)
{
    // Document triggered custom rules and requires review or sanitization
    PdfDocument sanitized = Cleaner.SanitizeWithSvg(pdf);
    sanitized.SaveAs("incoming-document-safe.pdf");
}

Belge alma iş akışlarına tarama entegrasyonu, güvenlik kararlarını otomatikleştirmeye yardımcı olur:

using IronPdf;
using System;
using System.IO;

public enum DocumentSafetyLevel
{
    Safe,
    Suspicious,
    Dangerous
}

public class DocumentSecurityGateway
{
    public DocumentSafetyLevel EvaluateDocument(string filePath)
    {
        PdfDocument pdf = PdfDocument.FromFile(filePath);
        CleanerScanResult scan = Cleaner.ScanPdf(pdf);

        if (!scan.IsDetected)
        {
            return DocumentSafetyLevel.Safe;
        }

        // Evaluate severity based on number of risks
        if (scan.Risks.Count > 5)
        {
            return DocumentSafetyLevel.Dangerous;
        }

        return DocumentSafetyLevel.Suspicious;
    }

    public PdfDocument ProcessIncomingDocument(string filePath, string outputDirectory)
    {
        DocumentSafetyLevel safety = EvaluateDocument(filePath);
        string fileName = Path.GetFileName(filePath);

        switch (safety)
        {
            case DocumentSafetyLevel.Safe:
                return PdfDocument.FromFile(filePath);

            case DocumentSafetyLevel.Suspicious:
                PdfDocument suspicious = PdfDocument.FromFile(filePath);
                return Cleaner.SanitizeWithSvg(suspicious);

            case DocumentSafetyLevel.Dangerous:
                throw new SecurityException($"Document {fileName} contains dangerous content");

            default:
                throw new InvalidOperationException("Unknown safety level");
        }
    }
}

Komple Bir Redaksiyon ve Temizleme Süreci Nasıl Oluşturabilirim?

Üretim belge işlemesi genellikle birçok koruma tekniğini uyumlu bir iş akışına birleştirmeyi gerektirir. Komple bir süreç, gelen belgeleri tehditler açısından tarayabilir, başlangıç taramasını geçenleri temizleyebilir, metin ve bölge redaksiyonu uygulayabilir, meta verileri temizleyebilir ve yapılan tüm işlemleri belgeleyen denetim günlükleri üretebilir. Bu örnek, böyle bir tümleşik yaklaşımı göstermektedir.

using IronPdf;
using IronSoftware.Drawing;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;

public class DocumentProcessingResult
{
    public string OriginalFile { get; set; }
    public string OutputFile { get; set; }
    public bool WasSanitized { get; set; }
    public int TextRedactionsApplied { get; set; }
    public int RegionRedactionsApplied { get; set; }
    public bool MetadataCleaned { get; set; }
    public List<string> SensitiveDataTypesFound { get; set; } = new List<string>();
    public DateTime ProcessedAt { get; set; }
    public bool Success { get; set; }
    public string ErrorMessage { get; set; }
}

public class ComprehensiveDocumentProcessor
{
    // Sensitive data patterns
    private readonly Dictionary<string, string> _sensitivePatterns = new Dictionary<string, string>
    {
        { "SSN", @"\b\d{3}-\d{2}-\d{4}\b" },
        { "Credit Card", @"\b(?:\d{4}[-\s]?){3}\d{1,4}\b" },
        { "Email", @"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b" },
        { "Phone", @"\b(?:\(\d{3}\)\s?|\d{3}[-.])\d{3}[-.]?\d{4}\b" }
    };

    // Standard regions to redact (signature areas, photo locations)
    private readonly List<RectangleF> _standardRedactionRegions = new List<RectangleF>
    {
        new RectangleF(72, 72, 200, 50),    // Bottom left signature
        new RectangleF(350, 72, 200, 50)    // Bottom right signature
    };

    private readonly string _organizationName;

    public ComprehensiveDocumentProcessor(string organizationName)
    {
        _organizationName = organizationName;
    }

    public DocumentProcessingResult ProcessDocument(
        string inputPath,
        string outputPath,
        bool sanitize = true,
        bool redactPatterns = true,
        bool redactRegions = true,
        bool cleanMetadata = true,
        List<string> additionalTermsToRedact = null)
    {
        var result = new DocumentProcessingResult
        {
            OriginalFile = inputPath,
            OutputFile = outputPath,
            ProcessedAt = DateTime.Now
        };

        try
        {
            // Load the document
            PdfDocument pdf = PdfDocument.FromFile(inputPath);

            // Step 1: Security scan
            CleanerScanResult scanResult = Cleaner.ScanPdf(pdf);

            if (scanResult.IsDetected && scanResult.Risks.Count > 10)
            {
                throw new SecurityException("Document contains too many security risks to process");
            }

            // Step 2: Sanitization (if needed or requested)
            if (sanitize || scanResult.IsDetected)
            {
                pdf = Cleaner.SanitizeWithSvg(pdf);
                result.WasSanitized = true;
            }

            // Step 3: Pattern-based text redaction
            if (redactPatterns)
            {
                string fullText = pdf.ExtractAllText();
                HashSet<string> valuesToRedact = new HashSet<string>();

                foreach (var pattern in _sensitivePatterns)
                {
                    Regex regex = new Regex(pattern.Value, RegexOptions.IgnoreCase);
                    MatchCollection matches = regex.Matches(fullText);

                    if (matches.Count > 0)
                    {
                        result.SensitiveDataTypesFound.Add($"{pattern.Key} ({matches.Count})");
                        foreach (Match match in matches)
                        {
                            valuesToRedact.Add(match.Value);
                        }
                    }
                }

                // Apply redactions
                foreach (string value in valuesToRedact)
                {
                    pdf.RedactTextOnAllPages(value);
                    result.TextRedactionsApplied++;
                }
            }

            // Step 4: Additional specific terms
            if (additionalTermsToRedact != null)
            {
                foreach (string term in additionalTermsToRedact)
                {
                    pdf.RedactTextOnAllPages(term);
                    result.TextRedactionsApplied++;
                }
            }

            // Step 5: Region-based redaction
            if (redactRegions)
            {
                foreach (RectangleF region in _standardRedactionRegions)
                {
                    pdf.RedactRegionsOnAllPages(region);
                    result.RegionRedactionsApplied++;
                }
            }

            // Step 6: Metadata cleaning
            if (cleanMetadata)
            {
                pdf.MetaData.Author = _organizationName;
                pdf.MetaData.Creator = $"{_organizationName} Document Processor";
                pdf.MetaData.Producer = "";
                pdf.MetaData.Subject = "";
                pdf.MetaData.Keywords = "";
                pdf.MetaData.CreationDate = DateTime.Now;
                pdf.MetaData.ModifiedDate = DateTime.Now;
                result.MetadataCleaned = true;
            }

            // Step 7: Save the processed document
            pdf.SaveAs(outputPath);
            result.Success = true;
        }
        catch (Exception ex)
        {
            result.Success = false;
            result.ErrorMessage = ex.Message;
        }

        return result;
    }
}

// Usage example
class Program
{
    static void Main()
    {
        var processor = new ComprehensiveDocumentProcessor("Acme Corporation");

        // Process a single document with all protections
        var result = processor.ProcessDocument(
            inputPath: "customer-application.pdf",
            outputPath: "customer-application-redacted.pdf",
            sanitize: true,
            redactPatterns: true,
            redactRegions: true,
            cleanMetadata: true,
            additionalTermsToRedact: new List<string> { "Project Alpha", "Internal Use Only" }
        );

        // Batch process multiple documents
        string[] inputFiles = Directory.GetFiles("incoming", "*.pdf");
        foreach (string file in inputFiles)
        {
            string outputFile = Path.Combine("processed", Path.GetFileName(file));
            processor.ProcessDocument(file, outputFile);
        }
    }
}

Girdi

Bir müşteri başvuru formu, SSN'ler, kredi kartı numaraları, e-posta adresleri ve imza blokları dahil olmak üzere çeşitli hassas veri türlerini içermektedir ve kapsamlı koruma gerektirir.

Örnek Çıktı

Bu kapsamlı işlemci, bu kılavuzda ele alınan tüm teknikleri tek, yapılandırılabilir bir sınıfta birleştirir. Tehditleri tarar, gerekirse temizler, hassas kalıpları bulur ve redakte eder, bölge redaksiyonu uygular, meta verileri temizler ve ayrıntılı raporlar üretir. Özelleştirilebilir duyarlılık kalıplarını, redaksiyon bölgelerini ve işleme seçeneklerini, özel gereksinimlerinizle eşleşecek şekilde ayarlayabilirsiniz.


Sonraki Adımlar

PDF belgelerinde hassas bilgileri korumak, yüzeysel önlemlerden daha fazlasını gerektirir. Gerçek redaksiyon, belge yapısından içeriği kalıcı olarak siler. Kalıp Eşleme, Sosyal Güvenlik numaraları, kredi kartı bilgileri ve e-posta adresleri gibi verilerin keşfini ve kaldırılmasını otomatikleştirir. Bölge tabanlı redaksiyon, metin eşleme ile ele alınamayan imzalar, fotoğraflar ve diğer grafik öğeleri işler. Meta veri temizliği, yazarları, zaman damgalarını veya dahili dosya yollarını açığa çıkarabilecek gizli bilgileri yok eder. Temizleme, güvenlik riskleri oluşturan gömülü skriptleri ve aktif içerikleri çıkarır.

IronPDF, C# ve .NET geliştirme uygulamalarıyla doğal olarak bütünleşen, tutarlı, iyi tasarlanmış bir API aracılığıyla bu yeteneklerin tümünü sunar. Bu kılavuzda gösterilen yöntemler, binlerce dosyayı toplu işlemeye ölçeklendirebilir. İster sağlık verileri için uyum iş akışları kuruyor olun, ister hukuki belgeleri keşif için hazırlıyor olun, isterse de iç raporlarınızın güvenli bir şekilde paylaşılmasını sağlamak istiyor olun, bu teknikler sorumlu belge işleme temelini oluşturur. Kapsamlı güvenlik kapsaması için redaksiyonu şifre koruması ve izinleri ve dijital imzalar ile birleştirin.

İşe başlamaya hazır mısınız? IronPDF'i İndirin ve ücretsiz bir deneme ile deneyin. Kütüphane, ücretsiz bir geliştirme lisansı içerdiğinden, redaksiyon, metin çıkarma ve temizleme özelliklerini üretime yönelik bir lisansa geçmeden önce tam olarak değerlendirebilirsiniz. Uygulama veya uyum iş akışları hakkında sorularınız varsa, mühendislik destek ekibimize ulaşın.

Sıkça Sorulan Sorular

PDF düzenleme nedir?

PDF düzenleme, bir PDF belgesinden hassas bilgilerin kalıcı olarak kaldırılması işlemidir. Bu, gizlilik veya uyumluluk nedenleriyle gizlenmesi gereken metin, görüntüler ve meta verileri içerebilir.

C# kullanarak bir PDF'de bilgiyi nasıl düzenleyebilirim?

C# kullanarak bir PDF'de bilgiyi düzenlemek için IronPDF kullanabilirsiniz. Bu, PDF belgelerinizdeki metni, görüntüleri ve meta verileri kalıcı olarak kaldırmanıza veya gizlemenize olanak tanıyarak gizlilik ve uyumluluk standartlarına uymasını sağlar.

Uyumluluk için PDF düzenleme neden önemlidir?

PDF düzenleme, hassas verileri güvence altına alarak ve gizli bilgilere yetkisiz erişimi önleyerek HIPAA, GDPR ve PCI DSS gibi standartlarla uyum sağlamak için kritik önem taşır.

IronPDF bir PDF'nin tüm bölgelerini düzenleyebilir mi?

Evet, IronPDF bir PDF'nin tüm bölgelerini düzenleyebilir. Bu, güvenlik amaçları için belge içindeki spesifik alanları tanımlamanıza olanak tanır.

IronPDF ile hangi tür veriler düzenlenebilir?

IronPDF, PDF belgelerinden metin, görüntü ve meta veriler dahil çeşitli veri türlerini düzenleyebilir, böylece kapsamlı veri gizliliği ve güvenliği sağlar.

IronPDF belgeleri temizlemeyi destekliyor mu?

Evet, IronPDF, görünmeyebilir ancak gizlilik riski taşıyan gizli veri veya meta verileri kaldırarak belgeleri temizlemeyi destekler.

IronPDF ile PDF düzenleme otomasyonu mümkün mü?

Evet, IronPDF, belgelerin çok büyük miktarlarının hassas veri kaldırmayı gerektirdiği durumlarda PDF düzenleme süreçlerini C# içinde otomatikleştirmeyi mümkün kılar.

IronPDF düzenlemenin kalıcılığını nasıl sağlar?

IronPDF, seçilmiş metin ve görüntüleri belgeden kalıcı olarak çıkararak, yalnızca görünmez hale getirmek yerine tamamen kaldırarak geri erişilemeyecek veya görüntülenemeyecek şekilde düzenlemenin kalıcılığını sağlar.

IronPDF bir PDF'deki meta verileri düzenleyebilir mi?

Evet, IronPDF, gizli veya arka plan verileri dahil tüm hassas veri biçimlerini tamamen çıkararak bir PDF belgesindeki meta verileri düzenleyebilir.

IronPDF'yi PDF düzenleme için kullanmanın faydaları nelerdir?

IronPDF'yi PDF düzenleme için kullanmak, veri koruma düzenlemelerine uyumluluğu sağlama, belge güvenliğini artırma ve hassas bilgileri yönetmek için verimli, otomatik bir süreç sunmak gibi avantajlar sunar.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapılandırılmış, görsel olarak çekici kılavuzlar oluşturmayı seviyor.

...
Daha Fazla Oku

Başlamaya Hazır mısınız?

Nuget Downloads 20,756,830Sürüm:2026.7yeni yayınlandı

Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez
PDF için C# NuGet Kütüphanesi
NuGet ile yükleyin

Sürüm: 2026.7

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. Çözüm Gezgini'nde Referanslar'a sağ tıklayın, NuGet Paketlerini Yönet
  2. Tarayıcıya tıklayın ve "IronPdf" arayın
  3. Paketi seçin ve yükleyin
C# PDF DLL
DLL İndir

Sürüm: 2026.7

veya Windows Yükleyiciyi şuradan buradan indirin.

  1. IronPDF'i, ~/Libs gibi bir yere, Solution dizininiz içinde indirin ve açın.
  2. Visual Studio Çözüm Gezgini'nde, Referanslar'a sağ tıklayın. Tarayıcı sekmesini seçin, "IronPdf.dll"

Lisanslar $999

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez