Plně funkční příklad dostupný na GitHubu:
strip-pdf-metadata-dotnet
Úvod
Sanitizace PDF metadat je workflow GroupDocs.Metadata pro .NET, které vymaže PDF Info slovník a XMP identifikační pole z C# služeb. Když PDF smlouva opustí interní úložiště, často s ní odcházejí Author, Creator, Producer, Keywords a XMP pakety. Čističe prohlížečů a rychlý průchod Acrobatem mohou vypadat úspěšně, zatímco XMP stále uvádí původního autora. Na tuto mezeru jsem narazil, když „vyčištěná“ verze návrhu stále ukazovala Alice Example pod Autorem po otevření souboru partnerem v jiném prohlížeči.
GroupDocs.Metadata pro .NET poskytuje C# službám dvě jasné úrovně čištění na stejném objektu Metadata: Sanitize() pro úplné vymazání detekovaných balíčků a RemoveProperties, když Title a Subject musí zůstat, ale osobní identita ne. Tento článek porovnává oba přístupy s kroky inspect a verify, které činí výsledek auditovatelným.
Po přečtení budete mít funkční .NET 8 ukázky, rozhodovací pravidlo pro čištění určené pro odchozí soubory versus archivní přátelské čištění a predikát verify, který kontroluje Author / Person.Creator místo paniky nad otisky PDF‑engine Creator/Producer po Save.
Proč je čištění PDF metadat důležité
Odchozí sdílení souborů, multi‑tenant stahování a regulované archivy všechny potřebují opakovatelný API pro odstraňování metadat místo desktopového kliknutí. Tento přístup je zvláště cenný pro:
- Portály partnerů: Úplné vymazání před tím, než PDF překročí hranici důvěry
- Vyhledávání v archivech: Zachovat Title/Subject a odstranit pole typu Author
- Incident response: Dokázat, že Author byl odstraněn po chybné sdílení
- CI brány: Selhat build, když verify vrátí false
Jednořádková politika („odstranit metadata“) skrývá volbu mezi Sanitize a selektivním čištěním. Pojmenování intenzity v code review zabraňuje tichému přetřídění Keywords, které archiv stále potřebuje.
Požadavky
- .NET 8 SDK
- GroupDocs.Metadata 26.8.0 (dočasná licence)
- PDF, který stále obsahuje Info a/nebo XMP identifikační pole
- Visual Studio 2022 nebo VS Code (volitelné)
Instalace
Nainstalujte GroupDocs.Metadata přes NuGet:
dotnet add package GroupDocs.Metadata --version 26.8.0
Nebo obnovte ze souboru .csproj ukázkového projektu. Pro neomezené Save nastavte proměnnou prostředí LIC_METADATA_VALID na složku, která obsahuje GroupDocs.Metadata.Product.Family.lic.
Metoda 1 – Prohlédněte před čištěním
Začněte s výpisem jen pro čtení, abyste věděli, která pole PDF skutečně nese. Nástroje v prohlížeči často XMP přehlédnou; tento výpis je výchozím bodem pro kontrolu před/po.
using var metadata = new Metadata(inputPath);
var properties = metadata.FindProperties(p =>
p.Tags.Contains(Tags.Person.Creator) ||
p.Tags.Contains(Tags.Tool.Software) ||
p.Tags.Contains(Tags.Content.Title) ||
p.Tags.Contains(Tags.Content.Subject) ||
string.Equals(p.Name, "Author", StringComparison.OrdinalIgnoreCase) ||
string.Equals(p.Name, "Creator", StringComparison.OrdinalIgnoreCase) ||
string.Equals(p.Name, "Producer", StringComparison.OrdinalIgnoreCase) ||
string.Equals(p.Name, "Keywords", StringComparison.OrdinalIgnoreCase));
foreach (var property in properties)
{
Console.WriteLine($"{property.Name} = {property.Value}");
}
Klíčové body:
- Tagy i názvy: Kombinujte kontrolu tagů s rovnostmi
Author/Keywordspro producenty, kteří pole označují jinak - Žádná mutace: Bezpečné pro režimy suchého běhu a podporné tickety
- Sdílené filtry: Později znovu použijte stejné myšlenky v predikátech pro odstraňování
Metoda 2 – Sanitize všechny detekované metadata
Použijte Sanitize() když PDF musí odejít bez jakékoliv stopy autorství. Volání vymaže rozpoznané balíčky, včetně polí Info slovníku a XMP, pokud je API detekuje, a poté uložíte nový soubor.
using var metadata = new Metadata(inputPath);
int removed = metadata.Sanitize();
Console.WriteLine(removed);
metadata.Save(outputPath);
Klíčové body:
- Jedno volání: Malý povrch pro odchozí trasy
- Zaznamenejte počet: Operátoři mohou rozpoznat již čisté vstupy oproti velkým výmazům
- Očekávejte otisky nástrojů: Po
Savese mohou v polích Creator/Producer objevit hodnoty PDF‑engine Tool.Software
Nejlépe když: stahování partnerů, veřejné odkazy, výměna mezi tenanty.
Metoda 3 – Odstranit pouze vlastnosti typu autor
Když Title, Subject a Keywords stále slouží vyhledávání, odstraňte osobní identitu pomocí RemoveProperties místo vymazání celého balíčku.
using var metadata = new Metadata(inputPath);
int removed = metadata.RemoveProperties(p =>
p.Tags.Contains(Tags.Person.Creator) ||
p.Tags.Contains(Tags.Person.Editor) ||
string.Equals(p.Name, "Author", StringComparison.OrdinalIgnoreCase) ||
string.Equals(p.Name, "Creator", StringComparison.OrdinalIgnoreCase) ||
string.Equals(p.Name, "Producer", StringComparison.OrdinalIgnoreCase));
Console.WriteLine(removed);
metadata.Save(outputPath);
Klíčové body:
- Predikát je přezkoumatelný: Code review může přesně vidět, která identifikační pole jsou odstraněna
- Popisná pole zůstávají: Title/Subject/Keywords zůstávají s tímto filtrem
- Stejná SDK: Nepotřebujete druhou knihovnu pro selektivní cestu
Nejlépe když: interní archivy, cirkulující návrhy, politiky zakazující Author, ale povolující klíčová slova.
Jak dokážu odstranění autora po uložení (Save)?
Znovu otevřete vyčištěné PDF a hledejte jen Author / Person.Creator / Person.Editor. Vytiskněte True, pokud žádné nezůstaly. Nevnímejte zbylé otisky Creator/Producer Tool.Software jako selhání výmazu – Save může tato pole přepsat názvem PDF‑engine. Tento rozdíl udržuje kontrolu shody v CI poctivou a zabraňuje falešným poplachům, když engine označí své vlastní nástroje.
using var metadata = new Metadata(inputPath);
var leftovers = metadata.FindProperties(p =>
p.Tags.Contains(Tags.Person.Creator) ||
p.Tags.Contains(Tags.Person.Editor) ||
string.Equals(p.Name, "Author", StringComparison.OrdinalIgnoreCase));
Console.WriteLine(!leftovers.Any());
Klíčové body:
- Položte správnou otázku: „Je Author pryč?“ místo „Je Creator prázdný?“
- Druhé otevření: Ověřte po
Save, ne jen v paměti - Přátelské pro CI: Jeden boolean pro testy a logy
Výběr mezi Sanitize a RemoveProperties
| Otázka | Upřednostnit Sanitize | Upřednostnit RemoveProperties |
|---|---|---|
| Soubor opouští společnost? | Ano | Jen pokud musí přežít popisná pole |
| Vyhledávání v archivu potřebuje Title? | Ne | Ano |
| Politika říká „žádní lidé v metadatech“? | Kterákoliv, pak ověřit | Ano, s predikátem zaměřeným na osoby |
| Operátor chce jedno tlačítko? | Ano | Zabalit za pojmenovanou trasu |
strip-pdf-metadata-dotnet je spustitelná .NET ukázka, která propojí všechny čtyři kroky proti Resources/contract-with-metadata.pdf, takže můžete vidět inspect, sanitize, selektivní odstraňování a verify v jednom běhu konzole.
Časté chyby
- Spoléhat se jen na čistič prohlížeče: XMP často přežije.
- Ověřovat názvy Creator/Producer: Otisky engine po
Savezpůsobují falešná selhání. - Jeden predikát navždy: Revize názvů identifikačních polí, když se objeví noví producenti.
- Přeskočit nastavení licence pro Save: Evaluační režim může blokovat neomezené zápisy; nastavte
LIC_METADATA_VALIDpro plné testy pipeline. - Přeskočit inspect: Bez předchozího výpisu nevíte, zda Sanitize odstranilo 7 polí nebo 0, protože soubor byl už čistý.
Na ukázkovém souboru contract-with-metadata.pdf licencovaný běh typicky vypíše Author a Keywords při inspect, počet odstraněných položek při Sanitize kolem 7 a True z Author‑orientovaného verify. Selektivní odstranění autora vypíše menší počet (kolem 3), zatímco Title a Subject zůstanou viditelné při druhém inspect.
Další zdroje
- Případ použití: Sanitize vs odstranění autora pro PDF metadata (.NET)
- Dokumentace: odstranit všechny detekované balíčky metadat
- Dokumentace: odstranit konkrétní vlastnosti metadat
- GitHub: strip-pdf-metadata-dotnet
- API reference
Závěr
Čištění PDF metadat v .NET není jen jedno API volání s nejasným názvem. Zvolte Sanitize() pro odchozí výmaz, RemoveProperties když Title a Subject musí zůstat, a vždy po Save inspect a verify pole typu Author. Klonujte ukázkový repozitář, spusťte jej na připraveném PDF kontraktu a poté přeneste stejné metody do své služby nahrávání s logováním počtů odstraněných položek.