23.2.2016

Odkazy

Úvod

Petr Bravenec vám nedávno představil aplikaci GeoSign, jejímž cílem je usnadnit českým zeměměřičům práci. GeoSign potřebuje pro svůj chod manipulovat s dokumenty v PDF. Tuto manipulaci pro GeoSign obstarává prográmek PDF Manipulaction Utility (PDFMU), který jsme pro tento účel vytvořili a který dáváme k dispozici volně ke stažení i se zdrojovým kódem pod licencí AGPL.

Co PDFMU umí a jak se používá?

Program PDFMU umí provádět různé operace s dokumenty v PDF, například přidávat digitální podpisy nebo přílohy. Používá se přes příkazovou řádku, takže je vhodný k dávkovému zpracování dokumentů. Ve Windows se standardně jmenuje pdfmu (celým názvem pdfmu.exe) a toto označení budu používat v následujících sekcích.

Protože je implementovaný v Javě, potřebuje pro správné fungování, aby bylo nainstalované JRE verze 7 nebo vyšší.

PDFMU umí s PDF dokumentem provést následující operace:

Následují popisy jednotlivých operací.

update-version

Každý PDF dokument má v sobě uloženou informaci o verzi PDF, kterým je kódován. Dosud vydané verze PDF jsou zpětně kompatibilní, takže změnu verze na vyšší hodnotu lze provést bez narušení konzistence dokumentu. Změna verze dokumentu pomocí PDFMU ale zneplatní všechny digitální podpisy připojené k tomuto dokumentu, takže je vhodné provést ji před případným podpisem.

Příklad použití
  • pdfmu update-version dokument.pdf --force --version=1.6: změní verzi dokumentu dokument.pdf na hodnotu 1.6

PDFMU podporuje verze PDF 1.2 až 1.7.

update-properties

PDF dokumenty obsahují tzv. vlastnosti. Každá vlastnost uložená v dokumentu má jedinečný název a hodnotu. PDFMU umožňuje nastavovat a odebírat libovolné vlastnosti PDF dokumentu s výjimkou vlastností Producer a ModDate.

Některé vlastnosti mají zvláštní podporu ve specifikaci PDF; takové vlastnosti nazýváme standardní. Pro nastavování standardních vlastností nabízí operace pdfmu update-properties zvláštní volby:

Název Popis Volba PDFMU
Interní Český
Title Titul --Title
Subject Předmět --Subject
Author Autor Jméno osoby, která vytvořila dokument. --Author
Keywords Klíčová slova --Keywords
Creator Aplikace Název produktu, který vytvořil dokument v původním formátu. --Creator
Producer Tvůrce PDF Název produktu, který konvertoval dokument z původního formátu do PDF.
CreationDate Vytvořený Datum a čas, kdy byl dokument vytvořen. --CreationDate
ModDate Upravený Datum a čas, kdy byl dokument naposledy upraven.
Trapped Prošel dokument trappingem? --Trapped

Vlastnosti Producer ("Tvůrce PDF") a ModDate (datum a čas poslední úpravy) PDFMU nastavuje automaticky bez možnosti zásahu ze strany uživatele.

Příklady použití
  • pdfmu update-properties dokument.pdf --force --Title="Muj dokument": v dokumentu dokument.pdf nastaví vlastnost Title na hodnotu "Muj dokument"
  • pdfmu update-properties dokument.pdf --force --set "majitel dokumentu" "Tomas Volny": v dokumentu dokument.pdf nastaví vlastnost "majitel dokumentu" na hodnotu "Tomas Volny"
  • pdfmu update-properties dokument.pdf --force --clear "majitel dokumentu": z dokumentu dokument.pdf odstraní vlastnost "majitel dokumentu"

attach

PDF dokument může obsahovat libovolné další soubory jako přílohy. Každá příloha má název a popis. Volání pdfmu attach umožňuje přiložit k PDF dokumentu jeden soubor a nastavit název přílohy (volbou --rename) a její popis (volbou --description).

