23.2.2016
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.
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:
update-version
: nastavení PDF verzeupdate-properties
: nastavení vlastnostíattach
: připojení souboru formou přílohysign
: připojení digitálního podpisuinspect
: zobrazení PDF verze, vlastností a digitálních podpisů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.
pdfmu update-version dokument.pdf --force --version=1.6
:
změní verzi dokumentu dokument.pdf
na hodnotu 1.6PDFMU 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.
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
).
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.
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
.
pdfmu inspect dokument.pdf
: vypíše informace o dokumentu dokument.pdf
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
.
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.
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.