#!/usr/bin/python
# -*- coding: utf8 -*-
#
# XFDF-Template aus einer Feldnamensliste generieren
#
# 24.9.2013
import sys, os
# die Feldnamensliste einlesen
felder = open(sys.argv[1]).readlines()
# den Namen der PDF-Datei ermitteln, zu der die XFDF-Datei gehören soll
pdf_dateiname = sys.argv[2]
assert pdf_dateiname.endswith('.pdf')
# PDF-IDs ermitteln
pdf_id0 = pdf_id1 = None
pdf_id0_tag = 'PdfID0: '
pdf_id1_tag = 'PdfID1: '
# wir suchen in der Ausgabe von "pdtfk ... dump_data_utf8" nach den beiden
# PDF-Tags pdf_id0_tag und pdf_id1_tag und entnehmen die Werte in
# Großschreibung
for line in os.popen('pdftk %s dump_data_utf8' % pdf_dateiname):
if line.startswith(pdf_id0_tag):
pdf_id0 = line.strip().replace(pdf_id0_tag, '').upper()
elif line.startswith(pdf_id1_tag):
pdf_id1 = line.strip().replace(pdf_id1_tag, '').upper()
break
# die zugehörige XFDF-Datei ermitteln und zum Schreiben öffnen
xfdf_file = open(pdf_dateiname[:-3] + 'xfdf', 'w')
# Muster für ein einzelnes XFDF-Feld
feld_muster = '''
%s
'''
# die Standardausgabe auf unser XFDF-File umlenken
sys.stdout = xfdf_file
# Ausgabe des XML-Kopfes
print '''
''' % pdf_dateiname
# Ausgabe der Felder; dazu gehen wir zeilenweise die Feldnamensliste durch
for line in felder:
if line.startswith('#'):
# Kommentare übergehen
continue
# die Zeile in den PDF-Feldnamen und dessen Inhalt zerlegen
pdf_feld_name, inhalt = line.strip().split('|')
# das zugehörige XML-Konstrukt ausgeben
print feld_muster % (pdf_feld_name, inhalt)
# Ausgabe des XML-Fußes
print ''
if pdf_id0 and pdf_id1:
# wenn wir beide PDF-IDs ermitteln konnten, geben wir sie aus
print '' % (pdf_id0, pdf_id1)
print ''