Příklady použití
  • pdfmu attach dokument.pdf priloha.txt --force: k dokumentu dokument.pdf přiloží soubor priloha.txt (pod názvem priloha.txt)
  • pdfmu attach dokument.pdf priloha.txt --force --rename="muj soubor.txt" --description="Dulezite informace": k dokumentu dokument.pdf přiloží soubor priloha.txt pod názvem muj soubor.txt a s popisem "Dulezite informace"

sign

Přidávání digitálních podpisů je jak implementačně, tak uživatelsky nejsložitější z operací PDFMU. Pro lepší porozumění digitálním podpisům v PDF dokumentech doporučuji knihu Digital signatures for PDF documents. V následujících odstavcích se pokusím stručně shrnout základní poznatky o digitálních podpisech v PDF.

Digitální podpis souboru je informace, která je svázaná s obsahem tohoto souboru a s identitou člověka nebo instituce, která podpis vytvořila. Podpis umožňuje ověřit, zda se soubor nezměnil od okamžiku podpisu a zda byl soubor skutečně podepsán tím, kdo se vydává za podepisujícího. Podpisem se obvykle potvrzuje autorství nebo ověření dokumentu.

Časové razítko souboru je informace, která umožňuje ověřit, že tento soubor existoval v současné podobě už v době vzniku tohoto razítka.

Časová autorita je server, který poskytuje časová razítka. Pokud tomuto serveru důvěřujeme, můžeme věřit i platným časovým razítkům vydaným tímto serverem.

Interní digitální podpis (resp. časové razítko) souboru je digitální podpis (resp. časové razítko) vložený přímo do podepisovaného souboru.

PDF umožňuje, aby v dokumentu byl vložen jeden nebo více interních digitálních podpisů. Součástí podpisu je vždy čas podepsání. Pokud je čas podepsání uložen formou časového razítka, lze ověřit pravdivost tohoto času.

Příklady použití
  • pdfmu sign dokument.pdf --force --keystore-type=pkcs12 --keystore=cert.p12: podepíše dokument dokument.pdf pomocí soukromého klíče a certifikátu uložených v souboru cert.p12
  • pdfmu sign dokument.pdf --force --keystore-type=pkcs12 --keystore=cert.p12 --tsa-url="http://example.com/tsa" --tsa-username=jmeno --tsa-password=heslo: jako předchozí, ale navíc připojí k podpisu časové razítko od časové autority http://example.com/tsa, ke které se přihlásí jménem jmeno a heslem heslo
  • pdfmu sign dokument.pdf --force --keystore-type=Windows-MY --key-alias=franta: podepíše dokument dokument.pdf pomocí soukromého klíče a certifikátu uložených v systémovém úložišti certifikátů Windows pod popisným názvem franta

inspect

Operace inspect vypíše PDF verzi, vlastnosti a digitální podpisy dokumentu, tedy všechny informace, do kterých je možné zasahovat pomocí operací update-version, update-properties a sign.

Příklad použití
  • pdfmu inspect dokument.pdf: vypíše informace o dokumentu dokument.pdf

Další volby

Kromě voleb uvedených v příkladech výše nabízí PDFMU mnoho dalších, například vypisování výstupu ve formátu JSON nebo přihlašování k časové autoritě pomocí certifikátu. Všechny podporované volby můžete vypsat pomocí volby --help. Volání pdfmu --help tedy vypíše základní volby a například volání pdfmu sign --help vypíše volby specifické pro operaci sign.

Chcete si PDFMU vyzkoušet?

Potom zamiřte do repozitáře na GitHubu, stáhněte si zdrojový kód a program sestavte pomocí Maven. Podrobnější instrukce v angličtině najdete na stránce README.

Implementace

Program PDFMU je vytvořen v programovacím jazyce Java. Základ každé z podporovaných PDF operací je implementován v knihovně iText; PDFMU v podstatě vystavuje část API knihovny iText v podobě použitelné prostřednictvím příkazové řádky.

PDFMU dále používá knihovnu Argparse4j pro parsování argumentů z příkazové řádky a knihovnu Jackson pro formátování výstupu do formátu JSON.

Zdrojový kód PDFMU je veřejně dostupný v repozitáři na GitHubu.

Hobrasoft s.r.o. | Kontakt