author | robin |
Tue, 19 Nov 2013 13:50:34 +0000 | |
branch | py33 |
changeset 3794 | 398ea04239b5 |
parent 3721 | 0c93dd8ff567 |
child 3800 | e8547b00eb59 |
permissions | -rw-r--r-- |
3032 | 1 |
__doc__="""helper for importing pdf structures into a ReportLab generated document |
1660
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
2 |
""" |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
3 |
from reportlab.pdfbase.pdfdoc import format |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
4 |
class PDFPattern: |
3317
7cc62d990f32
pdfform/pdfpattern.py: add __PDFObject__ to classes (patch from Arnaud Fontaine <arnaud@andesi.org>
rgbecker
parents:
3032
diff
changeset
|
5 |
__PDFObject__ = True |
1660
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
6 |
__RefOnly__ = 1 |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
7 |
def __init__(self, pattern_sequence, **keywordargs): |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
8 |
""" |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
9 |
Description of a kind of PDF object using a pattern. |
1683 | 10 |
|
1660
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
11 |
Pattern sequence should contain strings or singletons of form [string]. |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
12 |
Strings are literal strings to be used in the object. |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
13 |
Singletons are names of keyword arguments to include. |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
14 |
Keyword arguments can be non-instances which are substituted directly in string conversion, |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
15 |
or they can be object instances in which case they should be pdfdoc.* style |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
16 |
objects with a x.format(doc) method. |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
17 |
Keyword arguments may be set on initialization or subsequently using __setitem__, before format. |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
18 |
"constant object" instances can also be inserted in the patterns. |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
19 |
""" |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
20 |
self.pattern = pattern_sequence |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
21 |
self.arguments = keywordargs |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
22 |
from types import StringType, InstanceType |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
23 |
toptypes = (StringType, InstanceType) |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
24 |
for x in pattern_sequence: |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
25 |
if type(x) not in toptypes: |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
26 |
if len(x)!=1: |
3721 | 27 |
raise ValueError("sequence elts must be strings or singletons containing strings: "+repr(x)) |
1660
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
28 |
if type(x[0]) is not StringType: |
3721 | 29 |
raise ValueError("Singletons must contain strings or instances only: "+repr(x[0])) |
1660
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
30 |
def __setitem__(self, item, value): |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
31 |
self.arguments[item] = value |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
32 |
def __getitem__(self, item): |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
33 |
return self.arguments[item] |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
34 |
def format(self, document): |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
35 |
L = [] |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
36 |
arguments = self.arguments |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
37 |
from types import StringType, InstanceType |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
38 |
for x in self.pattern: |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
39 |
tx = type(x) |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
40 |
if tx is StringType: |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
41 |
L.append(x) |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
42 |
elif tx is InstanceType: |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
43 |
L.append( x.format(document) ) |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
44 |
else: |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
45 |
name = x[0] |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
46 |
value = arguments.get(name, None) |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
47 |
if value is None: |
3721 | 48 |
raise ValueError("%s value not defined" % repr(name)) |
1660
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
49 |
if type(value) is InstanceType: |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
50 |
#L.append( value.format(document) ) |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
51 |
L.append(format(value, document)) |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
52 |
else: |
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
53 |
L.append( str(value) ) |
3794 | 54 |
return "".join(L) |
1660
c93476060b9d
simple support for acrobat forms in reportlab documents. Minor optimizations to metrics
aaron_watters
parents:
diff
changeset
|
55 |
|
1683 | 56 |