1 # -*- coding: utf-8 -*-
2 ##############################################################################
4 # OpenERP, Open Source Management Solution
5 # Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
7 # This program is free software: you can redistribute it and/or modify
8 # it under the terms of the GNU Affero General Public License as
9 # published by the Free Software Foundation, either version 3 of the
10 # License, or (at your option) any later version.
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU Affero General Public License for more details.
17 # You should have received a copy of the GNU Affero General Public License
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
20 ##############################################################################
22 """ Copyright (c) 2003-2007 LOGILAB S.A. (Paris, FRANCE).
23 http://www.logilab.fr/ -- mailto:contact@logilab.fr
25 manipulate pdf and fdf files. pdftk recommended.
27 Notes regarding pdftk, pdf forms and fdf files (form definition file)
28 fields names can be extracted with:
29 pdftk orig.pdf generate_fdf output truc.fdf
31 pdftk orig.pdf fill_form test.fdf output result.pdf [flatten]
32 without flatten, one could further edit the resulting form.
33 with flatten, everything is turned into text.
61 def output_field( f ):
62 return "\xfe\xff" + "".join( [ "\x00"+c for c in f ] )
64 def extract_keys(lines):
67 if line.startswith('/V'):
68 pass #print 'value',line
69 elif line.startswith('/T'):
71 key = ''.join(key.split('\x00'))
75 def write_field(out, key, value):
78 out.write("/V (%s)\n" %value)
81 out.write("/T (%s)\n" % output_field(key) )
84 def write_fields(out, fields):
88 write_field(out, key, value)
89 # write_field(out, key+"a", value) # pour copie-carbone sur autres pages
92 def extract_keys_from_pdf(filename):
93 # what about using 'pdftk filename dump_data_fields' and parsing the output ?
94 os.system('pdftk %s generate_fdf output /tmp/toto.fdf' % filename)
95 lines = file('/tmp/toto.fdf').readlines()
96 return extract_keys(lines)
99 def fill_pdf(infile, outfile, fields):
100 write_fields(file('/tmp/toto.fdf', 'w'), fields)
101 os.system('pdftk %s fill_form /tmp/toto.fdf output %s flatten' % (infile, outfile))
103 def testfill_pdf(infile, outfile):
104 keys = extract_keys_from_pdf(infile)
107 fields.append( (key, key, '') )
108 fill_pdf(infile, outfile, fields)
111 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: