mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-04-19 00:21:47 +00:00
Added printing requirements
This commit is contained in:
8
z3c/__init__.py
Normal file
8
z3c/__init__.py
Normal file
@@ -0,0 +1,8 @@
|
||||
# this is a namespace package
|
||||
try:
|
||||
import pkg_resources
|
||||
pkg_resources.declare_namespace(__name__)
|
||||
except ImportError:
|
||||
import pkgutil
|
||||
__path__ = pkgutil.extend_path(__path__, __name__)
|
||||
|
||||
18
z3c/rml/README.txt
Normal file
18
z3c/rml/README.txt
Normal file
@@ -0,0 +1,18 @@
|
||||
=========================
|
||||
Reportlab Markup Language
|
||||
=========================
|
||||
|
||||
This package is a free implementation of the RML markup language developed by
|
||||
Reportlab. Unfortunately, full compliance cannot be immediately verified,
|
||||
since the RML User Guide is ambiguous, incomplete and even incorrect. This
|
||||
package can also not support the commercial extensions to Reportlab.
|
||||
|
||||
In the course of implementing the specification, I made already some
|
||||
improvements for various tags and added others fully. I also tried hard to
|
||||
test all features. If you have any new sample RML files that you would like to
|
||||
share, please check them in.
|
||||
|
||||
Why reimplement RML? The other free implementation of RML tinyRML is
|
||||
unfortunately pretty messy code and hard to debug. It makes it also hard to
|
||||
add additional tags. However, much thanks goes to their authors, since they
|
||||
have solved some of the very tricky issues.
|
||||
7
z3c/rml/__init__.py
Normal file
7
z3c/rml/__init__.py
Normal file
@@ -0,0 +1,7 @@
|
||||
# Hook up our custom paragraph parser.
|
||||
import z3c.rml.paraparser
|
||||
import z3c.rml.rlfix
|
||||
|
||||
|
||||
from reportlab.lib.styles import getSampleStyleSheet
|
||||
SampleStyleSheet = getSampleStyleSheet()
|
||||
607
z3c/rml/attr.py
Normal file
607
z3c/rml/attr.py
Normal file
@@ -0,0 +1,607 @@
|
||||
# #############################################################################
|
||||
#
|
||||
# Copyright (c) 2007 Zope Foundation and Contributors.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# This software is subject to the provisions of the Zope Public License,
|
||||
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
|
||||
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
|
||||
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
# #############################################################################
|
||||
"""RML Attribute Implementation
|
||||
"""
|
||||
import cStringIO
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
import reportlab.graphics.widgets.markers
|
||||
import reportlab.lib.colors
|
||||
import reportlab.lib.pagesizes
|
||||
import reportlab.lib.styles
|
||||
import reportlab.lib.units
|
||||
import reportlab.lib.utils
|
||||
import urllib
|
||||
import zope.interface
|
||||
import zope.schema
|
||||
from lxml import etree
|
||||
|
||||
from z3c.rml import interfaces, SampleStyleSheet
|
||||
|
||||
MISSING = object()
|
||||
logger = logging.getLogger("z3c.rml")
|
||||
|
||||
|
||||
def getFileInfo(directive):
|
||||
root = directive
|
||||
while root.parent:
|
||||
root = root.parent
|
||||
return '(file %s, line %i)' % (
|
||||
root.filename, directive.element.sourceline)
|
||||
|
||||
|
||||
def getManager(context, interface=None):
|
||||
if interface is None:
|
||||
# Avoid circular imports
|
||||
from z3c.rml import interfaces
|
||||
|
||||
interface = interfaces.IManager
|
||||
# Walk up the path until the manager is found
|
||||
# Using interface.providedBy is much slower because it does many more checks
|
||||
while (
|
||||
context is not None and
|
||||
not interface in context.__class__.__dict__.get('__implemented__', {})
|
||||
):
|
||||
context = context.parent
|
||||
# If no manager was found, raise an error
|
||||
if context is None:
|
||||
raise ValueError('The manager could not be found.')
|
||||
return context
|
||||
|
||||
|
||||
def deprecated(oldName, attr, reason):
|
||||
zope.interface.directlyProvides(attr, interfaces.IDeprecated)
|
||||
attr.deprecatedName = oldName
|
||||
attr.deprecatedReason = reason
|
||||
return attr
|
||||
|
||||
|
||||
class RMLAttribute(zope.schema.Field):
|
||||
"""An attribute of the RML directive."""
|
||||
|
||||
missing_value = MISSING
|
||||
default = MISSING
|
||||
|
||||
def fromUnicode(self, ustr):
|
||||
"""See zope.schema.interfaces.IField"""
|
||||
if self.context is None:
|
||||
raise ValueError('Attribute not bound to a context.')
|
||||
return super(RMLAttribute, self).fromUnicode(unicode(ustr))
|
||||
|
||||
def get(self):
|
||||
"""See zope.schema.interfaces.IField"""
|
||||
# If the attribute has a deprecated partner and the deprecated name
|
||||
# has been specified, use it.
|
||||
if (interfaces.IDeprecated.providedBy(self) and
|
||||
self.deprecatedName in self.context.element.attrib):
|
||||
name = self.deprecatedName
|
||||
logger.warn(
|
||||
u'Deprecated attribute "%s": %s %s' % (
|
||||
name, self.deprecatedReason, getFileInfo(self.context)))
|
||||
else:
|
||||
name = self.__name__
|
||||
# Extract the value.
|
||||
value = self.context.element.get(name, self.missing_value)
|
||||
# Get the correct default value.
|
||||
if value is self.missing_value:
|
||||
if self.default is not None:
|
||||
return self.default
|
||||
return self.missing_value
|
||||
return self.fromUnicode(value)
|
||||
|
||||
|
||||
class BaseChoice(RMLAttribute):
|
||||
choices = {}
|
||||
doLower = True
|
||||
|
||||
def fromUnicode(self, value):
|
||||
if self.doLower:
|
||||
value = value.lower()
|
||||
if value in self.choices:
|
||||
return self.choices[value]
|
||||
raise ValueError(
|
||||
'%r not a valid value for attribute "%s". %s' % (
|
||||
value, self.__name__, getFileInfo(self.context)))
|
||||
|
||||
|
||||
class Combination(RMLAttribute):
|
||||
"""A combination of several other attribute types."""
|
||||
|
||||
def __init__(self, value_types=(), *args, **kw):
|
||||
super(Combination, self).__init__(*args, **kw)
|
||||
self.value_types = value_types
|
||||
|
||||
def fromUnicode(self, value):
|
||||
for value_type in self.value_types:
|
||||
bound = value_type.bind(self)
|
||||
try:
|
||||
return bound.fromUnicode(value)
|
||||
except ValueError:
|
||||
pass
|
||||
raise ValueError(
|
||||
'"%s" is not a valid value. %s' % (
|
||||
value, getFileInfo(self.context)))
|
||||
|
||||
|
||||
class String(RMLAttribute, zope.schema.Bytes):
|
||||
"""A simple Bytes string."""
|
||||
|
||||
|
||||
class Text(RMLAttribute, zope.schema.Text):
|
||||
"""A simple unicode string."""
|
||||
|
||||
|
||||
class Integer(RMLAttribute, zope.schema.Int):
|
||||
"""An integer. A minimum and maximum value can be specified."""
|
||||
# By making min and max simple attributes, we avoid some validation
|
||||
# problems.
|
||||
min = None
|
||||
max = None
|
||||
|
||||
|
||||
class Float(RMLAttribute, zope.schema.Float):
|
||||
"""An flaoting point. A minimum and maximum value can be specified."""
|
||||
# By making min and max simple attributes, we avoid some validation
|
||||
# problems.
|
||||
min = None
|
||||
max = None
|
||||
|
||||
|
||||
class StringOrInt(RMLAttribute):
|
||||
"""A (bytes) string or an integer."""
|
||||
|
||||
def fromUnicode(self, value):
|
||||
try:
|
||||
return int(value)
|
||||
except ValueError:
|
||||
return str(value)
|
||||
|
||||
|
||||
class Sequence(RMLAttribute, zope.schema._field.AbstractCollection):
|
||||
"""A list of values of a specified type."""
|
||||
|
||||
splitre = re.compile('[ \t\n,;]*')
|
||||
|
||||
def __init__(self, splitre=None, *args, **kw):
|
||||
super(Sequence, self).__init__(*args, **kw)
|
||||
if splitre is not None:
|
||||
self.splitre = splitre
|
||||
|
||||
def fromUnicode(self, ustr):
|
||||
if ustr.startswith('(') and ustr.endswith(')'):
|
||||
ustr = ustr[1:-1]
|
||||
ustr = ustr.strip()
|
||||
raw_values = self.splitre.split(ustr)
|
||||
result = [self.value_type.bind(self.context).fromUnicode(raw.strip())
|
||||
for raw in raw_values]
|
||||
if ((self.min_length is not None and len(result) < self.min_length) and
|
||||
(self.max_length is not None and len(result) > self.max_length)):
|
||||
raise ValueError(
|
||||
'Length of sequence must be at least %s and at most %i. %s' % (
|
||||
self.min_length, self.max_length,
|
||||
getFileInfo(self.context)))
|
||||
return result
|
||||
|
||||
|
||||
class IntegerSequence(Sequence):
|
||||
"""A sequence of integers."""
|
||||
|
||||
def fromUnicode(self, ustr):
|
||||
ustr = ustr.strip()
|
||||
pieces = self.splitre.split(ustr)
|
||||
numbers = set([])
|
||||
for piece in pieces:
|
||||
# Ignore empty pieces.
|
||||
if not piece:
|
||||
continue
|
||||
# The piece is a range.
|
||||
if '-' in piece:
|
||||
start, end = piece.split('-')
|
||||
# Make range lower and upper bound inclusive.
|
||||
numbers.update(range(int(start), int(end) + 1))
|
||||
continue
|
||||
# The piece is just a number
|
||||
numbers.add(int(piece))
|
||||
return list(numbers)
|
||||
|
||||
|
||||
class Choice(BaseChoice):
|
||||
"""A choice of several values. The values are always case-insensitive."""
|
||||
|
||||
def __init__(self, choices=None, doLower=True, *args, **kw):
|
||||
super(Choice, self).__init__(*args, **kw)
|
||||
if isinstance(choices, (tuple, list)):
|
||||
choices = dict(
|
||||
[(val.lower() if doLower else val, val) for val in choices])
|
||||
else:
|
||||
choices = dict(
|
||||
[(key.lower() if doLower else key, val)
|
||||
for key, val in choices.items()])
|
||||
self.choices = choices
|
||||
self.doLower = doLower
|
||||
|
||||
|
||||
class Boolean(BaseChoice):
|
||||
'''A boolean value.
|
||||
|
||||
For true the values "true", "yes", and "1" are allowed. For false, the
|
||||
values "false", "no", "1" are allowed.
|
||||
'''
|
||||
choices = {'true': True, 'false': False,
|
||||
'yes': True, 'no': False,
|
||||
'1': True, '0': False,
|
||||
}
|
||||
|
||||
|
||||
class TextBoolean(BaseChoice):
|
||||
'''A boolean value as text.
|
||||
|
||||
ReportLab sometimes exposes low-level APIs, so we have to provide values
|
||||
that are directly inserted into the PDF.
|
||||
|
||||
For "true" the values "true", "yes", and "1" are allowed. For "false", the
|
||||
values "false", "no", "1" are allowed.
|
||||
'''
|
||||
choices = {'true': 'true', 'false': 'false',
|
||||
'yes': 'true', 'no': 'false',
|
||||
'1': 'true', '0': 'false',
|
||||
}
|
||||
|
||||
|
||||
class BooleanWithDefault(Boolean):
|
||||
'''This is a boolean field that can also receive the value "default".'''
|
||||
choices = Boolean.choices.copy()
|
||||
choices.update({'default': None})
|
||||
|
||||
|
||||
class Measurement(RMLAttribute):
|
||||
'''This field represents a length value.
|
||||
|
||||
The units "in" (inch), "cm", "mm", and "pt" are allowed. If no units are
|
||||
specified, the value is given in points/pixels.
|
||||
'''
|
||||
|
||||
def __init__(self, allowPercentage=False, allowStar=False, *args, **kw):
|
||||
super(Measurement, self).__init__(*args, **kw)
|
||||
self.allowPercentage = allowPercentage
|
||||
self.allowStar = allowStar
|
||||
|
||||
units = [
|
||||
(re.compile('^(-?[0-9\.]+)\s*in$'), reportlab.lib.units.inch),
|
||||
(re.compile('^(-?[0-9\.]+)\s*cm$'), reportlab.lib.units.cm),
|
||||
(re.compile('^(-?[0-9\.]+)\s*mm$'), reportlab.lib.units.mm),
|
||||
(re.compile('^(-?[0-9\.]+)\s*pt$'), 1),
|
||||
(re.compile('^(-?[0-9\.]+)\s*$'), 1)
|
||||
]
|
||||
|
||||
allowPercentage = False
|
||||
allowStar = False
|
||||
|
||||
def fromUnicode(self, value):
|
||||
if value == 'None':
|
||||
return None
|
||||
if value == '*' and self.allowStar:
|
||||
return value
|
||||
if value.endswith('%') and self.allowPercentage:
|
||||
return value
|
||||
|
||||
for unit in self.units:
|
||||
res = unit[0].search(value, 0)
|
||||
if res:
|
||||
return unit[1] * float(res.group(1))
|
||||
raise ValueError(
|
||||
'The value %r is not a valid measurement. %s' % (
|
||||
value, getFileInfo(self.context)))
|
||||
|
||||
|
||||
class File(Text):
|
||||
"""This field will return a file object.
|
||||
|
||||
The value itself can eith be be a relative or absolute path. Additionally
|
||||
the following syntax is supported: [path.to.python.mpackage]/path/to/file
|
||||
"""
|
||||
open = staticmethod(urllib.urlopen)
|
||||
packageExtract = re.compile('^\[([0-9A-z_.]*)\]/(.*)$')
|
||||
|
||||
doNotOpen = False
|
||||
|
||||
def __init__(self, doNotOpen=False, *args, **kw):
|
||||
super(File, self).__init__(*args, **kw)
|
||||
self.doNotOpen = doNotOpen
|
||||
|
||||
def fromUnicode(self, value):
|
||||
# Check whether the value is of the form:
|
||||
# [<module.path>]/rel/path/image.gif"
|
||||
if value.startswith('['):
|
||||
result = self.packageExtract.match(value)
|
||||
if result is None:
|
||||
raise ValueError(
|
||||
'The package-path-pair you specified was incorrect. %s' % (
|
||||
getFileInfo(self.context)))
|
||||
modulepath, path = result.groups()
|
||||
module = __import__(modulepath, {}, {}, (modulepath))
|
||||
value = os.path.join(os.path.dirname(module.__file__), path)
|
||||
# If there is a drive name in the path, then we want a local file to
|
||||
# be opened. This is only interesting for Windows of course.
|
||||
if os.path.splitdrive(value)[0]:
|
||||
value = 'file:///' + value
|
||||
# If the file is not to be opened, simply return the path.
|
||||
if self.doNotOpen:
|
||||
return value
|
||||
# Open/Download the file
|
||||
fileObj = self.open(value)
|
||||
sio = cStringIO.StringIO(fileObj.read())
|
||||
fileObj.close()
|
||||
sio.seek(0)
|
||||
return sio
|
||||
|
||||
|
||||
class Image(File):
|
||||
"""Similar to the file File attribute, except that an image is internally
|
||||
expected."""
|
||||
|
||||
def __init__(self, onlyOpen=False, *args, **kw):
|
||||
super(Image, self).__init__(*args, **kw)
|
||||
self.onlyOpen = onlyOpen
|
||||
|
||||
def fromUnicode(self, value):
|
||||
if value.lower().endswith('.svg') or value.lower().endswith('.svgz'):
|
||||
return self._load_svg(value)
|
||||
fileObj = super(Image, self).fromUnicode(value)
|
||||
if self.onlyOpen:
|
||||
return fileObj
|
||||
return reportlab.lib.utils.ImageReader(fileObj)
|
||||
|
||||
def _load_svg(self, value):
|
||||
manager = getManager(self.context)
|
||||
|
||||
width = self.context.element.get('width')
|
||||
if width is not None:
|
||||
width = Measurement().fromUnicode(width)
|
||||
height = self.context.element.get('height')
|
||||
if height is not None:
|
||||
height = Measurement().fromUnicode(height)
|
||||
preserve = self.context.element.get('preserveAspectRatio')
|
||||
if preserve is not None:
|
||||
preserve = Boolean().fromUnicode(preserve)
|
||||
|
||||
cache_key = '%s-%sx%s-%s' % (value, width, height, preserve)
|
||||
if cache_key in manager.svgs:
|
||||
return manager.svgs[cache_key]
|
||||
|
||||
from gzip import GzipFile
|
||||
from reportlab.graphics import renderPM
|
||||
from svg2rlg import Renderer
|
||||
from xml.etree import cElementTree
|
||||
|
||||
fileObj = super(Image, self).fromUnicode(value)
|
||||
svg = fileObj.getvalue()
|
||||
if svg[:2] == '\037\213':
|
||||
svg = GzipFile(fileobj=fileObj).read()
|
||||
svg = cElementTree.fromstring(svg)
|
||||
svg = Renderer(value).render(svg)
|
||||
|
||||
if preserve:
|
||||
if width is not None or height is not None:
|
||||
if width is not None and height is None:
|
||||
height = svg.height * width / svg.width
|
||||
elif height is not None and width is None:
|
||||
width = svg.width * height / svg.height
|
||||
elif float(width) / height > float(svg.width) / svg.height:
|
||||
width = svg.width * height / svg.height
|
||||
else:
|
||||
height = svg.height * width / svg.width
|
||||
else:
|
||||
if width is None:
|
||||
width = svg.width
|
||||
if height is None:
|
||||
height = svg.height
|
||||
|
||||
svg.scale(width / svg.width, height / svg.height)
|
||||
svg.width = width
|
||||
svg.height = height
|
||||
|
||||
svg = renderPM.drawToPIL(svg, dpi=300)
|
||||
svg = reportlab.lib.utils.ImageReader(svg)
|
||||
svg.read = True # A hack to get ImageReader through as an open Image
|
||||
# when used with imageAndFlowables
|
||||
manager.svgs[cache_key] = svg
|
||||
return svg
|
||||
|
||||
|
||||
class Color(RMLAttribute):
|
||||
"""Requires the input of a color. There are several supported formats.
|
||||
|
||||
Three values in a row are interpreted as RGB value ranging from 0-255.
|
||||
A string is interpreted as a name to a pre-defined color.
|
||||
The 'CMYK()' wrapper around four values represents a CMYK color
|
||||
specification.
|
||||
"""
|
||||
|
||||
def __init__(self, acceptNone=False, *args, **kw):
|
||||
super(Color, self).__init__(*args, **kw)
|
||||
self.acceptNone = acceptNone
|
||||
|
||||
def fromUnicode(self, value):
|
||||
if self.acceptNone and value.lower() == 'none':
|
||||
return None
|
||||
manager = getManager(self.context)
|
||||
|
||||
if value.startswith('rml:'):
|
||||
value = manager.get_name(value[4:], '#000000')
|
||||
|
||||
if value in manager.colors:
|
||||
return manager.colors[value]
|
||||
try:
|
||||
return reportlab.lib.colors.toColor(value)
|
||||
# Bare except, since code raises string exception: Invalid color value
|
||||
except:
|
||||
raise ValueError(
|
||||
'The color specification "%s" is not valid. %s' % (
|
||||
value, getFileInfo(self.context)))
|
||||
|
||||
|
||||
def _getStyle(context, value):
|
||||
manager = getManager(context)
|
||||
for styles in (manager.styles, SampleStyleSheet.byName):
|
||||
if value in styles:
|
||||
return styles[value]
|
||||
elif 'style.' + value in styles:
|
||||
return styles['style.' + value]
|
||||
elif value.startswith('style.') and value[6:] in styles:
|
||||
return styles[value[6:]]
|
||||
raise ValueError('Style %r could not be found. %s' % (
|
||||
value, getFileInfo(context)))
|
||||
|
||||
|
||||
class Style(String):
|
||||
"""Requires a valid style to be entered.
|
||||
|
||||
Whether the style is a paragraph, table or box style is irrelevant, except
|
||||
that it has to fit the tag.
|
||||
"""
|
||||
default = SampleStyleSheet.byName['Normal']
|
||||
|
||||
def fromUnicode(self, value):
|
||||
return _getStyle(self.context, value)
|
||||
|
||||
|
||||
class Padding(Sequence):
|
||||
"""This attribute is specific for padding and will produce the proper
|
||||
length of the padding sequence."""
|
||||
|
||||
def __init__(self, *args, **kw):
|
||||
kw.update(dict(value_type=Integer(), min_length=1, max_length=4))
|
||||
super(Padding, self).__init__(*args, **kw)
|
||||
|
||||
def fromUnicode(self, value):
|
||||
seq = super(Padding, self).fromUnicode(value)
|
||||
# pdfgen does not like a single paddign value.
|
||||
if len(seq) == 1:
|
||||
seq.append(seq[0])
|
||||
return seq
|
||||
|
||||
|
||||
class Symbol(Text):
|
||||
"""This attribute should contain the text representation of a symbol to be
|
||||
used."""
|
||||
|
||||
def fromUnicode(self, value):
|
||||
return reportlab.graphics.widgets.markers.makeMarker(value)
|
||||
|
||||
|
||||
class PageSize(RMLAttribute):
|
||||
"""A simple measurement pair that specifies the page size. Optionally you
|
||||
can also specify a the name of a page size, such as A4, letter, or legal.
|
||||
"""
|
||||
|
||||
sizePair = Sequence(value_type=Measurement())
|
||||
words = Sequence(value_type=String())
|
||||
|
||||
def fromUnicode(self, value):
|
||||
# First try to get a pair
|
||||
try:
|
||||
return self.sizePair.bind(self.context).fromUnicode(value)
|
||||
except ValueError:
|
||||
pass
|
||||
# Now we try to lookup a name. The following type of combinations must
|
||||
# work: "Letter" "LETTER" "A4 landscape" "letter portrait"
|
||||
words = self.words.bind(self.context).fromUnicode(value)
|
||||
words = [word.lower() for word in words]
|
||||
# First look for the orientation
|
||||
orienter = None
|
||||
for orientation in ('landscape', 'portrait'):
|
||||
if orientation in words:
|
||||
orienter = getattr(reportlab.lib.pagesizes, orientation)
|
||||
words.remove(orientation)
|
||||
# We must have exactely one value left that matches a paper size
|
||||
pagesize = getattr(reportlab.lib.pagesizes, words[0].upper())
|
||||
# Now do the final touches
|
||||
if orienter:
|
||||
pagesize = orienter(pagesize)
|
||||
return pagesize
|
||||
|
||||
|
||||
class TextNode(RMLAttribute):
|
||||
"""Return the text content of an element."""
|
||||
|
||||
def get(self):
|
||||
if self.context.element.text is None:
|
||||
return u''
|
||||
return unicode(self.context.element.text).strip()
|
||||
|
||||
|
||||
class FirstLevelTextNode(TextNode):
|
||||
"""Gets all the text content of an element without traversing into any
|
||||
child-elements."""
|
||||
|
||||
def get(self):
|
||||
text = self.context.element.text or u''
|
||||
for child in self.context.element.getchildren():
|
||||
text += child.tail or u''
|
||||
return text.strip()
|
||||
|
||||
|
||||
class TextNodeSequence(Sequence, TextNode):
|
||||
"""A sequence of values retrieved from the element's content."""
|
||||
|
||||
def get(self):
|
||||
return self.fromUnicode(self.context.element.text)
|
||||
|
||||
|
||||
class TextNodeGrid(TextNodeSequence):
|
||||
"""A grid/matrix of values retrieved from the element's content.
|
||||
|
||||
The number of columns is specified for every case, but the number of rows
|
||||
is dynamic.
|
||||
"""
|
||||
|
||||
def __init__(self, columns=None, *args, **kw):
|
||||
super(TextNodeGrid, self).__init__(*args, **kw)
|
||||
self.columns = columns
|
||||
|
||||
def fromUnicode(self, ustr):
|
||||
result = super(TextNodeGrid, self).fromUnicode(ustr)
|
||||
if len(result) % self.columns != 0:
|
||||
raise ValueError(
|
||||
'Number of elements must be divisible by %i. %s' % (
|
||||
self.columns, getFileInfo(self.context)))
|
||||
return [result[i * self.columns:(i + 1) * self.columns]
|
||||
for i in range(len(result) / self.columns)]
|
||||
|
||||
|
||||
class RawXMLContent(RMLAttribute):
|
||||
"""Retrieve the raw content of an element.
|
||||
|
||||
Only some special element substitution will be made.
|
||||
"""
|
||||
|
||||
def __init__(self, *args, **kw):
|
||||
super(RawXMLContent, self).__init__(*args, **kw)
|
||||
|
||||
def get(self):
|
||||
# ReportLab's paragraph parser does not like attributes from other
|
||||
# namespaces; sigh. So we have to improvize.
|
||||
text = etree.tounicode(self.context.element, pretty_print=False)
|
||||
text = text[text.find('>') + 1:text.rfind('<')]
|
||||
return text
|
||||
|
||||
|
||||
class XMLContent(RawXMLContent):
|
||||
"""Same as 'RawXMLContent', except that the whitespace is normalized."""
|
||||
|
||||
def get(self):
|
||||
text = super(XMLContent, self).get()
|
||||
return text.strip().replace('\t', ' ')
|
||||
1012
z3c/rml/canvas.py
Normal file
1012
z3c/rml/canvas.py
Normal file
File diff suppressed because it is too large
Load Diff
1662
z3c/rml/chart.py
Normal file
1662
z3c/rml/chart.py
Normal file
File diff suppressed because it is too large
Load Diff
123
z3c/rml/directive.py
Normal file
123
z3c/rml/directive.py
Normal file
@@ -0,0 +1,123 @@
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2007 Zope Foundation and Contributors.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# This software is subject to the provisions of the Zope Public License,
|
||||
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
|
||||
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
|
||||
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
##############################################################################
|
||||
"""RML Directive Implementation
|
||||
"""
|
||||
import logging
|
||||
import zope.interface
|
||||
import zope.schema
|
||||
|
||||
from lxml import etree
|
||||
from z3c.rml import interfaces
|
||||
from z3c.rml.attr import getManager
|
||||
|
||||
logging.raiseExceptions = False
|
||||
logger = logging.getLogger("z3c.rml")
|
||||
|
||||
ABORT_ON_INVALID_DIRECTIVE = False
|
||||
|
||||
def DeprecatedDirective(iface, reason):
|
||||
zope.interface.directlyProvides(iface, interfaces.IDeprecatedDirective)
|
||||
iface.setTaggedValue('deprecatedReason', reason)
|
||||
return iface
|
||||
|
||||
def getFileInfo(directive, element=None):
|
||||
root = directive
|
||||
while root.parent:
|
||||
root = root.parent
|
||||
if element is None:
|
||||
element = directive.element
|
||||
return '(file %s, line %i)' %(root.filename, element.sourceline)
|
||||
|
||||
class RMLDirective(object):
|
||||
zope.interface.implements(interfaces.IRMLDirective)
|
||||
signature = None
|
||||
factories = {}
|
||||
|
||||
def __init__(self, element, parent):
|
||||
self.element = element
|
||||
self.parent = parent
|
||||
|
||||
def getAttributeValues(self, ignore=None, select=None, attrMapping=None,
|
||||
includeMissing=False, valuesOnly=False):
|
||||
"""See interfaces.IRMLDirective"""
|
||||
manager = getManager(self)
|
||||
cache = '%s.%s' % (self.signature.__module__, self.signature.__name__)
|
||||
if cache in manager.attributesCache:
|
||||
fields = manager.attributesCache[cache]
|
||||
else:
|
||||
fields = []
|
||||
for name, attr in zope.schema.getFieldsInOrder(self.signature):
|
||||
fields.append((name, attr))
|
||||
manager.attributesCache[cache] = fields
|
||||
|
||||
items = []
|
||||
for name, attr in fields:
|
||||
# Only add the attribute to the list, if it is supposed there
|
||||
if ((ignore is None or name not in ignore) and
|
||||
(select is None or name in select)):
|
||||
# Get the value.
|
||||
value = attr.bind(self).get()
|
||||
# If no value was found for a required field, raise a value
|
||||
# error
|
||||
if attr.required and value is attr.missing_value:
|
||||
raise ValueError(
|
||||
'No value for required attribute "%s" '
|
||||
'in directive "%s" %s.' % (
|
||||
name, self.element.tag, getFileInfo(self)))
|
||||
# Only add the entry if the value is not the missing value or
|
||||
# missing values are requested to be included.
|
||||
if value is not attr.missing_value or includeMissing:
|
||||
items.append((name, value))
|
||||
|
||||
# Sort the items based on the section
|
||||
if select is not None:
|
||||
select = list(select)
|
||||
items = sorted(items, key=lambda (n, v): select.index(n))
|
||||
|
||||
# If the attribute name does not match the internal API
|
||||
# name, then convert the name to the internal one
|
||||
if attrMapping:
|
||||
items = [(attrMapping.get(name, name), value)
|
||||
for name, value in items]
|
||||
|
||||
# Sometimes we only want the values without the names
|
||||
if valuesOnly:
|
||||
return [value for name, value in items]
|
||||
|
||||
return items
|
||||
|
||||
def processSubDirectives(self, select=None, ignore=None):
|
||||
# Go through all children of the directive and try to process them.
|
||||
for element in self.element.getchildren():
|
||||
# Ignore all comments
|
||||
if isinstance(element, etree._Comment):
|
||||
continue
|
||||
# Raise an error/log any unknown directive.
|
||||
if element.tag not in self.factories:
|
||||
msg = "Directive %r could not be processed and was " \
|
||||
"ignored. %s" %(element.tag, getFileInfo(self, element))
|
||||
# Record any tags/elements that could not be processed.
|
||||
logger.warn(msg)
|
||||
if ABORT_ON_INVALID_DIRECTIVE:
|
||||
raise ValueError(msg)
|
||||
continue
|
||||
if select is not None and element.tag not in select:
|
||||
continue
|
||||
if ignore is not None and element.tag in ignore:
|
||||
continue
|
||||
directive = self.factories[element.tag](element, self)
|
||||
directive.process()
|
||||
|
||||
def process(self):
|
||||
self.processSubDirectives()
|
||||
169
z3c/rml/doclogic.py
Normal file
169
z3c/rml/doclogic.py
Normal file
@@ -0,0 +1,169 @@
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2012 Zope Foundation and Contributors.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# This software is subject to the provisions of the Zope Public License,
|
||||
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
|
||||
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
|
||||
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
##############################################################################
|
||||
"""``doc*`` directives.
|
||||
"""
|
||||
import reportlab.platypus
|
||||
from z3c.rml import attr, directive, flowable, interfaces, occurence
|
||||
|
||||
class IDocAssign(interfaces.IRMLDirectiveSignature):
|
||||
"""Assign a value to the namesapce."""
|
||||
|
||||
var = attr.String(
|
||||
title=u'Variable Name',
|
||||
description=u'The name under which the value is stored.',
|
||||
required=True)
|
||||
|
||||
expr = attr.String(
|
||||
title=u'Expression',
|
||||
description=u'The expression that creates the value when evaluated.',
|
||||
required=True)
|
||||
|
||||
class DocAssign(flowable.Flowable):
|
||||
signature = IDocAssign
|
||||
klass = reportlab.platypus.flowables.DocAssign
|
||||
|
||||
|
||||
class IDocExec(interfaces.IRMLDirectiveSignature):
|
||||
"""Execute a statement."""
|
||||
|
||||
stmt = attr.String(
|
||||
title=u'Statement',
|
||||
description=u'The statement to be executed.',
|
||||
required=True)
|
||||
|
||||
class DocExec(flowable.Flowable):
|
||||
signature = IDocExec
|
||||
klass = reportlab.platypus.flowables.DocExec
|
||||
|
||||
|
||||
class IDocPara(interfaces.IRMLDirectiveSignature):
|
||||
"""Create a paragraph with the value returned from the expression."""
|
||||
|
||||
expr = attr.String(
|
||||
title=u'Expression',
|
||||
description=u'The expression to be executed.',
|
||||
required=True)
|
||||
|
||||
format = attr.String(
|
||||
title=u'Format',
|
||||
description=u'The format used to render the expression value.',
|
||||
required=False)
|
||||
|
||||
style = attr.Style(
|
||||
title=u'Style',
|
||||
description=u'The style of the paragraph.',
|
||||
required=False)
|
||||
|
||||
escape = attr.Boolean(
|
||||
title=u'Escape Text',
|
||||
description=u'When set (default) the expression value is escaped.',
|
||||
required=False)
|
||||
|
||||
class DocPara(flowable.Flowable):
|
||||
signature = IDocPara
|
||||
klass = reportlab.platypus.flowables.DocPara
|
||||
|
||||
|
||||
class IDocAssert(interfaces.IRMLDirectiveSignature):
|
||||
"""Assert a certain condition."""
|
||||
|
||||
cond = attr.String(
|
||||
title=u'Condition',
|
||||
description=u'The condition to be asserted.',
|
||||
required=True)
|
||||
|
||||
format = attr.String(
|
||||
title=u'Format',
|
||||
description=u'The text displayed if assertion fails.',
|
||||
required=False)
|
||||
|
||||
class DocAssert(flowable.Flowable):
|
||||
signature = IDocAssert
|
||||
klass = reportlab.platypus.flowables.DocAssert
|
||||
|
||||
|
||||
class IDocElse(interfaces.IRMLDirectiveSignature):
|
||||
"""Starts 'else' block."""
|
||||
|
||||
class DocElse(flowable.Flowable):
|
||||
signature = IDocElse
|
||||
|
||||
def process(self):
|
||||
if not isinstance(self.parent, DocIf):
|
||||
raise ValueError("<docElse> can only be placed inside a <docIf>")
|
||||
self.parent.flow = self.parent.elseFlow
|
||||
|
||||
|
||||
class IDocIf(flowable.IFlow):
|
||||
"""Display story flow based on the value of the condition."""
|
||||
|
||||
cond = attr.String(
|
||||
title=u'Condition',
|
||||
description=u'The condition to be tested.',
|
||||
required=True)
|
||||
|
||||
class DocIf(flowable.Flow):
|
||||
signature = IDocAssert
|
||||
klass = reportlab.platypus.flowables.DocIf
|
||||
|
||||
def __init__(self, *args, **kw):
|
||||
super(flowable.Flow, self).__init__(*args, **kw)
|
||||
self.thenFlow = self.flow = []
|
||||
self.elseFlow = []
|
||||
|
||||
def process(self):
|
||||
args = dict(self.getAttributeValues())
|
||||
self.processSubDirectives()
|
||||
dif = self.klass(
|
||||
thenBlock = self.thenFlow, elseBlock = self.elseFlow, **args)
|
||||
self.parent.flow.append(dif)
|
||||
|
||||
class IDocWhile(flowable.IFlow):
|
||||
"""Repeat the included directives as long as the condition is true."""
|
||||
|
||||
cond = attr.String(
|
||||
title=u'Condition',
|
||||
description=u'The condition to be tested.',
|
||||
required=True)
|
||||
|
||||
class DocWhile(flowable.Flow):
|
||||
signature = IDocAssert
|
||||
klass = reportlab.platypus.flowables.DocWhile
|
||||
|
||||
def process(self):
|
||||
args = dict(self.getAttributeValues())
|
||||
self.processSubDirectives()
|
||||
dwhile = self.klass(whileBlock = self.flow, **args)
|
||||
self.parent.flow.append(dwhile)
|
||||
|
||||
|
||||
flowable.Flow.factories['docAssign'] = DocAssign
|
||||
flowable.Flow.factories['docExec'] = DocExec
|
||||
flowable.Flow.factories['docPara'] = DocPara
|
||||
flowable.Flow.factories['docAssert'] = DocAssert
|
||||
flowable.Flow.factories['docIf'] = DocIf
|
||||
flowable.Flow.factories['docElse'] = DocElse
|
||||
flowable.Flow.factories['docWhile'] = DocWhile
|
||||
|
||||
flowable.IFlow.setTaggedValue(
|
||||
'directives',
|
||||
flowable.IFlow.getTaggedValue('directives') +
|
||||
(occurence.ZeroOrMore('docAssign', IDocAssign),
|
||||
occurence.ZeroOrMore('docExec', IDocExec),
|
||||
occurence.ZeroOrMore('docPara', IDocPara),
|
||||
occurence.ZeroOrMore('docIf', IDocIf),
|
||||
occurence.ZeroOrMore('docElse', IDocElse),
|
||||
occurence.ZeroOrMore('docWhile', IDocWhile),
|
||||
)
|
||||
)
|
||||
757
z3c/rml/document.py
Normal file
757
z3c/rml/document.py
Normal file
@@ -0,0 +1,757 @@
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2007 Zope Foundation and Contributors.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# This software is subject to the provisions of the Zope Public License,
|
||||
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
|
||||
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
|
||||
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
##############################################################################
|
||||
"""RML ``document`` element
|
||||
"""
|
||||
import cStringIO
|
||||
import logging
|
||||
import sys
|
||||
import zope.interface
|
||||
import reportlab.pdfgen.canvas
|
||||
from reportlab.pdfbase import pdfmetrics, ttfonts, cidfonts
|
||||
from reportlab.lib import colors, fonts
|
||||
from reportlab.platypus import tableofcontents
|
||||
from reportlab.platypus.doctemplate import IndexingFlowable
|
||||
|
||||
from z3c.rml import attr, canvas, directive, doclogic, interfaces, list
|
||||
from z3c.rml import occurence, pdfinclude, special, storyplace, stylesheet
|
||||
from z3c.rml import template
|
||||
|
||||
LOGGER_NAME = 'z3c.rml.render'
|
||||
|
||||
class IRegisterType1Face(interfaces.IRMLDirectiveSignature):
|
||||
"""Register a new Type 1 font face."""
|
||||
|
||||
afmFile = attr.File(
|
||||
title=u'AFM File',
|
||||
description=u'Path to AFM file used to register the Type 1 face.',
|
||||
doNotOpen=True,
|
||||
required=True)
|
||||
|
||||
pfbFile = attr.File(
|
||||
title=u'PFB File',
|
||||
description=u'Path to PFB file used to register the Type 1 face.',
|
||||
doNotOpen=True,
|
||||
required=True)
|
||||
|
||||
class RegisterType1Face(directive.RMLDirective):
|
||||
signature = IRegisterType1Face
|
||||
|
||||
def process(self):
|
||||
args = self.getAttributeValues(valuesOnly=True)
|
||||
face = pdfmetrics.EmbeddedType1Face(*args)
|
||||
pdfmetrics.registerTypeFace(face)
|
||||
|
||||
|
||||
class IRegisterFont(interfaces.IRMLDirectiveSignature):
|
||||
"""Register a new font based on a face and encoding."""
|
||||
|
||||
name = attr.String(
|
||||
title=u'Name',
|
||||
description=(u'The name under which the font can be used in style '
|
||||
u'declarations or other parameters that lookup a font.'),
|
||||
required=True)
|
||||
|
||||
faceName = attr.String(
|
||||
title=u'Face Name',
|
||||
description=(u'The name of the face the font uses. The face has to '
|
||||
u'be previously registered.'),
|
||||
required=True)
|
||||
|
||||
encName = attr.String(
|
||||
title=u'Encoding Name',
|
||||
description=(u'The name of the encdoing to be used.'),
|
||||
required=True)
|
||||
|
||||
class RegisterFont(directive.RMLDirective):
|
||||
signature = IRegisterFont
|
||||
|
||||
def process(self):
|
||||
args = self.getAttributeValues(valuesOnly=True)
|
||||
font = pdfmetrics.Font(*args)
|
||||
pdfmetrics.registerFont(font)
|
||||
|
||||
|
||||
class IAddMapping(interfaces.IRMLDirectiveSignature):
|
||||
"""Map various styles(bold, italic) of a font name to the actual ps fonts
|
||||
used."""
|
||||
|
||||
faceName = attr.String(
|
||||
title=u'Name',
|
||||
description=(u'The name of the font to be mapped'),
|
||||
required=True)
|
||||
|
||||
bold = attr.Integer(
|
||||
title=u'Bold',
|
||||
description=(u'Bold'),
|
||||
required=True)
|
||||
|
||||
italic = attr.Integer(
|
||||
title=u'Italic',
|
||||
description=(u'Italic'),
|
||||
required=True)
|
||||
|
||||
psName = attr.String(
|
||||
title=u'psName',
|
||||
description=(u'Actual font name mapped'),
|
||||
required=True)
|
||||
|
||||
class AddMapping(directive.RMLDirective):
|
||||
signature = IAddMapping
|
||||
|
||||
def process(self):
|
||||
args = self.getAttributeValues(valuesOnly=True)
|
||||
fonts.addMapping(*args)
|
||||
|
||||
class IRegisterTTFont(interfaces.IRMLDirectiveSignature):
|
||||
"""Register a new TrueType font given the TT file and face name."""
|
||||
|
||||
faceName = attr.String(
|
||||
title=u'Face Name',
|
||||
description=(u'The name of the face the font uses. The face has to '
|
||||
u'be previously registered.'),
|
||||
required=True)
|
||||
|
||||
fileName = attr.File(
|
||||
title=u'File Name',
|
||||
description=u'File path of the of the TrueType font.',
|
||||
doNotOpen=True,
|
||||
required=True)
|
||||
|
||||
class RegisterTTFont(directive.RMLDirective):
|
||||
signature = IRegisterTTFont
|
||||
|
||||
def process(self):
|
||||
args = self.getAttributeValues(valuesOnly=True)
|
||||
font = ttfonts.TTFont(*args)
|
||||
pdfmetrics.registerFont(font)
|
||||
|
||||
|
||||
class IRegisterCidFont(interfaces.IRMLDirectiveSignature):
|
||||
"""Register a new CID font given the face name."""
|
||||
|
||||
faceName = attr.String(
|
||||
title=u'Face Name',
|
||||
description=(u'The name of the face the font uses. The face has to '
|
||||
u'be previously registered.'),
|
||||
required=True)
|
||||
|
||||
encName = attr.String(
|
||||
title=u'Encoding Name',
|
||||
description=(u'The name of the encoding to use for the font.'),
|
||||
required=False)
|
||||
|
||||
class RegisterCidFont(directive.RMLDirective):
|
||||
signature = IRegisterCidFont
|
||||
attrMapping = {'faceName': 'face', 'encName': 'encoding'}
|
||||
|
||||
def process(self):
|
||||
args = dict(self.getAttributeValues(attrMapping=self.attrMapping))
|
||||
if 'encoding' in args:
|
||||
font = cidfonts.CIDFont(**args)
|
||||
else:
|
||||
font = cidfonts.UnicodeCIDFont(**args)
|
||||
pdfmetrics.registerFont(font)
|
||||
|
||||
|
||||
class IRegisterFontFamily(interfaces.IRMLDirectiveSignature):
|
||||
"""Register a new font family."""
|
||||
|
||||
name = attr.String(
|
||||
title=u'Name',
|
||||
description=(u'The name of the font family.'),
|
||||
required=True)
|
||||
|
||||
normal = attr.String(
|
||||
title=u'Normal Font Name',
|
||||
description=(u'The name of the normal font variant.'),
|
||||
required=False)
|
||||
|
||||
bold = attr.String(
|
||||
title=u'Bold Font Name',
|
||||
description=(u'The name of the bold font variant.'),
|
||||
required=False)
|
||||
|
||||
italic = attr.String(
|
||||
title=u'Italic Font Name',
|
||||
description=(u'The name of the italic font variant.'),
|
||||
required=False)
|
||||
|
||||
boldItalic = attr.String(
|
||||
title=u'Bold/Italic Font Name',
|
||||
description=(u'The name of the bold/italic font variant.'),
|
||||
required=True)
|
||||
|
||||
class RegisterFontFamily(directive.RMLDirective):
|
||||
signature = IRegisterFontFamily
|
||||
attrMapping = {'name': 'family'}
|
||||
|
||||
def process(self):
|
||||
args = dict(self.getAttributeValues(attrMapping=self.attrMapping))
|
||||
pdfmetrics.registerFontFamily(**args)
|
||||
|
||||
|
||||
class IColorDefinition(interfaces.IRMLDirectiveSignature):
|
||||
"""Define a new color and give it a name to be known under."""
|
||||
|
||||
id = attr.String(
|
||||
title=u'Id',
|
||||
description=(u'The id/name the color will be available under.'),
|
||||
required=True)
|
||||
|
||||
RGB = attr.Color(
|
||||
title=u'RGB Color',
|
||||
description=(u'The color value that is represented.'),
|
||||
required=False)
|
||||
|
||||
CMYK = attr.Color(
|
||||
title=u'CMYK Color',
|
||||
description=(u'The color value that is represented.'),
|
||||
required=False)
|
||||
|
||||
value = attr.Color(
|
||||
title=u'Color',
|
||||
description=(u'The color value that is represented.'),
|
||||
required=False)
|
||||
|
||||
spotName = attr.String(
|
||||
title=u'Spot Name',
|
||||
description=(u'The Spot Name of the CMYK color.'),
|
||||
required=False)
|
||||
|
||||
density = attr.Float(
|
||||
title=u'Density',
|
||||
description=(u'The color density of the CMYK color.'),
|
||||
min=0.0,
|
||||
max=1.0,
|
||||
required=False)
|
||||
|
||||
knockout = attr.String(
|
||||
title=u'Knockout',
|
||||
description=(u'The knockout of the CMYK color.'),
|
||||
required=False)
|
||||
|
||||
alpha = attr.Float(
|
||||
title=u'Alpha',
|
||||
description=(u'The alpha channel of the color.'),
|
||||
min=0.0,
|
||||
max=1.0,
|
||||
required=False)
|
||||
|
||||
class ColorDefinition(directive.RMLDirective):
|
||||
signature = IColorDefinition
|
||||
|
||||
def process(self):
|
||||
kwargs = dict(self.getAttributeValues())
|
||||
id = kwargs.pop('id')
|
||||
for attrName in ('RGB', 'CMYK', 'value'):
|
||||
color = kwargs.pop(attrName, None)
|
||||
if color is not None:
|
||||
# CMYK has additional attributes.
|
||||
for name, value in kwargs.items():
|
||||
setattr(color, name, value)
|
||||
manager = attr.getManager(self)
|
||||
manager.colors[id] = color
|
||||
return
|
||||
raise ValueError('At least one color definition must be specified.')
|
||||
|
||||
# Initialize also supports the <color> tag.
|
||||
stylesheet.Initialize.factories['color'] = ColorDefinition
|
||||
stylesheet.IInitialize.setTaggedValue(
|
||||
'directives',
|
||||
stylesheet.IInitialize.getTaggedValue('directives') +
|
||||
(occurence.ZeroOrMore('color', IColorDefinition),)
|
||||
)
|
||||
|
||||
|
||||
class IStartIndex(interfaces.IRMLDirectiveSignature):
|
||||
"""Start a new index."""
|
||||
|
||||
name = attr.String(
|
||||
title=u'Name',
|
||||
description=u'The name of the index.',
|
||||
default='index',
|
||||
required=True)
|
||||
|
||||
offset = attr.Integer(
|
||||
title=u'Offset',
|
||||
description=u'The counting offset.',
|
||||
min=0,
|
||||
required=False)
|
||||
|
||||
format = attr.Choice(
|
||||
title=u'Format',
|
||||
description=(u'The format the index is going to use.'),
|
||||
choices=interfaces.LIST_FORMATS,
|
||||
required=False)
|
||||
|
||||
class StartIndex(directive.RMLDirective):
|
||||
signature = IStartIndex
|
||||
|
||||
def process(self):
|
||||
kwargs = dict(self.getAttributeValues())
|
||||
name = kwargs['name']
|
||||
manager = attr.getManager(self)
|
||||
manager.indexes[name] = tableofcontents.SimpleIndex(**kwargs)
|
||||
|
||||
|
||||
class ICropMarks(interfaces.IRMLDirectiveSignature):
|
||||
"""Crop Marks specification"""
|
||||
|
||||
name = attr.String(
|
||||
title=u'Name',
|
||||
description=u'The name of the index.',
|
||||
default='index',
|
||||
required=True)
|
||||
|
||||
borderWidth = attr.Measurement(
|
||||
title=u'Border Width',
|
||||
description=u'The width of the crop mark border.',
|
||||
required=False)
|
||||
|
||||
markColor = attr.Color(
|
||||
title=u'Mark Color',
|
||||
description=u'The color of the crop marks.',
|
||||
required=False)
|
||||
|
||||
markWidth = attr.Measurement(
|
||||
title=u'Mark Width',
|
||||
description=u'The line width of the actual crop marks.',
|
||||
required=False)
|
||||
|
||||
markLength = attr.Measurement(
|
||||
title=u'Mark Length',
|
||||
description=u'The length of the actual crop marks.',
|
||||
required=False)
|
||||
|
||||
markLast = attr.Boolean(
|
||||
title=u'Mark Last',
|
||||
description=u'If set, marks are drawn after the content is rendered.',
|
||||
required=False)
|
||||
|
||||
bleedWidth = attr.Measurement(
|
||||
title=u'Bleed Width',
|
||||
description=(u'The width of the page bleed.'),
|
||||
required=False)
|
||||
|
||||
class CropMarksProperties(object):
|
||||
borderWidth = 36
|
||||
markWidth = 0.5
|
||||
markColor = colors.toColor('green')
|
||||
markLength = 18
|
||||
markLast = True
|
||||
bleedWidth = 0
|
||||
|
||||
class CropMarks(directive.RMLDirective):
|
||||
signature = ICropMarks
|
||||
|
||||
def process(self):
|
||||
cmp = CropMarksProperties()
|
||||
for name, value in self.getAttributeValues():
|
||||
setattr(cmp, name, value)
|
||||
self.parent.parent.cropMarks = cmp
|
||||
|
||||
class ILogConfig(interfaces.IRMLDirectiveSignature):
|
||||
"""Configure the render logger."""
|
||||
|
||||
level = attr.Choice(
|
||||
title=u'Level',
|
||||
description=u'The default log level.',
|
||||
choices=interfaces.LOG_LEVELS,
|
||||
doLower=False,
|
||||
required=False)
|
||||
|
||||
format = attr.String(
|
||||
title=u'Format',
|
||||
description=u'The format of the log messages.',
|
||||
required=False)
|
||||
|
||||
filename = attr.File(
|
||||
title=u'File Name',
|
||||
description=u'The path to the file that is being logged.',
|
||||
doNotOpen=True,
|
||||
required=True)
|
||||
|
||||
filemode = attr.Choice(
|
||||
title=u'File Mode',
|
||||
description=u'The mode to open the file in.',
|
||||
choices={'WRITE': 'w', 'APPEND': 'a'},
|
||||
default='a',
|
||||
required=False)
|
||||
|
||||
datefmt = attr.String(
|
||||
title=u'Date Format',
|
||||
description=u'The format of the log message date.',
|
||||
required=False)
|
||||
|
||||
class LogConfig(directive.RMLDirective):
|
||||
signature = ILogConfig
|
||||
|
||||
def process(self):
|
||||
args = dict(self.getAttributeValues())
|
||||
|
||||
# cleanup win paths like:
|
||||
# ....\\input\\file:///D:\\trunk\\...
|
||||
if sys.platform[:3].lower() == "win":
|
||||
if args['filename'].startswith('file:///'):
|
||||
args['filename'] = args['filename'][len('file:///'):]
|
||||
|
||||
logger = logging.getLogger(LOGGER_NAME)
|
||||
handler = logging.FileHandler(args['filename'], args['filemode'])
|
||||
formatter = logging.Formatter(
|
||||
args.get('format'), args.get('datefmt'))
|
||||
handler.setFormatter(formatter)
|
||||
logger.addHandler(handler)
|
||||
if 'level' in args:
|
||||
logger.setLevel(args['level'])
|
||||
self.parent.parent.logger = logger
|
||||
|
||||
|
||||
class IDocInit(interfaces.IRMLDirectiveSignature):
|
||||
occurence.containing(
|
||||
occurence.ZeroOrMore('color', IColorDefinition),
|
||||
occurence.ZeroOrMore('name', special.IName),
|
||||
occurence.ZeroOrMore('registerType1Face', IRegisterType1Face),
|
||||
occurence.ZeroOrMore('registerFont', IRegisterFont),
|
||||
occurence.ZeroOrMore('registerCidFont', IRegisterCidFont),
|
||||
occurence.ZeroOrMore('registerTTFont', IRegisterTTFont),
|
||||
occurence.ZeroOrMore('registerFontFamily', IRegisterFontFamily),
|
||||
occurence.ZeroOrMore('addMapping', IAddMapping),
|
||||
occurence.ZeroOrMore('logConfig', ILogConfig),
|
||||
occurence.ZeroOrMore('cropMarks', ICropMarks),
|
||||
occurence.ZeroOrMore('startIndex', IStartIndex),
|
||||
)
|
||||
|
||||
pageMode = attr.Choice(
|
||||
title=u'Page Mode',
|
||||
description=(u'The page mode in which the document is opened in '
|
||||
u'the viewer.'),
|
||||
choices=('UseNone', 'UseOutlines', 'UseThumbs', 'FullScreen'),
|
||||
required=False)
|
||||
|
||||
pageLayout = attr.Choice(
|
||||
title=u'Page Layout',
|
||||
description=(u'The layout in which the pages are displayed in '
|
||||
u'the viewer.'),
|
||||
choices=('SinglePage', 'OneColumn', 'TwoColumnLeft', 'TwoColumnRight'),
|
||||
required=False)
|
||||
|
||||
useCropMarks = attr.Boolean(
|
||||
title=u'Use Crop Marks',
|
||||
description=u'A flag when set shows crop marks on the page.',
|
||||
required=False)
|
||||
|
||||
hideToolbar = attr.TextBoolean(
|
||||
title=u'Hide Toolbar',
|
||||
description=(u'A flag indicating that the toolbar is hidden in '
|
||||
u'the viewer.'),
|
||||
required=False)
|
||||
|
||||
hideMenubar = attr.TextBoolean(
|
||||
title=u'Hide Menubar',
|
||||
description=(u'A flag indicating that the menubar is hidden in '
|
||||
u'the viewer.'),
|
||||
required=False)
|
||||
|
||||
hideWindowUI = attr.TextBoolean(
|
||||
title=u'Hide Window UI',
|
||||
description=(u'A flag indicating that the window UI is hidden in '
|
||||
u'the viewer.'),
|
||||
required=False)
|
||||
|
||||
fitWindow = attr.TextBoolean(
|
||||
title=u'Fit Window',
|
||||
description=u'A flag indicating that the page fits in the viewer.',
|
||||
required=False)
|
||||
|
||||
centerWindow = attr.TextBoolean(
|
||||
title=u'Center Window',
|
||||
description=(u'A flag indicating that the page fits is centered '
|
||||
u'in the viewer.'),
|
||||
required=False)
|
||||
|
||||
displayDocTitle = attr.TextBoolean(
|
||||
title=u'Display Doc Title',
|
||||
description=(u'A flag indicating that the document title is displayed '
|
||||
u'in the viewer.'),
|
||||
required=False)
|
||||
|
||||
nonFullScreenPageMode = attr.Choice(
|
||||
title=u'Non-Full-Screen Page Mode',
|
||||
description=(u'Non-Full-Screen page mode in the viewer.'),
|
||||
choices=('UseNone', 'UseOutlines', 'UseThumbs', 'UseOC'),
|
||||
required=False)
|
||||
|
||||
direction = attr.Choice(
|
||||
title=u'Text Direction',
|
||||
description=(u'The text direction of the PDF.'),
|
||||
choices=('L2R', 'R2L'),
|
||||
required=False)
|
||||
|
||||
viewArea = attr.Choice(
|
||||
title=u'View Area',
|
||||
description=(u'View Area setting used in the viewer.'),
|
||||
choices=('MediaBox', 'CropBox', 'BleedBox', 'TrimBox', 'ArtBox'),
|
||||
required=False)
|
||||
|
||||
viewClip = attr.Choice(
|
||||
title=u'View Clip',
|
||||
description=(u'View Clip setting used in the viewer.'),
|
||||
choices=('MediaBox', 'CropBox', 'BleedBox', 'TrimBox', 'ArtBox'),
|
||||
required=False)
|
||||
|
||||
printArea = attr.Choice(
|
||||
title=u'Print Area',
|
||||
description=(u'Print Area setting used in the viewer.'),
|
||||
choices=('MediaBox', 'CropBox', 'BleedBox', 'TrimBox', 'ArtBox'),
|
||||
required=False)
|
||||
|
||||
printClip = attr.Choice(
|
||||
title=u'Print Clip',
|
||||
description=(u'Print Clip setting used in the viewer.'),
|
||||
choices=('MediaBox', 'CropBox', 'BleedBox', 'TrimBox', 'ArtBox'),
|
||||
required=False)
|
||||
|
||||
printScaling = attr.Choice(
|
||||
title=u'Print Scaling',
|
||||
description=(u'The print scaling mode in which the document is opened '
|
||||
u'in the viewer.'),
|
||||
choices=('None', 'AppDefault'),
|
||||
required=False)
|
||||
|
||||
class DocInit(directive.RMLDirective):
|
||||
signature = IDocInit
|
||||
factories = {
|
||||
'name': special.Name,
|
||||
'color': ColorDefinition,
|
||||
'registerType1Face': RegisterType1Face,
|
||||
'registerFont': RegisterFont,
|
||||
'registerTTFont': RegisterTTFont,
|
||||
'registerCidFont': RegisterCidFont,
|
||||
'registerFontFamily': RegisterFontFamily,
|
||||
'addMapping': AddMapping,
|
||||
'logConfig': LogConfig,
|
||||
'cropMarks': CropMarks,
|
||||
'startIndex': StartIndex,
|
||||
}
|
||||
|
||||
viewerOptions = dict(
|
||||
(option[0].lower()+option[1:], option)
|
||||
for option in ['HideToolbar', 'HideMenubar', 'HideWindowUI', 'FitWindow',
|
||||
'CenterWindow', 'DisplayDocTitle',
|
||||
'NonFullScreenPageMode', 'Direction', 'ViewArea',
|
||||
'ViewClip', 'PrintArea', 'PrintClip', 'PrintScaling'])
|
||||
|
||||
def process(self):
|
||||
kwargs = dict(self.getAttributeValues())
|
||||
self.parent.cropMarks = kwargs.get('useCropMarks', False)
|
||||
self.parent.pageMode = kwargs.get('pageMode')
|
||||
self.parent.pageLayout = kwargs.get('pageLayout')
|
||||
for name in self.viewerOptions:
|
||||
setattr(self.parent, name, kwargs.get(name))
|
||||
super(DocInit, self).process()
|
||||
|
||||
|
||||
class IDocument(interfaces.IRMLDirectiveSignature):
|
||||
occurence.containing(
|
||||
occurence.ZeroOrOne('docinit', IDocInit),
|
||||
occurence.ZeroOrOne('stylesheet', stylesheet.IStylesheet),
|
||||
occurence.ZeroOrOne('template', template.ITemplate),
|
||||
occurence.ZeroOrOne('story', template.IStory),
|
||||
occurence.ZeroOrOne('pageInfo', canvas.IPageInfo),
|
||||
occurence.ZeroOrMore('pageDrawing', canvas.IPageDrawing),
|
||||
)
|
||||
|
||||
filename = attr.String(
|
||||
title=u'File Name',
|
||||
description=(u'The default name of the output file, if no output '
|
||||
u'file was provided.'),
|
||||
required=True)
|
||||
|
||||
title = attr.String(
|
||||
title=u'Title',
|
||||
description=(u'The "Title" annotation for the PDF document.'),
|
||||
required=False)
|
||||
|
||||
subject = attr.String(
|
||||
title=u'Subject',
|
||||
description=(u'The "Subject" annotation for the PDF document.'),
|
||||
required=False)
|
||||
|
||||
author = attr.String(
|
||||
title=u'Author',
|
||||
description=(u'The "Author" annotation for the PDF document.'),
|
||||
required=False)
|
||||
|
||||
creator = attr.String(
|
||||
title=u'Creator',
|
||||
description=(u'The "Creator" annotation for the PDF document.'),
|
||||
required=False)
|
||||
|
||||
debug = attr.Boolean(
|
||||
title=u'Debug',
|
||||
description=u'A flag to activate the debug output.',
|
||||
default=False,
|
||||
required=False)
|
||||
|
||||
compression = attr.BooleanWithDefault(
|
||||
title=u'Compression',
|
||||
description=(u'A flag determining whether page compression should '
|
||||
u'be used.'),
|
||||
required=False)
|
||||
|
||||
invariant = attr.BooleanWithDefault(
|
||||
title=u'Invariant',
|
||||
description=(u'A flag that determines whether the produced PDF '
|
||||
u'should be invariant with respect to the date and '
|
||||
u'the exact contents.'),
|
||||
required=False)
|
||||
|
||||
class Document(directive.RMLDirective):
|
||||
signature = IDocument
|
||||
zope.interface.implements(interfaces.IManager,
|
||||
interfaces.IPostProcessorManager,
|
||||
interfaces.ICanvasManager)
|
||||
|
||||
factories = {
|
||||
'docinit': DocInit,
|
||||
'stylesheet': stylesheet.Stylesheet,
|
||||
'template': template.Template,
|
||||
'story': template.Story,
|
||||
'pageInfo': canvas.PageInfo,
|
||||
'pageDrawing': canvas.PageDrawing,
|
||||
}
|
||||
|
||||
def __init__(self, element):
|
||||
super(Document, self).__init__(element, None)
|
||||
self.names = {}
|
||||
self.styles = {}
|
||||
self.colors = {}
|
||||
self.indexes = {}
|
||||
self.postProcessors = []
|
||||
self.filename = '<unknown>'
|
||||
self.cropMarks = False
|
||||
self.pageLayout = None
|
||||
self.pageMode = None
|
||||
self.logger = None
|
||||
self.svgs = {}
|
||||
self.attributesCache = {}
|
||||
for name in DocInit.viewerOptions:
|
||||
setattr(self, name, None)
|
||||
|
||||
def _indexAdd(self, canvas, name, label):
|
||||
self.indexes[name](canvas, name, label)
|
||||
|
||||
def _beforeDocument(self):
|
||||
self._initCanvas(self.doc.canv)
|
||||
self.canvas = self.doc.canv
|
||||
|
||||
def _initCanvas(self, canvas):
|
||||
canvas._indexAdd = self._indexAdd
|
||||
canvas.manager = self
|
||||
if self.pageLayout:
|
||||
canvas._doc._catalog.setPageLayout(self.pageLayout)
|
||||
if self.pageMode:
|
||||
canvas._doc._catalog.setPageMode(self.pageMode)
|
||||
for name, option in DocInit.viewerOptions.items():
|
||||
if getattr(self, name) is not None:
|
||||
canvas.setViewerPreference(option, getattr(self, name))
|
||||
# Setting annotations.
|
||||
data = dict(self.getAttributeValues(
|
||||
select=('title', 'subject', 'author', 'creator')))
|
||||
canvas.setTitle(data.get('title'))
|
||||
canvas.setSubject(data.get('subject'))
|
||||
canvas.setAuthor(data.get('author'))
|
||||
canvas.setCreator(data.get('creator'))
|
||||
|
||||
def process(self, outputFile=None, maxPasses=2):
|
||||
"""Process document"""
|
||||
# Reset all reportlab global variables. This is very important for
|
||||
# ReportLab not to fail.
|
||||
reportlab.rl_config._reset()
|
||||
|
||||
debug = self.getAttributeValues(select=('debug',), valuesOnly=True)[0]
|
||||
if not debug:
|
||||
reportlab.rl_config.shapeChecking = 0
|
||||
|
||||
# Add our colors mapping to the default ones.
|
||||
colors.toColor.setExtraColorsNameSpace(self.colors)
|
||||
|
||||
if outputFile is None:
|
||||
# TODO: This is relative to the input file *not* the CWD!!!
|
||||
outputFile = open(self.element.get('filename'), 'wb')
|
||||
|
||||
# Create a temporary output file, so that post-processors can
|
||||
# massage the output
|
||||
self.outputFile = tempOutput = cStringIO.StringIO()
|
||||
|
||||
# Process common sub-directives
|
||||
self.processSubDirectives(select=('docinit', 'stylesheet'))
|
||||
|
||||
# Handle Page Drawing Documents
|
||||
if self.element.find('pageDrawing') is not None:
|
||||
kwargs = dict(self.getAttributeValues(
|
||||
select=('compression', 'debug'),
|
||||
attrMapping={'compression': 'pageCompression',
|
||||
'debug': 'verbosity'}
|
||||
))
|
||||
kwargs['cropMarks'] = self.cropMarks
|
||||
|
||||
self.canvas = reportlab.pdfgen.canvas.Canvas(tempOutput, **kwargs)
|
||||
self._initCanvas(self.canvas)
|
||||
self.processSubDirectives(select=('pageInfo', 'pageDrawing'))
|
||||
self.canvas.save()
|
||||
|
||||
# Handle Flowable-based documents.
|
||||
elif self.element.find('template') is not None:
|
||||
self.processSubDirectives(select=('template', 'story'))
|
||||
self.doc.beforeDocument = self._beforeDocument
|
||||
self.doc.multiBuild(self.flowables, maxPasses=maxPasses)
|
||||
|
||||
# Process all post processors
|
||||
for name, processor in self.postProcessors:
|
||||
tempOutput.seek(0)
|
||||
tempOutput = processor.process(tempOutput)
|
||||
|
||||
# Save the result into our real output file
|
||||
tempOutput.seek(0)
|
||||
outputFile.write(tempOutput.getvalue())
|
||||
|
||||
# Cleanup.
|
||||
colors.toColor.setExtraColorsNameSpace({})
|
||||
reportlab.rl_config.shapeChecking = 1
|
||||
|
||||
def get_name(self, name, default=None):
|
||||
if default is None:
|
||||
default = u''
|
||||
|
||||
if name not in self.names:
|
||||
if self.doc._indexingFlowables and isinstance(
|
||||
self.doc._indexingFlowables[-1],
|
||||
DummyIndexingFlowable
|
||||
):
|
||||
return default
|
||||
self.doc._indexingFlowables.append(DummyIndexingFlowable())
|
||||
|
||||
return self.names.get(name, default)
|
||||
|
||||
|
||||
class DummyIndexingFlowable(IndexingFlowable):
|
||||
"""A dummy flowable to trick multiBuild into performing +1 pass."""
|
||||
|
||||
def __init__(self):
|
||||
self.i = -1
|
||||
|
||||
def isSatisfied(self):
|
||||
self.i += 1
|
||||
return self.i
|
||||
76
z3c/rml/dtd.py
Normal file
76
z3c/rml/dtd.py
Normal file
@@ -0,0 +1,76 @@
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2007 Zope Foundation and Contributors.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# This software is subject to the provisions of the Zope Public License,
|
||||
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
|
||||
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
|
||||
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
##############################################################################
|
||||
"""Generate a DTD from the code
|
||||
"""
|
||||
import zope.schema
|
||||
|
||||
from z3c.rml import attr, document, occurence
|
||||
|
||||
occurence2Symbol = {
|
||||
occurence.ZeroOrMore: '*',
|
||||
occurence.ZeroOrOne: '?',
|
||||
occurence.OneOrMore: '+',
|
||||
}
|
||||
|
||||
|
||||
def generateElement(name, signature):
|
||||
if signature is None:
|
||||
return ''
|
||||
# Create the list of sub-elements.
|
||||
subElementList = []
|
||||
for occurence in signature.queryTaggedValue('directives', ()):
|
||||
subElementList.append(
|
||||
occurence.tag + occurence2Symbol.get(occurence.__class__, '')
|
||||
)
|
||||
fields = zope.schema.getFieldsInOrder(signature)
|
||||
for attrName, field in fields:
|
||||
if isinstance(field, attr.TextNode):
|
||||
subElementList.append('#PCDATA')
|
||||
break
|
||||
subElementList = ','.join(subElementList)
|
||||
if subElementList:
|
||||
subElementList = ' (' + subElementList + ')'
|
||||
text = '\n<!ELEMENT %s%s>' %(name, subElementList)
|
||||
# Create a list of attributes for this element.
|
||||
for attrName, field in fields:
|
||||
# Ignore text nodes, since they are not attributes.
|
||||
if isinstance(field, attr.TextNode):
|
||||
continue
|
||||
# Create the type
|
||||
if isinstance(field, attr.Choice):
|
||||
type = '(' + '|'.join(field.choices.keys()) + ')'
|
||||
else:
|
||||
type = 'CDATA'
|
||||
# Create required flag
|
||||
if field.required:
|
||||
required = '#REQUIRED'
|
||||
else:
|
||||
required = '#IMPLIED'
|
||||
# Put it all together
|
||||
text += '\n<!ATTLIST %s %s %s %s>' %(name, attrName, type, required)
|
||||
text += '\n'
|
||||
# Walk through all sub-elements, creating th eDTD entries for them.
|
||||
for occurence in signature.queryTaggedValue('directives', ()):
|
||||
text += generateElement(occurence.tag, occurence.signature)
|
||||
return text
|
||||
|
||||
|
||||
def generate(useWrapper=False):
|
||||
text = generateElement('document', document.Document.signature)
|
||||
if useWrapper:
|
||||
text = '<!DOCTYPE RML [\n%s]>\n' %text
|
||||
return text
|
||||
|
||||
def main():
|
||||
print generate()
|
||||
1611
z3c/rml/flowable.py
Normal file
1611
z3c/rml/flowable.py
Normal file
File diff suppressed because it is too large
Load Diff
356
z3c/rml/form.py
Normal file
356
z3c/rml/form.py
Normal file
@@ -0,0 +1,356 @@
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2007 Zope Foundation and Contributors.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# This software is subject to the provisions of the Zope Public License,
|
||||
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
|
||||
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
|
||||
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
##############################################################################
|
||||
"""Page Drawing Related Element Processing
|
||||
"""
|
||||
import types
|
||||
import reportlab.pdfbase.pdfform
|
||||
from z3c.rml import attr, directive, interfaces, occurence
|
||||
|
||||
try:
|
||||
import reportlab.graphics.barcode
|
||||
except ImportError:
|
||||
# barcode package has not been installed
|
||||
import types
|
||||
import reportlab.graphics
|
||||
reportlab.graphics.barcode = types.ModuleType('barcode')
|
||||
reportlab.graphics.barcode.getCodeNames = lambda : ()
|
||||
|
||||
|
||||
class IBarCodeBase(interfaces.IRMLDirectiveSignature):
|
||||
"""Create a bar code."""
|
||||
|
||||
code = attr.Choice(
|
||||
title=u'Code',
|
||||
description=u'The name of the type of code to use.',
|
||||
choices=reportlab.graphics.barcode.getCodeNames(),
|
||||
required=True)
|
||||
|
||||
value = attr.TextNode(
|
||||
title=u'Value',
|
||||
description=u'The value represented by the code.',
|
||||
required=True)
|
||||
|
||||
width = attr.Measurement(
|
||||
title=u'Width',
|
||||
description=u'The width of the barcode.',
|
||||
required=False)
|
||||
|
||||
height = attr.Measurement(
|
||||
title=u'Height',
|
||||
description=u'The height of the barcode.',
|
||||
required=False)
|
||||
|
||||
barStrokeColor = attr.Color(
|
||||
title=u'Bar Stroke Color',
|
||||
description=(u'The color of the line strokes in the barcode.'),
|
||||
required=False)
|
||||
|
||||
barStrokeWidth = attr.Measurement(
|
||||
title=u'Bar Stroke Width',
|
||||
description=u'The width of the line strokes in the barcode.',
|
||||
required=False)
|
||||
|
||||
barFillColor = attr.Color(
|
||||
title=u'Bar Fill Color',
|
||||
description=(u'The color of the filled shapes in the barcode.'),
|
||||
required=False)
|
||||
|
||||
gap = attr.Measurement(
|
||||
title=u'Gap',
|
||||
description=u'The width of the inter-character gaps.',
|
||||
required=False)
|
||||
|
||||
# Bar code dependent attributes
|
||||
# I2of5, Code128, Standard93, FIM, POSTNET, Ean13B
|
||||
barWidth = attr.Measurement(
|
||||
title=u'Bar Width',
|
||||
description=u'The width of the smallest bar within the barcode',
|
||||
required=False)
|
||||
|
||||
# I2of5, Code128, Standard93, FIM, POSTNET
|
||||
barHeight = attr.Measurement(
|
||||
title=u'Bar Height',
|
||||
description=u'The height of the symbol.',
|
||||
required=False)
|
||||
|
||||
# I2of5
|
||||
ratio = attr.Float(
|
||||
title=u'Ratio',
|
||||
description=(u'The ratio of wide elements to narrow elements. '
|
||||
u'Must be between 2.0 and 3.0 (or 2.2 and 3.0 if the '
|
||||
u'barWidth is greater than 20 mils (.02 inch)).'),
|
||||
min=2.0,
|
||||
max=3.0,
|
||||
required=False)
|
||||
|
||||
# I2of5
|
||||
# Should be boolean, but some code want it as int; will still work
|
||||
checksum = attr.Integer(
|
||||
title=u'Ratio',
|
||||
description=(u'A flag that enables the computation and inclusion of '
|
||||
u'the check digit.'),
|
||||
required=False)
|
||||
|
||||
# I2of5
|
||||
bearers = attr.Float(
|
||||
title=u'Bearers',
|
||||
description=(u'Height of bearer bars (horizontal bars along the top '
|
||||
u'and bottom of the barcode). Default is 3 '
|
||||
u'x-dimensions. Set to zero for no bearer bars.'
|
||||
u'(Bearer bars help detect misscans, so it is '
|
||||
u'suggested to leave them on).'),
|
||||
required=False)
|
||||
|
||||
# I2of5, Code128, Standard93, FIM, Ean13
|
||||
quiet = attr.Boolean(
|
||||
title=u'Quiet Zone',
|
||||
description=(u'A flag to include quiet zones in the symbol.'),
|
||||
required=False)
|
||||
|
||||
# I2of5, Code128, Standard93, FIM, Ean13
|
||||
lquiet = attr.Measurement(
|
||||
title=u'Left Quiet Zone',
|
||||
description=(u"Quiet zone size to the left of code, if quiet is "
|
||||
u"true. Default is the greater of .25 inch or .15 times "
|
||||
u"the symbol's length."),
|
||||
required=False)
|
||||
|
||||
# I2of5, Code128, Standard93, FIM, Ean13
|
||||
rquiet = attr.Measurement(
|
||||
title=u'Right Quiet Zone',
|
||||
description=(u"Quiet zone size to the right of code, if quiet is "
|
||||
u"true. Default is the greater of .25 inch or .15 times "
|
||||
u"the symbol's length."),
|
||||
required=False)
|
||||
|
||||
# I2of5, Code128, Standard93, FIM, POSTNET, Ean13
|
||||
fontName = attr.String(
|
||||
title=u'Font Name',
|
||||
description=(u'The font used to print the value.'),
|
||||
required=False)
|
||||
|
||||
# I2of5, Code128, Standard93, FIM, POSTNET, Ean13
|
||||
fontSize = attr.Measurement(
|
||||
title=u'Font Size',
|
||||
description=(u'The size of the value text.'),
|
||||
required=False)
|
||||
|
||||
# I2of5, Code128, Standard93, FIM, POSTNET, Ean13
|
||||
humanReadable = attr.Boolean(
|
||||
title=u'Human Readable',
|
||||
description=(u'A flag when set causes the value to be printed below '
|
||||
u'the bar code.'),
|
||||
required=False)
|
||||
|
||||
# I2of5, Standard93
|
||||
stop = attr.Boolean(
|
||||
title=u'Show Start/Stop',
|
||||
description=(u'A flag to specify whether the start/stop symbols '
|
||||
u'are to be shown.'),
|
||||
required=False)
|
||||
|
||||
# FIM, POSTNET
|
||||
spaceWidth = attr.Measurement(
|
||||
title=u'Space Width',
|
||||
description=u'The space of the inter-character gaps.',
|
||||
required=False)
|
||||
|
||||
# POSTNET
|
||||
shortHeight = attr.Measurement(
|
||||
title=u'Short Height',
|
||||
description=u'The height of the short bar.',
|
||||
required=False)
|
||||
|
||||
# Ean13
|
||||
textColor = attr.Color(
|
||||
title=u'Text Color',
|
||||
description=(u'The color of human readable text.'),
|
||||
required=False)
|
||||
|
||||
# USPS4S
|
||||
routing = attr.String(
|
||||
title=u'Routing',
|
||||
description=u'The routing information string.',
|
||||
required=False)
|
||||
|
||||
# QR
|
||||
barLevel = attr.Choice(
|
||||
title=u'Bar Level',
|
||||
description=u'The error correction level for QR code',
|
||||
choices=['L', 'M', 'Q', 'H'],
|
||||
required=False)
|
||||
|
||||
|
||||
class IBarCode(IBarCodeBase):
|
||||
"""A barcode graphic."""
|
||||
|
||||
x = attr.Measurement(
|
||||
title=u'X-Position',
|
||||
description=u'The x-position of the lower-left corner of the barcode.',
|
||||
default=0,
|
||||
required=False)
|
||||
|
||||
y = attr.Measurement(
|
||||
title=u'Y-Position',
|
||||
description=u'The y-position of the lower-left corner of the barcode.',
|
||||
default=0,
|
||||
required=False)
|
||||
|
||||
isoScale = attr.Boolean(
|
||||
title=u'Isometric Scaling',
|
||||
description=u'When set, the aspect ration of the barcode is enforced.',
|
||||
required=False)
|
||||
|
||||
class BarCode(directive.RMLDirective):
|
||||
signature = IBarCode
|
||||
|
||||
def process(self):
|
||||
kw = dict(self.getAttributeValues())
|
||||
name = kw.pop('code')
|
||||
kw['value'] = str(kw['value'])
|
||||
x = kw.pop('x', 0)
|
||||
y = kw.pop('y', 0)
|
||||
code = reportlab.graphics.barcode.createBarcodeDrawing(name, **kw)
|
||||
manager = attr.getManager(self, interfaces.ICanvasManager)
|
||||
code.drawOn(manager.canvas, x, y)
|
||||
|
||||
|
||||
class IField(interfaces.IRMLDirectiveSignature):
|
||||
"""A field."""
|
||||
|
||||
title = attr.Text(
|
||||
title=u'Title',
|
||||
description=u'The title of the field.',
|
||||
required=True)
|
||||
|
||||
x = attr.Measurement(
|
||||
title=u'X-Position',
|
||||
description=u'The x-position of the lower-left corner of the field.',
|
||||
default=0,
|
||||
required=True)
|
||||
|
||||
y = attr.Measurement(
|
||||
title=u'Y-Position',
|
||||
description=u'The y-position of the lower-left corner of the field.',
|
||||
default=0,
|
||||
required=True)
|
||||
|
||||
|
||||
class Field(directive.RMLDirective):
|
||||
signature = IField
|
||||
callable = None
|
||||
attrMapping = {}
|
||||
|
||||
def process(self):
|
||||
kwargs = dict(self.getAttributeValues(attrMapping=self.attrMapping))
|
||||
canvas = attr.getManager(self, interfaces.ICanvasManager).canvas
|
||||
getattr(reportlab.pdfbase.pdfform, self.callable)(canvas, **kwargs)
|
||||
|
||||
|
||||
class ITextField(IField):
|
||||
"""A text field within the PDF"""
|
||||
|
||||
width = attr.Measurement(
|
||||
title=u'Width',
|
||||
description=u'The width of the text field.',
|
||||
required=True)
|
||||
|
||||
height = attr.Measurement(
|
||||
title=u'Height',
|
||||
description=u'The height of the text field.',
|
||||
required=True)
|
||||
|
||||
value = attr.Text(
|
||||
title=u'Value',
|
||||
description=u'The default text value of the field.',
|
||||
required=False)
|
||||
|
||||
maxLength = attr.Integer(
|
||||
title=u'Maximum Length',
|
||||
description=u'The maximum amount of characters allowed in the field.',
|
||||
required=False)
|
||||
|
||||
multiline = attr.Boolean(
|
||||
title=u'Multiline',
|
||||
description=u'A flag when set allows multiple lines within the field.',
|
||||
required=False)
|
||||
|
||||
class TextField(Field):
|
||||
signature = ITextField
|
||||
callable = 'textFieldAbsolute'
|
||||
attrMapping = {'maxLength': 'maxlen'}
|
||||
|
||||
|
||||
class IButtonField(IField):
|
||||
"""A button field within the PDF"""
|
||||
|
||||
value = attr.Choice(
|
||||
title=u'Value',
|
||||
description=u'The value of the button.',
|
||||
choices=('Yes', 'Off'),
|
||||
required=True)
|
||||
|
||||
class ButtonField(Field):
|
||||
signature = IButtonField
|
||||
callable = 'buttonFieldAbsolute'
|
||||
|
||||
|
||||
class IOption(interfaces.IRMLDirectiveSignature):
|
||||
"""An option in the select field."""
|
||||
|
||||
value = attr.TextNode(
|
||||
title=u'Value',
|
||||
description=u'The value of the option.',
|
||||
required=True)
|
||||
|
||||
class Option(directive.RMLDirective):
|
||||
signature = IOption
|
||||
|
||||
def process(self):
|
||||
value = self.getAttributeValues(valuesOnly=True)[0]
|
||||
self.parent.options.append(value)
|
||||
|
||||
|
||||
class ISelectField(IField):
|
||||
"""A selection field within the PDF"""
|
||||
occurence.containing(
|
||||
occurence.ZeroOrMore('option', IOption))
|
||||
|
||||
width = attr.Measurement(
|
||||
title=u'Width',
|
||||
description=u'The width of the select field.',
|
||||
required=True)
|
||||
|
||||
height = attr.Measurement(
|
||||
title=u'Height',
|
||||
description=u'The height of the select field.',
|
||||
required=True)
|
||||
|
||||
value = attr.Text(
|
||||
title=u'Value',
|
||||
description=u'The default value of the field.',
|
||||
required=False)
|
||||
|
||||
class SelectField(Field):
|
||||
signature = ISelectField
|
||||
callable = 'selectFieldAbsolute'
|
||||
factories = {'option': Option}
|
||||
|
||||
def process(self):
|
||||
self.options = []
|
||||
self.processSubDirectives()
|
||||
kwargs = dict(self.getAttributeValues(attrMapping=self.attrMapping))
|
||||
kwargs['options'] = self.options
|
||||
canvas = attr.getManager(self, interfaces.ICanvasManager).canvas
|
||||
getattr(reportlab.pdfbase.pdfform, self.callable)(canvas, **kwargs)
|
||||
148
z3c/rml/interfaces.py
Normal file
148
z3c/rml/interfaces.py
Normal file
@@ -0,0 +1,148 @@
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2007 Zope Foundation and Contributors.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# This software is subject to the provisions of the Zope Public License,
|
||||
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
|
||||
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
|
||||
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
##############################################################################
|
||||
"""RML to PDF Converter Interfaces
|
||||
"""
|
||||
__docformat__ = "reStructuredText"
|
||||
import logging
|
||||
import reportlab.lib.enums
|
||||
import zope.interface
|
||||
import zope.schema
|
||||
|
||||
from z3c.rml.occurence import ZeroOrMore, ZeroOrOne, OneOrMore
|
||||
|
||||
JOIN_CHOICES = {'round': 1, 'mitered': 0, 'bevelled': 2}
|
||||
CAP_CHOICES = {'default': 0, 'butt': 0, 'round': 1, 'square': 2}
|
||||
ALIGN_CHOICES = {
|
||||
'left': reportlab.lib.enums.TA_LEFT,
|
||||
'right': reportlab.lib.enums.TA_RIGHT,
|
||||
'center': reportlab.lib.enums.TA_CENTER,
|
||||
'centre': reportlab.lib.enums.TA_CENTER,
|
||||
'justify': reportlab.lib.enums.TA_JUSTIFY}
|
||||
ALIGN_TEXT_CHOICES = {
|
||||
'left': 'LEFT', 'right': 'RIGHT', 'center': 'CENTER', 'centre': 'CENTER',
|
||||
'decimal': 'DECIMAL'}
|
||||
VALIGN_TEXT_CHOICES = {
|
||||
'top': 'TOP', 'middle': 'MIDDLE', 'bottom': 'BOTTOM'}
|
||||
SPLIT_CHOICES = ('splitfirst', 'splitlast')
|
||||
TEXT_TRANSFORM_CHOICES = ('uppercase', 'lowercase')
|
||||
LIST_FORMATS = ('I', 'i', '123', 'ABC', 'abc')
|
||||
ORDERED_LIST_TYPES = ('I', 'i', '1', 'A', 'a')
|
||||
UNORDERED_BULLET_VALUES = ('bullet', 'circle', 'square', 'disc', 'diamond',
|
||||
'rarrowhead')
|
||||
LOG_LEVELS = {
|
||||
'DEBUG': logging.DEBUG,
|
||||
'INFO': logging.INFO,
|
||||
'WARNING': logging.WARNING,
|
||||
'ERROR': logging.ERROR,
|
||||
'CRITICAL': logging.CRITICAL}
|
||||
|
||||
class IRML2PDF(zope.interface.Interface):
|
||||
"""This is the main public API of z3c.rml"""
|
||||
|
||||
def parseString(xml):
|
||||
"""Parse an XML string and convert it to PDF.
|
||||
|
||||
The output is a ``StringIO`` object.
|
||||
"""
|
||||
|
||||
def go(xmlInputName, outputFileName=None, outDir=None, dtdDir=None):
|
||||
"""Convert RML 2 PDF.
|
||||
|
||||
The generated file will be located in the ``outDir`` under the name
|
||||
``outputFileName``.
|
||||
"""
|
||||
|
||||
class IManager(zope.interface.Interface):
|
||||
"""A manager of all document-global variables."""
|
||||
names = zope.interface.Attribute("Names dict")
|
||||
styles = zope.interface.Attribute("Styles dict")
|
||||
colors = zope.interface.Attribute("Colors dict")
|
||||
|
||||
class IPostProcessorManager(zope.interface.Interface):
|
||||
"""Manages all post processors"""
|
||||
|
||||
postProcessors = zope.interface.Attribute(
|
||||
"List of tuples of the form: (name, processor)")
|
||||
|
||||
class ICanvasManager(zope.interface.Interface):
|
||||
"""A manager for the canvas."""
|
||||
canvas = zope.interface.Attribute("Canvas")
|
||||
|
||||
class IRMLDirectiveSignature(zope.interface.Interface):
|
||||
"""The attribute and sub-directives signature of the current
|
||||
RML directive."""
|
||||
|
||||
|
||||
class IRMLDirective(zope.interface.Interface):
|
||||
"""A directive in RML extracted from an Element Tree element."""
|
||||
|
||||
signature = zope.schema.Field(
|
||||
title=u'Signature',
|
||||
description=(u'The signature of the RML directive.'),
|
||||
required=True)
|
||||
|
||||
parent = zope.schema.Field(
|
||||
title=u'Parent RML Element',
|
||||
description=u'The parent in the RML element hierarchy',
|
||||
required=True,)
|
||||
|
||||
element = zope.schema.Field(
|
||||
title=u'Element',
|
||||
description=(u'The Element Tree element from which the data '
|
||||
u'is retrieved.'),
|
||||
required=True)
|
||||
|
||||
def getAttributeValues(ignore=None, select=None, includeMissing=False):
|
||||
"""Return a list of name-value-tuples based on the signature.
|
||||
|
||||
If ``ignore`` is specified, all attributes are returned except the
|
||||
ones listed in the argument. The values of the sequence are the
|
||||
attribute names.
|
||||
|
||||
If ``select`` is specified, only attributes listed in the argument are
|
||||
returned. The values of the sequence are the attribute names.
|
||||
|
||||
If ``includeMissing`` is set to true, then even missing attributes are
|
||||
included in the value list.
|
||||
"""
|
||||
|
||||
def processSubDirectives(self):
|
||||
"""Process all sub-directives."""
|
||||
|
||||
def process(self):
|
||||
"""Process the directive.
|
||||
|
||||
The main task for this method is to interpret the available data and
|
||||
to make the corresponding calls in the Reportlab document.
|
||||
|
||||
This call should also process all sub-directives and process them.
|
||||
"""
|
||||
|
||||
|
||||
class IDeprecated(zope.interface.Interface):
|
||||
"""Mark an attribute as being compatible."""
|
||||
|
||||
deprecatedName = zope.schema.TextLine(
|
||||
title=u'Name',
|
||||
description=u'The name of the original attribute.',
|
||||
required=True)
|
||||
|
||||
deprecatedReason = zope.schema.Text(
|
||||
title=u'Reason',
|
||||
description=u'The reason the attribute has been deprecated.',
|
||||
required=False)
|
||||
|
||||
|
||||
class IDeprecatedDirective(zope.interface.interfaces.IInterface):
|
||||
"""A directive that is deprecated."""
|
||||
181
z3c/rml/list.py
Normal file
181
z3c/rml/list.py
Normal file
@@ -0,0 +1,181 @@
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2012 Zope Foundation and Contributors.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# This software is subject to the provisions of the Zope Public License,
|
||||
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
|
||||
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
|
||||
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
##############################################################################
|
||||
"""``ul``, ``ol``, and ``li`` directives.
|
||||
"""
|
||||
__docformat__ = "reStructuredText"
|
||||
import copy
|
||||
import reportlab.lib.styles
|
||||
import reportlab.platypus
|
||||
import zope.schema
|
||||
from reportlab.platypus import flowables
|
||||
|
||||
from z3c.rml import attr, directive, flowable, interfaces, occurence, stylesheet
|
||||
|
||||
|
||||
class IListItem(stylesheet.IMinimalListStyle, flowable.IFlow):
|
||||
"""A list item in an ordered or unordered list."""
|
||||
|
||||
style = attr.Style(
|
||||
title=u'Style',
|
||||
description=u'The list style that is applied to the list.',
|
||||
required=False)
|
||||
|
||||
class ListItem(flowable.Flow):
|
||||
signature = IListItem
|
||||
klass = reportlab.platypus.ListItem
|
||||
attrMapping = {}
|
||||
|
||||
styleAttributes = zope.schema.getFieldNames(stylesheet.IMinimalListStyle)
|
||||
|
||||
def processStyle(self, style):
|
||||
attrs = self.getAttributeValues(select=self.styleAttributes)
|
||||
if attrs or not hasattr(style, 'value'):
|
||||
style = copy.deepcopy(style)
|
||||
# Sigh, this is needed since unordered list items expect the value.
|
||||
style.value = style.start
|
||||
for name, value in attrs:
|
||||
setattr(style, name, value)
|
||||
return style
|
||||
|
||||
def process(self):
|
||||
self.processSubDirectives()
|
||||
args = dict(self.getAttributeValues(ignore=self.styleAttributes))
|
||||
if 'style' not in args:
|
||||
args['style'] = self.parent.baseStyle
|
||||
args['style'] = self.processStyle(args['style'])
|
||||
li = self.klass(self.flow, **args)
|
||||
self.parent.flow.append(li)
|
||||
|
||||
|
||||
class IOrderedListItem(IListItem):
|
||||
"""An ordered list item."""
|
||||
|
||||
value = attr.Integer(
|
||||
title=u'Bullet Value',
|
||||
description=u'The counter value.',
|
||||
required=False)
|
||||
|
||||
class OrderedListItem(ListItem):
|
||||
signature = IOrderedListItem
|
||||
|
||||
|
||||
class IUnorderedListItem(IListItem):
|
||||
"""An ordered list item."""
|
||||
|
||||
value = attr.Choice(
|
||||
title=u'Bullet Value',
|
||||
description=u'The type of bullet character.',
|
||||
choices=interfaces.UNORDERED_BULLET_VALUES,
|
||||
required=False)
|
||||
|
||||
class UnorderedListItem(ListItem):
|
||||
signature = IUnorderedListItem
|
||||
|
||||
styleAttributes = ListItem.styleAttributes + ['value']
|
||||
|
||||
|
||||
class IListBase(stylesheet.IBaseListStyle):
|
||||
|
||||
style = attr.Style(
|
||||
title=u'Style',
|
||||
description=u'The list style that is applied to the list.',
|
||||
required=False)
|
||||
|
||||
class ListBase(directive.RMLDirective):
|
||||
klass = reportlab.platypus.ListFlowable
|
||||
factories = {'li': ListItem}
|
||||
attrMapping = {}
|
||||
|
||||
styleAttributes = zope.schema.getFieldNames(stylesheet.IBaseListStyle)
|
||||
|
||||
def __init__(self, *args, **kw):
|
||||
super(ListBase, self).__init__(*args, **kw)
|
||||
self.flow = []
|
||||
|
||||
def processStyle(self, style):
|
||||
attrs = self.getAttributeValues(
|
||||
select=self.styleAttributes, attrMapping=self.attrMapping)
|
||||
if attrs:
|
||||
style = copy.deepcopy(style)
|
||||
for name, value in attrs:
|
||||
setattr(style, name, value)
|
||||
return style
|
||||
|
||||
def process(self):
|
||||
args = dict(self.getAttributeValues(
|
||||
ignore=self.styleAttributes, attrMapping=self.attrMapping))
|
||||
if 'style' not in args:
|
||||
args['style'] = reportlab.lib.styles.ListStyle('List')
|
||||
args['style'] = self.baseStyle = self.processStyle(args['style'])
|
||||
self.processSubDirectives()
|
||||
li = self.klass(self.flow, **args)
|
||||
self.parent.flow.append(li)
|
||||
|
||||
|
||||
class IOrderedList(IListBase):
|
||||
"""An ordered list."""
|
||||
occurence.containing(
|
||||
occurence.ZeroOrMore('li', IOrderedListItem),
|
||||
)
|
||||
|
||||
bulletType = attr.Choice(
|
||||
title=u'Bullet Type',
|
||||
description=u'The type of bullet formatting.',
|
||||
choices=interfaces.ORDERED_LIST_TYPES,
|
||||
doLower=False,
|
||||
required=False)
|
||||
|
||||
class OrderedList(ListBase):
|
||||
signature = IOrderedList
|
||||
factories = {'li': OrderedListItem}
|
||||
|
||||
styleAttributes = ListBase.styleAttributes + ['bulletType']
|
||||
|
||||
|
||||
class IUnorderedList(IListBase):
|
||||
"""And unordered list."""
|
||||
occurence.containing(
|
||||
occurence.ZeroOrMore('li', IUnorderedListItem),
|
||||
)
|
||||
|
||||
value = attr.Choice(
|
||||
title=u'Bullet Value',
|
||||
description=u'The type of bullet character.',
|
||||
choices=interfaces.UNORDERED_BULLET_VALUES,
|
||||
default='disc',
|
||||
required=False)
|
||||
|
||||
class UnorderedList(ListBase):
|
||||
signature = IUnorderedList
|
||||
attrMapping = {'value': 'start'}
|
||||
factories = {'li': UnorderedListItem}
|
||||
|
||||
def getAttributeValues(self, *args, **kw):
|
||||
res = super(UnorderedList, self).getAttributeValues(*args, **kw)
|
||||
res.append(('bulletType', 'bullet'))
|
||||
return res
|
||||
|
||||
flowable.Flow.factories['ol'] = OrderedList
|
||||
flowable.IFlow.setTaggedValue(
|
||||
'directives',
|
||||
flowable.IFlow.getTaggedValue('directives') +
|
||||
(occurence.ZeroOrMore('ol', IOrderedList),)
|
||||
)
|
||||
|
||||
flowable.Flow.factories['ul'] = UnorderedList
|
||||
flowable.IFlow.setTaggedValue(
|
||||
'directives',
|
||||
flowable.IFlow.getTaggedValue('directives') +
|
||||
(occurence.ZeroOrMore('ul', IUnorderedList),)
|
||||
)
|
||||
113
z3c/rml/occurence.py
Normal file
113
z3c/rml/occurence.py
Normal file
@@ -0,0 +1,113 @@
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2007 Zope Foundation and Contributors.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# This software is subject to the provisions of the Zope Public License,
|
||||
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
|
||||
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
|
||||
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
##############################################################################
|
||||
"""Condition Implementation
|
||||
"""
|
||||
import reportlab
|
||||
import sys
|
||||
import zope.interface
|
||||
import zope.schema
|
||||
from zope.schema import fieldproperty
|
||||
|
||||
class ICondition(zope.interface.Interface):
|
||||
"""Condition that is checked before a directive is available."""
|
||||
|
||||
__doc__ = zope.schema.TextLine(
|
||||
title=u'Description',
|
||||
description=u'The description of the condition.',
|
||||
required=True)
|
||||
|
||||
def __call__(directive):
|
||||
"""Check whether the condition is fulfilled for the given directive."""
|
||||
|
||||
|
||||
class IOccurence(zope.interface.Interface):
|
||||
"""Description of the occurence of a sub-directive."""
|
||||
|
||||
__doc__ = zope.schema.TextLine(
|
||||
title=u'Description',
|
||||
description=u'The description of the occurence.',
|
||||
required=True)
|
||||
|
||||
tag = zope.schema.BytesLine(
|
||||
title=u'Tag',
|
||||
description=u'The tag of the sub-directive within the directive',
|
||||
required=True)
|
||||
|
||||
signature = zope.schema.Field(
|
||||
title=u'Signature',
|
||||
description=u'The signature of the sub-directive.',
|
||||
required=True)
|
||||
|
||||
condition = zope.schema.Field(
|
||||
title=u'Condition',
|
||||
description=u'The condition that the directive is available.',
|
||||
required=False)
|
||||
|
||||
|
||||
@zope.interface.implementer(ICondition)
|
||||
def laterThanReportlab21(directive):
|
||||
"""The directive is only available in Reportlab 2.1 and higher."""
|
||||
return [int(num) for num in reportlab.Version.split('.')] >= (2, 0)
|
||||
|
||||
|
||||
def containing(*occurences):
|
||||
frame = sys._getframe(1)
|
||||
f_locals = frame.f_locals
|
||||
f_globals = frame.f_globals
|
||||
|
||||
if not (f_locals is not f_globals
|
||||
and f_locals.get('__module__')
|
||||
and f_locals.get('__module__') == f_globals.get('__name__')
|
||||
):
|
||||
raise TypeError("contains not called from signature interface")
|
||||
|
||||
f_locals['__interface_tagged_values__'] = {'directives': occurences}
|
||||
|
||||
|
||||
class Occurence(object):
|
||||
zope.interface.implements(IOccurence)
|
||||
|
||||
tag = fieldproperty.FieldProperty(IOccurence['tag'])
|
||||
signature = fieldproperty.FieldProperty(IOccurence['signature'])
|
||||
condition = fieldproperty.FieldProperty(IOccurence['condition'])
|
||||
|
||||
def __init__(self, tag, signature, condition=None):
|
||||
self.tag = tag
|
||||
self.signature = signature
|
||||
self.condition = condition
|
||||
|
||||
|
||||
class ZeroOrMore(Occurence):
|
||||
"""Zero or More
|
||||
|
||||
This sub-directive can occur zero or more times.
|
||||
"""
|
||||
|
||||
class ZeroOrOne(Occurence):
|
||||
"""Zero or one
|
||||
|
||||
This sub-directive can occur zero or one time.
|
||||
"""
|
||||
|
||||
class OneOrMore(Occurence):
|
||||
"""One or More
|
||||
|
||||
This sub-directive can occur one or more times.
|
||||
"""
|
||||
|
||||
class One(Occurence):
|
||||
"""One
|
||||
|
||||
This sub-directive must occur exactly one time.
|
||||
"""
|
||||
115
z3c/rml/page.py
Normal file
115
z3c/rml/page.py
Normal file
@@ -0,0 +1,115 @@
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2007 Zope Foundation and Contributors.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# This software is subject to the provisions of the Zope Public License,
|
||||
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
|
||||
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
|
||||
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
##############################################################################
|
||||
"""Page Drawing Related Element Processing
|
||||
"""
|
||||
import cStringIO
|
||||
from z3c.rml import attr, directive, interfaces
|
||||
|
||||
try:
|
||||
import PyPDF2
|
||||
from PyPDF2.generic import NameObject
|
||||
except ImportError:
|
||||
# We don't want to require pyPdf, if you do not want to use the features
|
||||
# in this module.
|
||||
PyPDF2 = None
|
||||
|
||||
|
||||
class MergePostProcessor(object):
|
||||
|
||||
def __init__(self):
|
||||
self.operations = {}
|
||||
|
||||
def process(self, inputFile1):
|
||||
input1 = PyPDF2.PdfFileReader(inputFile1)
|
||||
output = PyPDF2.PdfFileWriter()
|
||||
# TODO: Do not access protected classes
|
||||
output._info.getObject().update(input1.documentInfo)
|
||||
if output._root:
|
||||
# Backwards-compatible with PyPDF2 version 1.21
|
||||
output._root.getObject()[NameObject("/Outlines")] = (
|
||||
output._addObject(input1.trailer["/Root"]["/Outlines"]))
|
||||
else:
|
||||
# Compatible with PyPDF2 version 1.22+
|
||||
output._root_object[NameObject("/Outlines")] = (
|
||||
output._addObject(input1.trailer["/Root"]["/Outlines"]))
|
||||
for (num, page) in enumerate(input1.pages):
|
||||
if num in self.operations:
|
||||
for mergeFile, mergeNumber in self.operations[num]:
|
||||
merger = PyPDF2.PdfFileReader(mergeFile)
|
||||
mergerPage = merger.getPage(mergeNumber)
|
||||
mergerPage.mergePage(page)
|
||||
page = mergerPage
|
||||
output.addPage(page)
|
||||
|
||||
outputFile = cStringIO.StringIO()
|
||||
output.write(outputFile)
|
||||
return outputFile
|
||||
|
||||
|
||||
class IMergePage(interfaces.IRMLDirectiveSignature):
|
||||
"""Merges an existing PDF Page into the one to be generated."""
|
||||
|
||||
filename = attr.File(
|
||||
title=u'File',
|
||||
description=(u'Reference to the PDF file to extract the page from.'),
|
||||
required=True)
|
||||
|
||||
page = attr.Integer(
|
||||
title=u'Page Number',
|
||||
description=u'The page number of the PDF file that is used to merge..',
|
||||
required=True)
|
||||
|
||||
|
||||
class MergePage(directive.RMLDirective):
|
||||
signature = IMergePage
|
||||
|
||||
def getProcessor(self):
|
||||
manager = attr.getManager(self, interfaces.IPostProcessorManager)
|
||||
procs = dict(manager.postProcessors)
|
||||
if 'MERGE' not in procs:
|
||||
proc = MergePostProcessor()
|
||||
manager.postProcessors.append(('MERGE', proc))
|
||||
return proc
|
||||
return procs['MERGE']
|
||||
|
||||
def process(self):
|
||||
if PyPDF2 is None:
|
||||
raise Exception(
|
||||
'pyPdf is not installed, so this feature is not available.')
|
||||
inputFile, inPage = self.getAttributeValues(valuesOnly=True)
|
||||
manager = attr.getManager(self, interfaces.ICanvasManager)
|
||||
outPage = manager.canvas.getPageNumber()-1
|
||||
|
||||
proc = self.getProcessor()
|
||||
pageOperations = proc.operations.setdefault(outPage, [])
|
||||
pageOperations.append((inputFile, inPage))
|
||||
|
||||
|
||||
class MergePageInPageTemplate(MergePage):
|
||||
|
||||
def process(self):
|
||||
if PyPDF2 is None:
|
||||
raise Exception(
|
||||
'pyPdf is not installed, so this feature is not available.')
|
||||
inputFile, inPage = self.getAttributeValues(valuesOnly=True)
|
||||
|
||||
onPage = self.parent.pt.onPage
|
||||
def drawOnCanvas(canvas, doc):
|
||||
onPage(canvas, doc)
|
||||
outPage = canvas.getPageNumber()-1
|
||||
proc = self.getProcessor()
|
||||
pageOperations = proc.operations.setdefault(outPage, [])
|
||||
pageOperations.append((inputFile, inPage))
|
||||
|
||||
self.parent.pt.onPage = drawOnCanvas
|
||||
45
z3c/rml/pagetemplate.py
Normal file
45
z3c/rml/pagetemplate.py
Normal file
@@ -0,0 +1,45 @@
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2007 Zope Foundation and Contributors.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# This software is subject to the provisions of the Zope Public License,
|
||||
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
|
||||
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
|
||||
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
##############################################################################
|
||||
"""Page Template Support
|
||||
"""
|
||||
import zope
|
||||
from z3c.rml import rml2pdf
|
||||
|
||||
try:
|
||||
import zope.pagetemplate.pagetemplatefile
|
||||
except ImportError, err:
|
||||
raise
|
||||
# zope.pagetemplate package has not been installed
|
||||
import types
|
||||
zope.pagetemplate = types.ModuleType('pagetemplate')
|
||||
zope.pagetemplate.pagetemplatefile = types.ModuleType('pagetemplatefile')
|
||||
zope.pagetemplate.pagetemplatefile.PageTemplateFile = object
|
||||
|
||||
|
||||
class RMLPageTemplateFile(zope.pagetemplate.pagetemplatefile.PageTemplateFile):
|
||||
|
||||
def pt_getContext(self, args=(), options=None, **ignore):
|
||||
rval = {'template': self,
|
||||
'args': args,
|
||||
'nothing': None,
|
||||
'context': options
|
||||
}
|
||||
rval.update(self.pt_getEngine().getBaseNames())
|
||||
return rval
|
||||
|
||||
def __call__(self, *args, **kwargs):
|
||||
rml = super(RMLPageTemplateFile, self).__call__(*args, **kwargs)
|
||||
|
||||
return rml2pdf.parseString(
|
||||
rml, filename=self.pt_source_file()).getvalue()
|
||||
54
z3c/rml/pagetemplate.txt
Normal file
54
z3c/rml/pagetemplate.txt
Normal file
@@ -0,0 +1,54 @@
|
||||
==================
|
||||
RML Page Templates
|
||||
==================
|
||||
|
||||
This package also provides optional support a helper class to use page
|
||||
templates with RML without using the entire Zope framework. This document will
|
||||
demonstrate how to use page templates and RML together.
|
||||
|
||||
In this example, we will simply iterate through a list of names and display
|
||||
them in the PDF.
|
||||
|
||||
The first step is to create a page template:
|
||||
|
||||
>>> import tempfile
|
||||
>>> ptFileName = tempfile.mktemp('.pt')
|
||||
>>> open(ptFileName, 'w').write('''\
|
||||
... <?xml version="1.0" encoding="UTF-8" ?>
|
||||
... <!DOCTYPE document SYSTEM "rml.dtd">
|
||||
... <document filename="template.pdf"
|
||||
... xmlns:tal="http://xml.zope.org/namespaces/tal">
|
||||
...
|
||||
... <template pageSize="(21cm, 29cm)">
|
||||
... <pageTemplate id="main">
|
||||
... <frame id="main" x1="2cm" y1="2cm"
|
||||
... width="17cm" height="25cm" />
|
||||
... </pageTemplate>
|
||||
... </template>
|
||||
...
|
||||
... <story>
|
||||
... <para
|
||||
... tal:repeat="name context/names"
|
||||
... tal:content="name" />
|
||||
... </story>
|
||||
...
|
||||
... </document>
|
||||
... ''')
|
||||
|
||||
The ``context`` namespace will be created during rendering. I get back to this
|
||||
later. In th enext step we instantiate the page template:
|
||||
|
||||
>>> from z3c.rml import pagetemplate
|
||||
>>> rmlPageTemplate = pagetemplate.RMLPageTemplateFile(ptFileName)
|
||||
|
||||
All we have to do now is to render the template. The context of the template
|
||||
is effectively the keyword arguments dictionary:
|
||||
|
||||
>>> rmlPageTemplate(names=(u'Roy', u'Daniel', u'Julian', u'Stephan'))
|
||||
'%PDF-1.4...'
|
||||
|
||||
You can uncomment the following line to write out the PDF in the current
|
||||
working directory:
|
||||
|
||||
#>>> open('pagetemplate-test.pdf', 'w').write(
|
||||
#... rmlPageTemplate(names=(u'Roy', u'Daniel', u'Julian', u'Stephan')))
|
||||
181
z3c/rml/paraparser.py
Normal file
181
z3c/rml/paraparser.py
Normal file
@@ -0,0 +1,181 @@
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2007-2008 Zope Foundation and Contributors.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# This software is subject to the provisions of the Zope Public License,
|
||||
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
|
||||
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
|
||||
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
##############################################################################
|
||||
"""Paragraph-internal XML parser extensions.
|
||||
"""
|
||||
import copy
|
||||
import inspect
|
||||
|
||||
import reportlab.lib.fonts
|
||||
import reportlab.platypus.paraparser
|
||||
|
||||
|
||||
class PageNumberFragment(reportlab.platypus.paraparser.ParaFrag):
|
||||
"""A fragment whose `text` is computed at access time."""
|
||||
|
||||
def __init__(self, **attributes):
|
||||
reportlab.platypus.paraparser.ParaFrag.__init__(self, **attributes)
|
||||
self.counting_from = attributes.get('countingFrom', 1)
|
||||
|
||||
@property
|
||||
def text(self):
|
||||
# Guess 1: We're in a paragraph in a story.
|
||||
frame = inspect.currentframe(4)
|
||||
canvas = frame.f_locals.get('canvas', None)
|
||||
|
||||
if canvas is None:
|
||||
# Guess 2: We're in a template
|
||||
canvas = frame.f_locals.get('canv', None)
|
||||
|
||||
if canvas is None:
|
||||
# Guess 3: We're in evalString or namedString
|
||||
canvas = getattr(frame.f_locals.get('self', None), 'canv', None)
|
||||
|
||||
if canvas is None:
|
||||
raise Exception("Can't use <pageNumber/> in this location.")
|
||||
|
||||
return str(canvas.getPageNumber() + int(self.counting_from) - 1)
|
||||
|
||||
|
||||
class GetNameFragment(reportlab.platypus.paraparser.ParaFrag):
|
||||
"""A fragment whose `text` is computed at access time."""
|
||||
|
||||
def __init__(self, **attributes):
|
||||
reportlab.platypus.paraparser.ParaFrag.__init__(self, **attributes)
|
||||
self.id = attributes['id']
|
||||
self.default = attributes.get('default')
|
||||
|
||||
@property
|
||||
def text(self):
|
||||
# Guess 1: We're in a paragraph in a story.
|
||||
frame = inspect.currentframe(4)
|
||||
canvas = frame.f_locals.get('canvas', None)
|
||||
|
||||
if canvas is None:
|
||||
# Guess 2: We're in a template
|
||||
canvas = frame.f_locals.get('canv', None)
|
||||
|
||||
if canvas is None:
|
||||
# Guess 3: We're in evalString or namedString
|
||||
canvas = getattr(frame.f_locals.get('self', None), 'canv', None)
|
||||
|
||||
if canvas is None:
|
||||
raise Exception("Can't use <getName/> in this location.")
|
||||
|
||||
return canvas.manager.get_name(self.id, self.default)
|
||||
|
||||
|
||||
class EvalStringFragment(reportlab.platypus.paraparser.ParaFrag):
|
||||
"""A fragment whose `text` is evaluated at access time."""
|
||||
|
||||
def __init__(self, **attributes):
|
||||
reportlab.platypus.paraparser.ParaFrag.__init__(self, **attributes)
|
||||
self.frags = []
|
||||
|
||||
@property
|
||||
def text(self):
|
||||
text = u''
|
||||
for frag in self.frags:
|
||||
if isinstance(frag, basestring):
|
||||
text += frag
|
||||
else:
|
||||
text += frag.text
|
||||
from z3c.rml.special import do_eval
|
||||
return do_eval(text)
|
||||
|
||||
|
||||
class NameFragment(reportlab.platypus.paraparser.ParaFrag):
|
||||
"""A fragment whose attribute `value` is set to a variable."""
|
||||
|
||||
def __init__(self, **attributes):
|
||||
reportlab.platypus.paraparser.ParaFrag.__init__(self, **attributes)
|
||||
|
||||
@property
|
||||
def text(self):
|
||||
# Guess 1: We're in a paragraph in a story.
|
||||
frame = inspect.currentframe(4)
|
||||
canvas = frame.f_locals.get('canvas', None)
|
||||
|
||||
if canvas is None:
|
||||
# Guess 2: We're in a template
|
||||
canvas = frame.f_locals.get('canv', None)
|
||||
|
||||
if canvas is None:
|
||||
# Guess 3: We're in evalString or namedString
|
||||
canvas = getattr(frame.f_locals.get('self', None), 'canv', None)
|
||||
|
||||
if canvas is None:
|
||||
raise Exception("Can't use <name> in this location.")
|
||||
|
||||
canvas.manager.names[self.id] = self.value
|
||||
return u''
|
||||
|
||||
|
||||
class Z3CParagraphParser(reportlab.platypus.paraparser.ParaParser):
|
||||
"""Extensions to paragraph-internal XML parsing."""
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
reportlab.platypus.paraparser.ParaParser.__init__(self, *args, **kwargs)
|
||||
self.in_eval = False
|
||||
|
||||
def startDynamic(self, attributes, klass):
|
||||
frag = klass(**attributes)
|
||||
frag.__dict__.update(self._stack[-1].__dict__)
|
||||
frag.fontName = reportlab.lib.fonts.tt2ps(
|
||||
frag.fontName, frag.bold, frag.italic)
|
||||
if self.in_eval:
|
||||
self._stack[-1].frags.append(frag)
|
||||
else:
|
||||
self.fragList.append(frag)
|
||||
self._stack.append(frag)
|
||||
|
||||
def endDynamic(self):
|
||||
if not self.in_eval:
|
||||
self._pop()
|
||||
|
||||
def start_pagenumber(self, attributes):
|
||||
self.startDynamic(attributes, PageNumberFragment)
|
||||
|
||||
def end_pagenumber(self):
|
||||
self.endDynamic()
|
||||
|
||||
def start_getname(self, attributes):
|
||||
self.startDynamic(attributes, GetNameFragment)
|
||||
|
||||
def end_getname(self):
|
||||
self.endDynamic()
|
||||
|
||||
def start_name(self, attributes):
|
||||
self.startDynamic(attributes, NameFragment)
|
||||
|
||||
def end_name(self):
|
||||
self.endDynamic()
|
||||
|
||||
def start_evalstring(self, attributes):
|
||||
self.startDynamic(attributes, EvalStringFragment)
|
||||
self.in_eval = True
|
||||
|
||||
def end_evalstring(self):
|
||||
self.in_eval = False
|
||||
self.endDynamic()
|
||||
|
||||
def handle_data(self, data):
|
||||
if not self.in_eval:
|
||||
reportlab.platypus.paraparser.ParaParser.handle_data(self, data)
|
||||
else:
|
||||
frag = self._stack[-1].frags.append(data)
|
||||
|
||||
|
||||
# Monkey-patch reportlabs global parser instance. Wah.
|
||||
import reportlab.platypus.paragraph
|
||||
reportlab.platypus.paragraph.ParaParser = Z3CParagraphParser
|
||||
149
z3c/rml/pdfinclude.py
Normal file
149
z3c/rml/pdfinclude.py
Normal file
@@ -0,0 +1,149 @@
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2012 Zope Foundation and Contributors.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# This software is subject to the provisions of the Zope Public License,
|
||||
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
|
||||
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
|
||||
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
##############################################################################
|
||||
"""``pdfInclude`` Directive.
|
||||
"""
|
||||
__docformat__ = "reStructuredText"
|
||||
import cStringIO
|
||||
try:
|
||||
import PyPDF2
|
||||
from PyPDF2.generic import NameObject
|
||||
except ImportError:
|
||||
PyPDF2 = None
|
||||
from reportlab.platypus import flowables
|
||||
|
||||
from z3c.rml import attr, flowable, interfaces, occurence, page
|
||||
|
||||
class ConcatenationPostProcessor(object):
|
||||
|
||||
def __init__(self):
|
||||
self.operations = []
|
||||
|
||||
def process(self, inputFile1):
|
||||
input1 = PyPDF2.PdfFileReader(inputFile1)
|
||||
merger = PyPDF2.PdfFileMerger()
|
||||
merger.output._info.getObject().update(input1.documentInfo)
|
||||
|
||||
prev_insert = 0
|
||||
for start_page, inputFile2, pages, num_pages in self.operations:
|
||||
if prev_insert < start_page:
|
||||
merger.append(inputFile1, pages=(prev_insert, start_page))
|
||||
if not pages:
|
||||
merger.append(inputFile2)
|
||||
else:
|
||||
# Note, users start counting at 1. ;-)
|
||||
for page in pages:
|
||||
merger.append(inputFile2, pages=(page-1, page))
|
||||
prev_insert = start_page + num_pages
|
||||
|
||||
input1 = PyPDF2.PdfFileReader(inputFile1)
|
||||
num_pages = input1.getNumPages()
|
||||
if prev_insert < num_pages:
|
||||
merger.append(
|
||||
inputFile1, pages=(prev_insert, num_pages))
|
||||
|
||||
outputFile = cStringIO.StringIO()
|
||||
merger.write(outputFile)
|
||||
return outputFile
|
||||
|
||||
|
||||
class PDFPageFlowable(flowables.Flowable):
|
||||
|
||||
def __init__(self, width, height):
|
||||
flowables.Flowable.__init__(self)
|
||||
self.width = width
|
||||
self.height = height
|
||||
|
||||
def draw(self):
|
||||
pass
|
||||
|
||||
def split(self, availWidth, availheight):
|
||||
return [self]
|
||||
|
||||
|
||||
class IncludePdfPagesFlowable(flowables.Flowable):
|
||||
|
||||
def __init__(self, pdf_file, pages, concatprocessor):
|
||||
flowables.Flowable.__init__(self)
|
||||
self.pdf_file = pdf_file
|
||||
self.proc = concatprocessor
|
||||
self.pages = pages
|
||||
|
||||
self.width = 10<<32
|
||||
self.height = 10<<32
|
||||
|
||||
def draw():
|
||||
return NotImplementedError('PDFPages shall be drawn not me')
|
||||
|
||||
def split(self, availWidth, availheight):
|
||||
pages = self.pages
|
||||
if not pages:
|
||||
pdf = PyPDF2.PdfFileReader(self.pdf_file)
|
||||
num_pages = pdf.getNumPages()
|
||||
pages = range(num_pages)
|
||||
else:
|
||||
num_pages = len(pages)
|
||||
|
||||
start_page = self.canv.getPageNumber()
|
||||
self.proc.operations.append(
|
||||
(start_page, self.pdf_file, self.pages, num_pages))
|
||||
|
||||
result = []
|
||||
for i in pages:
|
||||
result.append(flowables.PageBreak())
|
||||
result.append(PDFPageFlowable(availWidth, availheight))
|
||||
return result
|
||||
|
||||
|
||||
class IIncludePdfPages(interfaces.IRMLDirectiveSignature):
|
||||
"""Inserts a set of pages from a given PDF."""
|
||||
|
||||
filename = attr.File(
|
||||
title=u'Path to file',
|
||||
description=u'The pdf file to include.',
|
||||
required=True)
|
||||
|
||||
pages = attr.IntegerSequence(
|
||||
title=u'Pages',
|
||||
description=u'A list of pages to insert.',
|
||||
required=False)
|
||||
|
||||
|
||||
class IncludePdfPages(flowable.Flowable):
|
||||
signature = IIncludePdfPages
|
||||
|
||||
def getProcessor(self):
|
||||
manager = attr.getManager(self, interfaces.IPostProcessorManager)
|
||||
procs = dict(manager.postProcessors)
|
||||
if 'CONCAT' not in procs:
|
||||
proc = ConcatenationPostProcessor()
|
||||
manager.postProcessors.append(('CONCAT', proc))
|
||||
return proc
|
||||
return procs['CONCAT']
|
||||
|
||||
def process(self):
|
||||
if PyPDF2 is None:
|
||||
raise Exception(
|
||||
'PyPDF2 is not installed, so this feature is not available.')
|
||||
args = dict(self.getAttributeValues())
|
||||
proc = self.getProcessor()
|
||||
self.parent.flow.append(
|
||||
IncludePdfPagesFlowable(args['filename'], args.get('pages'), proc))
|
||||
|
||||
|
||||
flowable.Flow.factories['includePdfPages'] = IncludePdfPages
|
||||
flowable.IFlow.setTaggedValue(
|
||||
'directives',
|
||||
flowable.IFlow.getTaggedValue('directives') +
|
||||
(occurence.ZeroOrMore('includePdfPages', IIncludePdfPages),)
|
||||
)
|
||||
135
z3c/rml/platypus.py
Normal file
135
z3c/rml/platypus.py
Normal file
@@ -0,0 +1,135 @@
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2007 Zope Foundation and Contributors.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# This software is subject to the provisions of the Zope Public License,
|
||||
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
|
||||
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
|
||||
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
##############################################################################
|
||||
"""Style Related Element Processing
|
||||
"""
|
||||
import reportlab.platypus.flowables
|
||||
import reportlab.rl_config
|
||||
from reportlab.rl_config import overlapAttachedSpace
|
||||
import zope.interface
|
||||
|
||||
from z3c.rml import interfaces
|
||||
|
||||
# Fix problem with reportlab 2.0
|
||||
class KeepInFrame(reportlab.platypus.flowables.KeepInFrame):
|
||||
|
||||
def __init__(self, maxWidth, maxHeight, content=[], mergeSpace=1,
|
||||
mode='shrink', name=''):
|
||||
self.name = name
|
||||
self.maxWidth = maxWidth
|
||||
self.maxHeight = maxHeight
|
||||
self.mode = mode
|
||||
assert mode in ('error','overflow','shrink','truncate'), \
|
||||
'%s invalid mode value %s' % (self.identity(),mode)
|
||||
# This is an unnecessary check, since wrap() handles None just fine!
|
||||
#assert maxHeight>=0, \
|
||||
# '%s invalid maxHeight value %s' % (self.identity(),maxHeight)
|
||||
if mergeSpace is None: mergeSpace = overlapAttachedSpace
|
||||
self.mergespace = mergeSpace
|
||||
self._content = content
|
||||
|
||||
|
||||
class BaseFlowable(reportlab.platypus.flowables.Flowable):
|
||||
def __init__(self, *args, **kw):
|
||||
reportlab.platypus.flowables.Flowable.__init__(self)
|
||||
self.args = args
|
||||
self.kw = kw
|
||||
|
||||
def wrap(self, *args):
|
||||
return (0, 0)
|
||||
|
||||
def draw(self):
|
||||
pass
|
||||
|
||||
class Illustration(reportlab.platypus.flowables.Flowable):
|
||||
def __init__(self, processor, width, height):
|
||||
self.processor = processor
|
||||
self.width = width
|
||||
self.height = height
|
||||
|
||||
def wrap(self, *args):
|
||||
return (self.width, self.height)
|
||||
|
||||
def draw(self):
|
||||
# Import here to avoid recursive imports
|
||||
from z3c.rml import canvas
|
||||
self.canv.saveState()
|
||||
drawing = canvas.Drawing(
|
||||
self.processor.element, self.processor)
|
||||
zope.interface.alsoProvides(drawing, interfaces.ICanvasManager)
|
||||
drawing.canvas = self.canv
|
||||
drawing.process()
|
||||
self.canv.restoreState()
|
||||
|
||||
class BookmarkPage(BaseFlowable):
|
||||
def draw(self):
|
||||
self.canv.bookmarkPage(*self.args, **self.kw)
|
||||
|
||||
|
||||
class Bookmark(BaseFlowable):
|
||||
def draw(self):
|
||||
self.canv.bookmarkHorizontal(*self.args, **self.kw)
|
||||
|
||||
|
||||
class OutlineAdd(BaseFlowable):
|
||||
def draw(self):
|
||||
if self.kw.get('key', None) is None:
|
||||
self.kw['key'] = str(hash(self))
|
||||
self.canv.bookmarkPage(self.kw['key'])
|
||||
self.canv.addOutlineEntry(**self.kw)
|
||||
|
||||
|
||||
class Link(reportlab.platypus.flowables._Container,
|
||||
reportlab.platypus.flowables.Flowable):
|
||||
|
||||
def __init__(self, content, **args):
|
||||
self._content = content
|
||||
self.args = args
|
||||
|
||||
def wrap(self, availWidth, availHeight):
|
||||
self.width, self.height = reportlab.platypus.flowables._listWrapOn(
|
||||
self._content, availWidth, self.canv)
|
||||
return self.width, self.height
|
||||
|
||||
def drawOn(self, canv, x, y, _sW=0, scale=1.0, content=None, aW=None):
|
||||
'''we simulate being added to a frame'''
|
||||
pS = 0
|
||||
if aW is None: aW = self.width
|
||||
aW = scale*(aW+_sW)
|
||||
if content is None:
|
||||
content = self._content
|
||||
y += self.height*scale
|
||||
|
||||
startX = x
|
||||
startY = y
|
||||
totalWidth = 0
|
||||
totalHeight = 0
|
||||
|
||||
for c in content:
|
||||
w, h = c.wrapOn(canv,aW,0xfffffff)
|
||||
if w < reportlab.rl_config._FUZZ or h < reportlab.rl_config._FUZZ:
|
||||
continue
|
||||
if c is not content[0]: h += max(c.getSpaceBefore()-pS,0)
|
||||
y -= h
|
||||
c.drawOn(canv,x,y,_sW=aW-w)
|
||||
if c is not content[-1]:
|
||||
pS = c.getSpaceAfter()
|
||||
y -= pS
|
||||
totalWidth += w
|
||||
totalHeight += h
|
||||
rectangle = [startX, startY-totalHeight,
|
||||
startX+totalWidth, startY]
|
||||
if 'url' in self.args:
|
||||
canv.linkURL(rect=rectangle, **self.args)
|
||||
else:
|
||||
canv.linkAbsolute('', Rect=rectangle, **self.args)
|
||||
294
z3c/rml/reference.pt
Normal file
294
z3c/rml/reference.pt
Normal file
@@ -0,0 +1,294 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE document SYSTEM "rml.dtd">
|
||||
|
||||
<document
|
||||
filename="rml-reference.pdf"
|
||||
xmlns:tal="http://xml.zope.org/namespaces/tal"
|
||||
>
|
||||
|
||||
<docinit>
|
||||
<registerFont name="ZapfDingbats" faceName="ZapfDingbats"
|
||||
encName="StandardEncoding"/>
|
||||
</docinit>
|
||||
|
||||
<stylesheet>
|
||||
<paraStyle
|
||||
name="section-header"
|
||||
fontName="Helvetica-Bold"
|
||||
fontSize="36"
|
||||
leading="42"
|
||||
spaceAfter="30"
|
||||
/>
|
||||
<paraStyle
|
||||
name="content"
|
||||
fontName="Times-Roman"
|
||||
fontSize="12"
|
||||
spaceAfter="5"
|
||||
/>
|
||||
<paraStyle
|
||||
name="deprecation"
|
||||
fontName="Times-Roman"
|
||||
fontSize="12"
|
||||
textColor="red"
|
||||
/>
|
||||
<paraStyle
|
||||
name="attribute-type-name"
|
||||
fontName="Times-Bold"
|
||||
fontSize="14"
|
||||
spaceBefore="10"
|
||||
spaceAfter="5"
|
||||
keepWithNext="true"
|
||||
/>
|
||||
<paraStyle
|
||||
name="element-name"
|
||||
fontName="Times-Bold"
|
||||
fontSize="14"
|
||||
spaceBefore="10"
|
||||
spaceAfter="5"
|
||||
keepWithNext="true"
|
||||
/>
|
||||
<paraStyle
|
||||
name="element-subtitle"
|
||||
fontName="Times-Bold"
|
||||
fontSize="12"
|
||||
spaceBefore="10"
|
||||
spaceAfter="5"
|
||||
/>
|
||||
<paraStyle
|
||||
name="attribute-name"
|
||||
fontName="Times-Roman"
|
||||
fontSize="11"
|
||||
leftIndent="0.5cm"
|
||||
spaceBefore="5"
|
||||
/>
|
||||
<paraStyle
|
||||
name="field-deprecation"
|
||||
fontName="Times-Roman"
|
||||
fontSize="10"
|
||||
leftIndent="0.9cm"
|
||||
textColor="red"
|
||||
/>
|
||||
<paraStyle
|
||||
name="field-description"
|
||||
fontName="Times-Roman"
|
||||
fontSize="10"
|
||||
leftIndent="0.9cm"
|
||||
/>
|
||||
<paraStyle
|
||||
name="sub-directive"
|
||||
fontName="Times-Roman"
|
||||
fontSize="10"
|
||||
leftIndent="0.5cm"
|
||||
/>
|
||||
<paraStyle
|
||||
name="example-info"
|
||||
fontName="Times-Roman"
|
||||
fontSize="10"
|
||||
leftIndent="0.5cm"
|
||||
spaceAfter="5"
|
||||
/>
|
||||
<paraStyle
|
||||
name="code"
|
||||
fontName="Courier"
|
||||
fontSize="10"
|
||||
leftIndent="0.5cm"
|
||||
/>
|
||||
<blockTableStyle id="plain">
|
||||
<blockLeftPadding length="0" />
|
||||
</blockTableStyle>
|
||||
</stylesheet>
|
||||
|
||||
<template
|
||||
pageSize="A4"
|
||||
allowSplitting="true"
|
||||
title="z3c.RML Reference"
|
||||
author="Zope Community">
|
||||
|
||||
<pageTemplate id="first-page">
|
||||
<pageGraphics>
|
||||
<setFont name="Helvetica" size="48" />
|
||||
<drawCenteredString x="10.5cm" y="20cm">
|
||||
z3c.RML Reference
|
||||
</drawCenteredString>
|
||||
<setFont name="Helvetica" size="24" />
|
||||
<drawCenteredString x="10.5cm" y="18.5cm">
|
||||
Version 2.1
|
||||
</drawCenteredString>
|
||||
</pageGraphics>
|
||||
<frame id="main" x1="3cm" y1="2cm" width="17cm" height="25.7cm" />
|
||||
</pageTemplate>
|
||||
|
||||
<pageTemplate id="main">
|
||||
<frame id="main" x1="2cm" y1="2cm" width="17cm" height="25.7cm" />
|
||||
</pageTemplate>
|
||||
|
||||
</template>
|
||||
|
||||
<story firstPageTemplate="first-page">
|
||||
<setNextTemplate name="main" />
|
||||
<nextPage />
|
||||
<para style="section-header">
|
||||
Introduction
|
||||
</para>
|
||||
<para style="content">
|
||||
RML is a XML dialect for generating PDF files. Like HTML produces a page
|
||||
within the browser, RML produces a PDF file. The RML processor uses the
|
||||
ReportLab library to convert the RML text into a full PDF template.
|
||||
</para>
|
||||
<para style="content">
|
||||
The original version of RML was developed by ReportLab, Inc. as a
|
||||
commercial extension to the free ReportLab library. This original
|
||||
version of RML is still available and supported by ReportLab, Inc. This
|
||||
version of RML, z3c.RML, is a free implementation of the XML dialect
|
||||
based on the available documentation. While it tries to keep some level
|
||||
of compatibility with the original version of RML, it is intended to
|
||||
provde a as clean and feature-rich API as possible.
|
||||
</para>
|
||||
<para style="content">
|
||||
The contents of this document is auto-generated from the code itself and
|
||||
should thus be very accurate and complete.
|
||||
</para>
|
||||
|
||||
<nextPage />
|
||||
<para style="section-header">
|
||||
Attribute Types
|
||||
</para>
|
||||
<outlineAdd>Attribute Types</outlineAdd>
|
||||
<para style="content">
|
||||
This section list the types of attributes used for the attributes within
|
||||
the RML elements.
|
||||
</para>
|
||||
<spacer length="0.5cm" />
|
||||
<tal:block repeat="type context/types">
|
||||
<para style="attribute-type-name" tal:content="type/name">
|
||||
Attribute Name
|
||||
</para>
|
||||
<outlineAdd level="1" tal:content="type/name">Attribute Name</outlineAdd>
|
||||
<para style="content" tal:content="type/description">
|
||||
Attribute purpose and data description.
|
||||
</para>
|
||||
</tal:block>
|
||||
|
||||
<nextPage />
|
||||
<para style="section-header">
|
||||
Directives
|
||||
</para>
|
||||
<outlineAdd>Directives</outlineAdd>
|
||||
<tal:block repeat="directive context/directives">
|
||||
<para style="element-name" tal:content="directive/name">
|
||||
Element Name
|
||||
</para>
|
||||
<outlineAdd level="1" tal:content="directive/name">
|
||||
Element Name
|
||||
</outlineAdd>
|
||||
<bookmarkPage tal:attributes="name directive/id"/>
|
||||
<para style="deprecation"
|
||||
tal:condition="directive/deprecated">
|
||||
<b>Deprecated:</b>
|
||||
<tal:block tal:content="directive/reason">Reason</tal:block>
|
||||
</para>
|
||||
<para style="content" tal:content="directive/description">
|
||||
What is this element doing?
|
||||
</para>
|
||||
|
||||
<tal:block condition="directive/attributes">
|
||||
<para style="element-subtitle">
|
||||
<i>Attributes</i>
|
||||
</para>
|
||||
<tal:block repeat="attr directive/attributes">
|
||||
<para style="attribute-name">
|
||||
<b tal:content="attr/name">para</b>
|
||||
<tal:block condition="attr/required">
|
||||
<i>(required)</i>
|
||||
</tal:block>
|
||||
-
|
||||
<tal:block content="attr/type">Type</tal:block>
|
||||
</para>
|
||||
<para style="field-deprecation"
|
||||
tal:condition="attr/deprecated">
|
||||
<b>Deprecated:</b>
|
||||
<tal:block tal:content="attr/reason">Reason</tal:block>
|
||||
</para>
|
||||
<para style="field-description"
|
||||
tal:condition="attr/title">
|
||||
<i tal:content="attr/title">Title</i>:
|
||||
<tal:block tal:content="attr/description">Description</tal:block>
|
||||
</para>
|
||||
</tal:block>
|
||||
</tal:block>
|
||||
|
||||
<tal:block define="attr directive/content"
|
||||
condition="directive/content">
|
||||
<para style="element-subtitle">
|
||||
<i>Content</i>
|
||||
</para>
|
||||
<para style="attribute-name">
|
||||
<tal:block content="attr/type">Type</tal:block>
|
||||
<tal:block condition="attr/required">
|
||||
<i>(required)</i>
|
||||
</tal:block>
|
||||
</para>
|
||||
<para style="field-description"
|
||||
tal:condition="attr/title">
|
||||
<i tal:content="attr/title">Title</i>:
|
||||
<tal:block tal:content="attr/description">Description</tal:block>
|
||||
</para>
|
||||
</tal:block>
|
||||
|
||||
<tal:block condition="directive/sub-directives">
|
||||
<para style="element-subtitle">
|
||||
<i>Sub-Directives</i>
|
||||
</para>
|
||||
<link destination=""
|
||||
tal:repeat="directive directive/sub-directives"
|
||||
tal:attributes="destination directive/id">
|
||||
<para style="sub-directive">
|
||||
<font color="blue">
|
||||
<b tal:content="directive/name">para</b>
|
||||
</font>
|
||||
<i>
|
||||
(<tal:block replace="directive/occurence">ZeroOrMore</tal:block>)
|
||||
</i>
|
||||
<font color="red" tal:condition="directive/deprecated">
|
||||
<i>(Deprecated)</i>
|
||||
</font>
|
||||
</para>
|
||||
</link>
|
||||
</tal:block>
|
||||
|
||||
<tal:block condition="directive/examples">
|
||||
<para style="element-subtitle">
|
||||
<i>Examples</i>
|
||||
</para>
|
||||
<tal:block repeat="example directive/examples">
|
||||
<xpre style="code" tal:content="structure example/code">
|
||||
Example Code
|
||||
</xpre>
|
||||
<blockTable style="plain">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="example-info">
|
||||
(Extracted from file
|
||||
<link href="" tal:attributes="href example/rmlurl">
|
||||
<i tal:content="example/filename">File</i>,
|
||||
</link>
|
||||
line <tal:block replace="example/line" />)
|
||||
</para>
|
||||
</td>
|
||||
<td>
|
||||
<para>
|
||||
<link href="" tal:attributes="href example/pdfurl">
|
||||
<font color="blue">[PDF]</font>
|
||||
</link>
|
||||
</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
</tal:block>
|
||||
</tal:block>
|
||||
|
||||
</tal:block>
|
||||
|
||||
</story>
|
||||
|
||||
</document>
|
||||
242
z3c/rml/reference.py
Normal file
242
z3c/rml/reference.py
Normal file
@@ -0,0 +1,242 @@
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2007 Zope Foundation and Contributors.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# This software is subject to the provisions of the Zope Public License,
|
||||
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
|
||||
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
|
||||
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
##############################################################################
|
||||
"""RML Reference Generator
|
||||
"""
|
||||
import copy
|
||||
import re
|
||||
import os
|
||||
import pygments.token
|
||||
import zope.schema
|
||||
import zope.schema.interfaces
|
||||
from lxml import etree
|
||||
from xml.sax import saxutils
|
||||
from pygments.lexers import XmlLexer
|
||||
from z3c.rml import attr, document, interfaces, pagetemplate
|
||||
|
||||
|
||||
INPUT_URL = ('https://github.com/zopefoundation/z3c.rml/blob/master/src/z3c/'
|
||||
'rml/tests/input/%s')
|
||||
EXPECTED_URL = ('https://github.com/zopefoundation/z3c.rml/blob/master/src/z3c/'
|
||||
'rml/tests/expected/%s?raw=true')
|
||||
|
||||
EXAMPLES_DIRECTORY = os.path.join(os.path.dirname(__file__), 'tests', 'input')
|
||||
IGNORE_ATTRIBUTES = ('RMLAttribute', 'BaseChoice')
|
||||
CONTENT_FIELD_TYPES = (
|
||||
attr.TextNode, attr.TextNodeSequence, attr.TextNodeGrid,
|
||||
attr.RawXMLContent, attr.XMLContent)
|
||||
STYLES_FORMATTING = {
|
||||
pygments.token.Name.Tag : ('<font textColor="red">', '</font>'),
|
||||
pygments.token.Literal.String : ('<font textColor="blue">', '</font>'),
|
||||
}
|
||||
EXAMPLE_NS = 'http://namespaces.zope.org/rml/doc'
|
||||
EXAMPLE_ATTR_NAME = '{%s}example' %EXAMPLE_NS
|
||||
|
||||
|
||||
def dedent(rml):
|
||||
spaces = re.findall('\n( *)<', rml)
|
||||
if not spaces:
|
||||
return rml
|
||||
least = min([len(s) for s in spaces if s != ''])
|
||||
return rml.replace('\n'+' '*least, '\n')
|
||||
|
||||
|
||||
def enforceColumns(rml, columns=80):
|
||||
result = []
|
||||
for line in rml.split('\n'):
|
||||
if len(line) <= columns:
|
||||
result.append(line)
|
||||
continue
|
||||
# Determine the indentation for all other lines
|
||||
lineStart = re.findall('^( *<[a-zA-Z0-9]+ )', line)
|
||||
lineIndent = 0
|
||||
if lineStart:
|
||||
lineIndent = len(lineStart[0])
|
||||
# Create lines having at most the specified number of columns
|
||||
while len(line) > columns:
|
||||
end = line[:columns].rfind(' ')
|
||||
result.append(line[:end])
|
||||
line = ' '*lineIndent + line[end+1:]
|
||||
result.append(line)
|
||||
|
||||
return '\n'.join(result)
|
||||
|
||||
def highlightRML(rml):
|
||||
lexer = XmlLexer()
|
||||
styledRml = ''
|
||||
for ttype, token in lexer.get_tokens(rml):
|
||||
start, end = STYLES_FORMATTING.get(ttype, ('', ''))
|
||||
styledRml += start + saxutils.escape(token) + end
|
||||
return styledRml
|
||||
|
||||
|
||||
def removeDocAttributes(elem):
|
||||
for name in elem.attrib.keys():
|
||||
if name.startswith('{'+EXAMPLE_NS+'}'):
|
||||
del elem.attrib[name]
|
||||
for child in elem.getchildren():
|
||||
removeDocAttributes(child)
|
||||
|
||||
|
||||
def getAttributeTypes():
|
||||
types = []
|
||||
candidates = sorted(attr.__dict__.items(), key=lambda e: e[0])
|
||||
for name, candidate in candidates:
|
||||
if not (isinstance(candidate, type) and
|
||||
zope.schema.interfaces.IField.implementedBy(candidate) and
|
||||
name not in IGNORE_ATTRIBUTES):
|
||||
continue
|
||||
types.append({
|
||||
'name': name,
|
||||
'description': candidate.__doc__
|
||||
})
|
||||
return types
|
||||
|
||||
|
||||
def formatField(field):
|
||||
return field.__class__.__name__
|
||||
|
||||
def formatChoice(field):
|
||||
choices = ', '.join([repr(choice) for choice in field.choices.keys()])
|
||||
return '%s of (%s)' %(field.__class__.__name__, choices)
|
||||
|
||||
def formatSequence(field):
|
||||
vtFormatter = typeFormatters.get(field.value_type.__class__, formatField)
|
||||
return '%s of %s' %(field.__class__.__name__, vtFormatter(field.value_type))
|
||||
|
||||
def formatGrid(field):
|
||||
vtFormatter = typeFormatters.get(field.value_type.__class__, formatField)
|
||||
return '%s with %i cols of %s' %(
|
||||
field.__class__.__name__, field.columns, vtFormatter(field.value_type))
|
||||
|
||||
def formatCombination(field):
|
||||
vts = [typeFormatters.get(vt.__class__, formatField)(vt)
|
||||
for vt in field.value_types]
|
||||
return '%s of %s' %(field.__class__.__name__, ', '.join(vts))
|
||||
|
||||
typeFormatters = {
|
||||
attr.Choice: formatChoice,
|
||||
attr.Sequence: formatSequence,
|
||||
attr.Combination: formatCombination,
|
||||
attr.TextNodeSequence: formatSequence,
|
||||
attr.TextNodeGrid: formatGrid}
|
||||
|
||||
def processSignature(name, signature, examples, directives=None):
|
||||
if directives is None:
|
||||
directives = {}
|
||||
# Process this directive
|
||||
if signature not in directives:
|
||||
info = {'name': name, 'description': signature.getDoc(),
|
||||
'id': str(hash(signature)), 'deprecated': False}
|
||||
# If directive is deprecated, then add some info
|
||||
if interfaces.IDeprecatedDirective.providedBy(signature):
|
||||
info['deprecated'] = True
|
||||
info['reason'] = signature.getTaggedValue('deprecatedReason')
|
||||
attrs = []
|
||||
content = None
|
||||
for fname, field in zope.schema.getFieldsInOrder(signature):
|
||||
# Handle the case, where the field describes the content
|
||||
typeFormatter = typeFormatters.get(field.__class__, formatField)
|
||||
fieldInfo = {
|
||||
'name': fname,
|
||||
'type': typeFormatter(field),
|
||||
'title': field.title,
|
||||
'description': field.description,
|
||||
'required': field.required,
|
||||
'deprecated': False,
|
||||
}
|
||||
if field.__class__ in CONTENT_FIELD_TYPES:
|
||||
content = fieldInfo
|
||||
else:
|
||||
attrs.append(fieldInfo)
|
||||
|
||||
# Add a separate entry for the deprecated field
|
||||
if interfaces.IDeprecated.providedBy(field):
|
||||
deprFieldInfo = fieldInfo.copy()
|
||||
deprFieldInfo['deprecated'] = True
|
||||
deprFieldInfo['name'] = field.deprecatedName
|
||||
deprFieldInfo['reason'] = field.deprecatedReason
|
||||
attrs.append(deprFieldInfo)
|
||||
|
||||
info['attributes'] = attrs
|
||||
info['content'] = content
|
||||
# Examples can be either gotten by interface path or tag name
|
||||
ifacePath = signature.__module__ + '.' + signature.__name__
|
||||
if ifacePath in examples:
|
||||
info['examples'] = examples[ifacePath]
|
||||
else:
|
||||
info['examples'] = examples.get(name, None)
|
||||
|
||||
subs = []
|
||||
for occurence in signature.queryTaggedValue('directives', ()):
|
||||
subs.append({
|
||||
'name': occurence.tag,
|
||||
'occurence': occurence.__class__.__name__,
|
||||
'deprecated': interfaces.IDeprecatedDirective.providedBy(
|
||||
occurence.signature),
|
||||
'id': str(hash(occurence.signature))
|
||||
})
|
||||
info['sub-directives'] = subs
|
||||
directives[signature] = info
|
||||
# Process Children
|
||||
for occurence in signature.queryTaggedValue('directives', ()):
|
||||
processSignature(occurence.tag, occurence.signature,
|
||||
examples, directives)
|
||||
|
||||
|
||||
def extractExamples(directory):
|
||||
examples = {}
|
||||
for filename in os.listdir(directory):
|
||||
if not filename.endswith('.rml'):
|
||||
continue
|
||||
rmlFile = open(os.path.join(directory, filename), 'r')
|
||||
root = etree.parse(rmlFile).getroot()
|
||||
elements = root.xpath('//@doc:example/parent::*',
|
||||
namespaces={'doc': EXAMPLE_NS})
|
||||
# Phase 1: Collect all elements
|
||||
for elem in elements:
|
||||
demoTag = elem.get(EXAMPLE_ATTR_NAME) or elem.tag
|
||||
elemExamples = examples.setdefault(demoTag, [])
|
||||
elemExamples.append({
|
||||
'filename': filename,
|
||||
'line': elem.sourceline,
|
||||
'element': elem,
|
||||
'rmlurl': INPUT_URL %filename,
|
||||
'pdfurl': EXPECTED_URL %(filename[:-4]+'.pdf')
|
||||
})
|
||||
# Phase 2: Render all elements
|
||||
removeDocAttributes(root)
|
||||
for dirExamples in examples.values():
|
||||
for example in dirExamples:
|
||||
xml = etree.tounicode(example['element']).strip()
|
||||
xml = re.sub(
|
||||
' ?xmlns:doc="http://namespaces.zope.org/rml/doc"', '', xml)
|
||||
xml = dedent(xml)
|
||||
xml = enforceColumns(xml, 80)
|
||||
xml = highlightRML(xml)
|
||||
example['code'] = xml
|
||||
|
||||
return examples
|
||||
|
||||
|
||||
def main(outPath=None):
|
||||
examples = extractExamples(EXAMPLES_DIRECTORY)
|
||||
|
||||
template = pagetemplate.RMLPageTemplateFile('reference.pt')
|
||||
|
||||
directives = {}
|
||||
processSignature('document', document.IDocument, examples, directives)
|
||||
directives = sorted(directives.values(), key=lambda d: d['name'])
|
||||
|
||||
pdf = template(types=getAttributeTypes(), directives=directives)
|
||||
open(outPath or 'rml-reference.pdf', 'wb').write(pdf)
|
||||
50
z3c/rml/rlfix.py
Normal file
50
z3c/rml/rlfix.py
Normal file
@@ -0,0 +1,50 @@
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2012 Zope Foundation and Contributors.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# This software is subject to the provisions of the Zope Public License,
|
||||
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
|
||||
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
|
||||
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
##############################################################################
|
||||
"""ReportLab fixups.
|
||||
"""
|
||||
__docformat__ = "reStructuredText"
|
||||
from reportlab.pdfbase import pdfform, pdfmetrics, ttfonts
|
||||
from reportlab.pdfbase.pdfpattern import PDFPattern
|
||||
from reportlab.graphics import testshapes
|
||||
|
||||
def resetPdfForm():
|
||||
pdfform.PDFDOCENC = PDFPattern(pdfform.PDFDocEncodingPattern)
|
||||
pdfform.ENCODING = PDFPattern(
|
||||
pdfform.EncodingPattern, PDFDocEncoding=pdfform.PDFDOCENC)
|
||||
pdfform.GLOBALFONTSDICTIONARY = pdfform.FormFontsDictionary()
|
||||
pdfform.GLOBALRESOURCES = pdfform.FormResources()
|
||||
pdfform.ZADB = PDFPattern(pdfform.ZaDbPattern)
|
||||
|
||||
def resetFonts():
|
||||
# testshapes._setup registers the Vera fonts every time which is a little
|
||||
# slow on all platforms. On Windows it lists the entire system font
|
||||
# directory and registers them all which is very slow.
|
||||
pdfmetrics.registerFont(ttfonts.TTFont("Vera", "Vera.ttf"))
|
||||
pdfmetrics.registerFont(ttfonts.TTFont("VeraBd", "VeraBd.ttf"))
|
||||
pdfmetrics.registerFont(ttfonts.TTFont("VeraIt", "VeraIt.ttf"))
|
||||
pdfmetrics.registerFont(ttfonts.TTFont("VeraBI", "VeraBI.ttf"))
|
||||
for f in ('Times-Roman','Courier','Helvetica','Vera', 'VeraBd', 'VeraIt',
|
||||
'VeraBI'):
|
||||
if f not in testshapes._FONTS:
|
||||
testshapes._FONTS.append(f)
|
||||
|
||||
def setSideLabels():
|
||||
from reportlab.graphics.charts import piecharts
|
||||
piecharts.Pie3d.sideLabels = 0
|
||||
setSideLabels()
|
||||
|
||||
from reportlab.rl_config import register_reset
|
||||
register_reset(resetPdfForm)
|
||||
register_reset(resetFonts)
|
||||
del register_reset
|
||||
5978
z3c/rml/rml-reference.pdf
Normal file
5978
z3c/rml/rml-reference.pdf
Normal file
File diff suppressed because it is too large
Load Diff
2236
z3c/rml/rml.dtd
Normal file
2236
z3c/rml/rml.dtd
Normal file
File diff suppressed because it is too large
Load Diff
70
z3c/rml/rml2pdf.py
Normal file
70
z3c/rml/rml2pdf.py
Normal file
@@ -0,0 +1,70 @@
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2007 Zope Foundation and Contributors.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# This software is subject to the provisions of the Zope Public License,
|
||||
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
|
||||
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
|
||||
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
##############################################################################
|
||||
"""RML to PDF Converter
|
||||
"""
|
||||
import cStringIO
|
||||
import os
|
||||
import sys
|
||||
import zope.interface
|
||||
from lxml import etree
|
||||
from z3c.rml import document, interfaces
|
||||
|
||||
zope.interface.moduleProvides(interfaces.IRML2PDF)
|
||||
|
||||
|
||||
def parseString(xml, removeEncodingLine=True, filename=None):
|
||||
if isinstance(xml, unicode) and removeEncodingLine:
|
||||
# RML is a unicode string, but oftentimes documents declare their
|
||||
# encoding using <?xml ...>. Unfortuantely, I cannot tell lxml to
|
||||
# ignore that directive. Thus we remove it.
|
||||
if xml.startswith('<?xml'):
|
||||
xml = xml.split('\n', 1)[-1]
|
||||
root = etree.fromstring(xml)
|
||||
doc = document.Document(root)
|
||||
if filename:
|
||||
doc.filename = filename
|
||||
output = cStringIO.StringIO()
|
||||
doc.process(output)
|
||||
output.seek(0)
|
||||
return output
|
||||
|
||||
|
||||
def go(xmlInputName, outputFileName=None, outDir=None, dtdDir=None):
|
||||
if dtdDir is not None:
|
||||
sys.stderr.write('The ``dtdDir`` option is not yet supported.')
|
||||
|
||||
xmlFile = open(xmlInputName, 'r')
|
||||
root = etree.parse(xmlFile).getroot()
|
||||
doc = document.Document(root)
|
||||
doc.filename = xmlInputName
|
||||
|
||||
outputFile = None
|
||||
|
||||
# If an output filename is specified, create an output filepointer for it
|
||||
if outputFileName is not None:
|
||||
if outDir is not None:
|
||||
outputFileName = os.path.join(outDir, outputFileName)
|
||||
outputFile = open(outputFileName, 'wb')
|
||||
|
||||
# Create a Reportlab canvas by processing the document
|
||||
doc.process(outputFile)
|
||||
|
||||
|
||||
def main(args=None):
|
||||
if args is None:
|
||||
args = sys.argv[1:]
|
||||
go(*args)
|
||||
|
||||
if __name__ == '__main__':
|
||||
canvas = go(sys.argv[1])
|
||||
116
z3c/rml/rml2pdfscript.py
Normal file
116
z3c/rml/rml2pdfscript.py
Normal file
@@ -0,0 +1,116 @@
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2007 Zope Foundation and Contributors.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# This software is subject to the provisions of the Zope Public License,
|
||||
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
|
||||
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
|
||||
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
##############################################################################
|
||||
"""RML to PDF Converter
|
||||
"""
|
||||
import subprocess
|
||||
import sys
|
||||
import os
|
||||
|
||||
_fileOpen = None
|
||||
|
||||
def excecuteSubProcess(xmlInputName, outputFileName, testing=None):
|
||||
# set the sys path given from the parent process
|
||||
sysPath = os.environ['Z3CRMLSYSPATH']
|
||||
sys.path[:] = sysPath.split(';')
|
||||
|
||||
# now it come the ugly thing, but we need to hook our test changes into
|
||||
# our subprocess.
|
||||
if testing is not None:
|
||||
|
||||
# set some globals
|
||||
import z3c.rml.attr
|
||||
import z3c.rml.directive
|
||||
global _fileOpen
|
||||
_fileOpen = z3c.rml.attr.File.open
|
||||
def testOpen(img, filename):
|
||||
# cleanup win paths like:
|
||||
# ....\\input\\file:///D:\\trunk\\...
|
||||
if sys.platform[:3].lower() == "win":
|
||||
if filename.startswith('file:///'):
|
||||
filename = filename[len('file:///'):]
|
||||
path = os.path.join(os.path.dirname(xmlInputName), filename)
|
||||
return open(path, 'rb')
|
||||
# override some testing stuff for our tests
|
||||
z3c.rml.attr.File.open = testOpen
|
||||
import z3c.rml.tests.module
|
||||
sys.modules['module'] = z3c.rml.tests.module
|
||||
sys.modules['mymodule'] = z3c.rml.tests.module
|
||||
|
||||
# import rml and process the pdf
|
||||
from z3c.rml import rml2pdf
|
||||
rml2pdf.go(xmlInputName, outputFileName)
|
||||
|
||||
if testing is not None:
|
||||
# reset some globals
|
||||
z3c.rml.attr.File.open = _fileOpen
|
||||
del sys.modules['module']
|
||||
del sys.modules['mymodule']
|
||||
|
||||
|
||||
def goSubProcess(xmlInputName, outputFileName, testing=False):
|
||||
"""Processes PDF rendering in a sub process.
|
||||
|
||||
This method is much slower then the ``go`` method defined in rml2pdf.py
|
||||
because each PDF generation is done in a sub process. But this will make
|
||||
sure, that we do not run into problems. Note, the ReportLab lib is not
|
||||
threadsafe.
|
||||
|
||||
Use this method from python and it will dispatch the pdf generation
|
||||
to a subprocess.
|
||||
|
||||
Note: this method does not take care on how much process will started.
|
||||
Probably it's a good idea to use a queue or a global utility which only
|
||||
start a predefined amount of sub processes.
|
||||
"""
|
||||
# get the sys path used for this python process
|
||||
env = os.environ
|
||||
sysPath = ';'.join(sys.path)
|
||||
# set the sys path as env var for the new sub process
|
||||
env['Z3CRMLSYSPATH'] = sysPath
|
||||
py = sys.executable
|
||||
|
||||
# setup the cmd
|
||||
program = [py, __file__, 'excecuteSubProcess', xmlInputName, outputFileName]
|
||||
if testing is True:
|
||||
program.append('testing=1')
|
||||
program = " ".join(program)
|
||||
|
||||
# run the subprocess in the rml input file folder, this will make it easy
|
||||
# to include images. If this doesn't fit, feel free to add a additional
|
||||
# home argument, and let this be the default, ri
|
||||
os.chdir(os.path.dirname(xmlInputName))
|
||||
|
||||
# start processing in a sub process, raise exception or return None
|
||||
try:
|
||||
p = subprocess.Popen(program, executable=py, env=env,
|
||||
stdin=subprocess.PIPE, stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE)
|
||||
except Exception, e:
|
||||
raise Exception("Subprocess error: %s" % e)
|
||||
|
||||
# Do we need to improve the implementation and kill the subprocess which will
|
||||
# fail? ri
|
||||
stdout, stderr = p.communicate()
|
||||
error = stderr
|
||||
if error:
|
||||
raise Exception("Subprocess error: %s" % error)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
if len(sys.argv) == 5:
|
||||
#testing support
|
||||
canvas = excecuteSubProcess(sys.argv[2], sys.argv[3], sys.argv[4])
|
||||
else:
|
||||
canvas = excecuteSubProcess(sys.argv[2], sys.argv[3])
|
||||
|
||||
114
z3c/rml/special.py
Normal file
114
z3c/rml/special.py
Normal file
@@ -0,0 +1,114 @@
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2007 Zope Foundation and Contributors.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# This software is subject to the provisions of the Zope Public License,
|
||||
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
|
||||
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
|
||||
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
##############################################################################
|
||||
"""Special Element Processing
|
||||
"""
|
||||
from z3c.rml import attr, directive, interfaces
|
||||
|
||||
|
||||
class IName(interfaces.IRMLDirectiveSignature):
|
||||
"""Defines a name for a string."""
|
||||
|
||||
id = attr.String(
|
||||
title=u'Id',
|
||||
description=u'The id under which the value will be known.',
|
||||
required=True)
|
||||
|
||||
value = attr.Text(
|
||||
title=u'Value',
|
||||
description=u'The text that is displayed if the id is called.',
|
||||
required=True)
|
||||
|
||||
class Name(directive.RMLDirective):
|
||||
signature = IName
|
||||
|
||||
def process(self):
|
||||
id, value = self.getAttributeValues(valuesOnly=True)
|
||||
manager = attr.getManager(self)
|
||||
manager.names[id] = value
|
||||
|
||||
|
||||
class IAlias(interfaces.IRMLDirectiveSignature):
|
||||
"""Defines an alias for a given style."""
|
||||
|
||||
id = attr.String(
|
||||
title=u'Id',
|
||||
description=u'The id as which the style will be known.',
|
||||
required=True)
|
||||
|
||||
value = attr.Style(
|
||||
title=u'Value',
|
||||
description=u'The style that is represented.',
|
||||
required=True)
|
||||
|
||||
class Alias(directive.RMLDirective):
|
||||
signature = IAlias
|
||||
|
||||
def process(self):
|
||||
id, value = self.getAttributeValues(valuesOnly=True)
|
||||
manager = attr.getManager(self)
|
||||
manager.styles[id] = value
|
||||
|
||||
|
||||
class TextFlowables(object):
|
||||
def _getManager(self):
|
||||
if hasattr(self, 'manager'):
|
||||
return self.manager
|
||||
else:
|
||||
return attr.getManager(self)
|
||||
|
||||
def getPageNumber(self, elem, canvas):
|
||||
return unicode(
|
||||
canvas.getPageNumber() + int(elem.get('countingFrom', 1)) - 1
|
||||
)
|
||||
|
||||
def getName(self, elem, canvas):
|
||||
return self._getManager().get_name(
|
||||
elem.get('id'),
|
||||
elem.get('default')
|
||||
)
|
||||
|
||||
def evalString(self, elem, canvas):
|
||||
return do_eval(self._getText(elem, canvas))
|
||||
|
||||
def namedString(self, elem, canvas):
|
||||
self._getManager().names[elem.get('id')] = self._getText(
|
||||
elem, canvas, include_final_tail=False
|
||||
)
|
||||
return u''
|
||||
|
||||
def name(self, elem, canvas):
|
||||
self._getManager().names[elem.get('id')] = elem.get('value')
|
||||
return u''
|
||||
|
||||
handleElements = {'pageNumber': getPageNumber,
|
||||
'getName': getName,
|
||||
'evalString': evalString,
|
||||
'namedString': namedString,
|
||||
'name': name}
|
||||
|
||||
def _getText(self, node, canvas, include_final_tail=True):
|
||||
text = node.text or u''
|
||||
for sub in node.getchildren():
|
||||
if sub.tag in self.handleElements:
|
||||
text += self.handleElements[sub.tag](self, sub, canvas)
|
||||
else:
|
||||
self._getText(sub, canvas)
|
||||
text += sub.tail or u''
|
||||
if include_final_tail:
|
||||
text += node.tail or u''
|
||||
return text
|
||||
|
||||
def do_eval(value):
|
||||
# Maybe still not safe
|
||||
return unicode(eval(value.strip(), {'__builtins__': None}, {}))
|
||||
112
z3c/rml/storyplace.py
Normal file
112
z3c/rml/storyplace.py
Normal file
@@ -0,0 +1,112 @@
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2012 Zope Foundation and Contributors.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# This software is subject to the provisions of the Zope Public License,
|
||||
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
|
||||
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
|
||||
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
##############################################################################
|
||||
"""``pdfInclude`` Directive.
|
||||
"""
|
||||
__docformat__ = "reStructuredText"
|
||||
from reportlab.platypus import flowables
|
||||
|
||||
from z3c.rml import attr, flowable, interfaces, occurence
|
||||
|
||||
|
||||
class StoryPlaceFlowable(flowables.Flowable):
|
||||
|
||||
def __init__(self, x, y, width, height, origin, flows):
|
||||
flowables.Flowable.__init__(self)
|
||||
self.x = x
|
||||
self.y = y
|
||||
self.width = width
|
||||
self.height = height
|
||||
self.origin = origin
|
||||
self.flows = flows
|
||||
|
||||
def wrap(self, *args):
|
||||
return (0, 0)
|
||||
|
||||
def draw(self):
|
||||
saveState = False
|
||||
x, y = self.x, self.y
|
||||
self.canv.restoreState()
|
||||
if self.origin == 'frame':
|
||||
x += self._frame._x1
|
||||
y += self._frame._y1
|
||||
elif self.origin == 'local':
|
||||
x += self._frame._x
|
||||
y += self._frame._y
|
||||
else:
|
||||
# origin == 'page'
|
||||
pass
|
||||
width, height = self.width, self.height
|
||||
y += height
|
||||
for flow in self.flows.flow:
|
||||
flowWidth, flowHeight = flow.wrap(width, height)
|
||||
if flowWidth <= width and flowHeight <= height:
|
||||
y -= flowHeight
|
||||
flow.drawOn(self.canv, x, y)
|
||||
height -= flowHeight
|
||||
else:
|
||||
raise ValueError("Not enough space")
|
||||
self.canv.saveState()
|
||||
|
||||
|
||||
class IStoryPlace(interfaces.IRMLDirectiveSignature):
|
||||
"""Draws a set of flowables on the canvas within a given region."""
|
||||
|
||||
x = attr.Measurement(
|
||||
title=u'X-Coordinate',
|
||||
description=(u'The X-coordinate of the lower-left position of the '
|
||||
u'place.'),
|
||||
required=True)
|
||||
|
||||
y = attr.Measurement(
|
||||
title=u'Y-Coordinate',
|
||||
description=(u'The Y-coordinate of the lower-left position of the '
|
||||
u'place.'),
|
||||
required=True)
|
||||
|
||||
width = attr.Measurement(
|
||||
title=u'Width',
|
||||
description=u'The width of the place.',
|
||||
required=False)
|
||||
|
||||
height = attr.Measurement(
|
||||
title=u'Height',
|
||||
description=u'The height of the place.',
|
||||
required=False)
|
||||
|
||||
origin = attr.Choice(
|
||||
title=u'Origin',
|
||||
description=u'The origin of the coordinate system for the story.',
|
||||
choices=('page', 'frame', 'local'),
|
||||
default = 'page',
|
||||
required=False)
|
||||
|
||||
class StoryPlace(flowable.Flowable):
|
||||
signature = IStoryPlace
|
||||
|
||||
def process(self):
|
||||
x, y, width, height, origin = self.getAttributeValues(
|
||||
select=('x', 'y', 'width', 'height', 'origin'), valuesOnly=True)
|
||||
|
||||
flows = flowable.Flow(self.element, self.parent)
|
||||
flows.process()
|
||||
self.parent.flow.append(
|
||||
StoryPlaceFlowable(x, y, width, height, origin, flows))
|
||||
|
||||
|
||||
flowable.Flow.factories['storyPlace'] = StoryPlace
|
||||
flowable.IFlow.setTaggedValue(
|
||||
'directives',
|
||||
flowable.IFlow.getTaggedValue('directives') +
|
||||
(occurence.ZeroOrMore('storyPlace', IStoryPlace),)
|
||||
)
|
||||
687
z3c/rml/stylesheet.py
Normal file
687
z3c/rml/stylesheet.py
Normal file
@@ -0,0 +1,687 @@
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2007 Zope Foundation and Contributors.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# This software is subject to the provisions of the Zope Public License,
|
||||
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
|
||||
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
|
||||
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
##############################################################################
|
||||
"""Style Related Element Processing
|
||||
"""
|
||||
import copy
|
||||
import reportlab.lib.styles
|
||||
import reportlab.lib.enums
|
||||
import reportlab.platypus
|
||||
from z3c.rml import attr, directive, interfaces, occurence, SampleStyleSheet, \
|
||||
special
|
||||
|
||||
|
||||
class IInitialize(interfaces.IRMLDirectiveSignature):
|
||||
"""Do some RML processing initialization."""
|
||||
occurence.containing(
|
||||
occurence.ZeroOrMore('name', special.IName),
|
||||
occurence.ZeroOrMore('alias', special.IAlias),
|
||||
)
|
||||
|
||||
class Initialize(directive.RMLDirective):
|
||||
signature = IInitialize
|
||||
factories = {
|
||||
'name': special.Name,
|
||||
'alias': special.Alias,
|
||||
}
|
||||
|
||||
|
||||
class IBaseParagraphStyle(interfaces.IRMLDirectiveSignature):
|
||||
|
||||
fontName = attr.String(
|
||||
title=u'Font Name',
|
||||
description=u'The name of the font for the paragraph.',
|
||||
required=False)
|
||||
|
||||
fontSize = attr.Measurement(
|
||||
title=u'Font Size',
|
||||
description=u'The font size for the text of the paragraph.',
|
||||
required=False)
|
||||
|
||||
leading = attr.Measurement(
|
||||
title=u'Leading',
|
||||
description=(u'The height of a single paragraph line. It includes '
|
||||
u'character height.'),
|
||||
required=False)
|
||||
|
||||
leftIndent = attr.Measurement(
|
||||
title=u'Left Indentation',
|
||||
description=u'General indentation on the left side.',
|
||||
required=False)
|
||||
|
||||
rightIndent = attr.Measurement(
|
||||
title=u'Right Indentation',
|
||||
description=u'General indentation on the right side.',
|
||||
required=False)
|
||||
|
||||
firstLineIndent = attr.Measurement(
|
||||
title=u'First Line Indentation',
|
||||
description=u'The indentation of the first line in the paragraph.',
|
||||
required=False)
|
||||
|
||||
alignment = attr.Choice(
|
||||
title=u'Alignment',
|
||||
description=u'The text alignment.',
|
||||
choices=interfaces.ALIGN_CHOICES,
|
||||
required=False)
|
||||
|
||||
spaceBefore = attr.Measurement(
|
||||
title=u'Space Before',
|
||||
description=u'The vertical space before the paragraph.',
|
||||
required=False)
|
||||
|
||||
spaceAfter = attr.Measurement(
|
||||
title=u'Space After',
|
||||
description=u'The vertical space after the paragraph.',
|
||||
required=False)
|
||||
|
||||
bulletFontName = attr.String(
|
||||
title=u'Bullet Font Name',
|
||||
description=u'The font in which the bullet character will be rendered.',
|
||||
required=False)
|
||||
|
||||
bulletFontSize = attr.Measurement(
|
||||
title=u'Bullet Font Size',
|
||||
description=u'The font size of the bullet character.',
|
||||
required=False)
|
||||
|
||||
bulletIndent = attr.Measurement(
|
||||
title=u'Bullet Indentation',
|
||||
description=u'The indentation that is kept for a bullet point.',
|
||||
required=False)
|
||||
|
||||
textColor = attr.Color(
|
||||
title=u'Text Color',
|
||||
description=u'The color in which the text will appear.',
|
||||
required=False)
|
||||
|
||||
backColor = attr.Color(
|
||||
title=u'Background Color',
|
||||
description=u'The background color of the paragraph.',
|
||||
required=False)
|
||||
|
||||
wordWrap = attr.String(
|
||||
title=u'Word Wrap Method',
|
||||
description=(u'When set to "CJK", invoke CJK word wrapping'),
|
||||
required=False)
|
||||
|
||||
borderWidth = attr.Measurement(
|
||||
title=u'Paragraph Border Width',
|
||||
description=u'The width of the paragraph border.',
|
||||
required=False)
|
||||
|
||||
borderPadding = attr.Padding(
|
||||
title=u'Paragraph Border Padding',
|
||||
description=u'Padding of the paragraph.',
|
||||
required=False)
|
||||
|
||||
borderColor = attr.Color(
|
||||
title=u'Border Color',
|
||||
description=u'The color in which the paragraph border will appear.',
|
||||
required=False)
|
||||
|
||||
borderRadius = attr.Measurement(
|
||||
title=u'Paragraph Border Radius',
|
||||
description=u'The radius of the paragraph border.',
|
||||
required=False)
|
||||
|
||||
allowWidows = attr.Boolean(
|
||||
title=u'Allow Widows',
|
||||
description=(u'Allow widows.'),
|
||||
required=False)
|
||||
|
||||
allowOrphans = attr.Boolean(
|
||||
title=u'Allow Orphans',
|
||||
description=(u'Allow orphans.'),
|
||||
required=False)
|
||||
|
||||
textTransforms = attr.Choice(
|
||||
title=u'Text Transforms',
|
||||
description=u'Text transformations.',
|
||||
choices=interfaces.TEXT_TRANSFORM_CHOICES,
|
||||
required=False)
|
||||
|
||||
endDots = attr.String(
|
||||
title=u'End Dots',
|
||||
description=u'Characters/Dots at the end of a paragraph.',
|
||||
required=False)
|
||||
|
||||
# Attributes not part of the official style attributes, but are accessed
|
||||
# by the paragraph renderer.
|
||||
|
||||
keepWithNext = attr.Boolean(
|
||||
title=u'Keep with Next',
|
||||
description=(u'When set, this paragraph will always be in the same '
|
||||
u'frame as the following flowable.'),
|
||||
required=False)
|
||||
|
||||
pageBreakBefore = attr.Boolean(
|
||||
title=u'Page Break Before',
|
||||
description=(u'Specifies whether a page break should be inserted '
|
||||
u'before the directive.'),
|
||||
required=False)
|
||||
|
||||
frameBreakBefore = attr.Boolean(
|
||||
title=u'Frame Break Before',
|
||||
description=(u'Specifies whether a frame break should be inserted '
|
||||
u'before the directive.'),
|
||||
required=False)
|
||||
|
||||
|
||||
class IParagraphStyle(IBaseParagraphStyle):
|
||||
"""Defines a paragraph style and gives it a name."""
|
||||
|
||||
name = attr.String(
|
||||
title=u'Name',
|
||||
description=u'The name of the style.',
|
||||
required=True)
|
||||
|
||||
alias = attr.String(
|
||||
title=u'Alias',
|
||||
description=u'An alias under which the style will also be known as.',
|
||||
required=False)
|
||||
|
||||
parent = attr.Style(
|
||||
title=u'Parent',
|
||||
description=(u'The apragraph style that will be used as a base for '
|
||||
u'this one.'),
|
||||
required=False)
|
||||
|
||||
class ParagraphStyle(directive.RMLDirective):
|
||||
signature = IParagraphStyle
|
||||
|
||||
def process(self):
|
||||
kwargs = dict(self.getAttributeValues())
|
||||
parent = kwargs.pop(
|
||||
'parent', SampleStyleSheet['Normal'])
|
||||
name = kwargs.pop('name')
|
||||
style = copy.deepcopy(parent)
|
||||
style.name = name[6:] if name.startswith('style.') else name
|
||||
|
||||
for name, value in kwargs.items():
|
||||
setattr(style, name, value)
|
||||
|
||||
manager = attr.getManager(self)
|
||||
manager.styles[style.name] = style
|
||||
|
||||
|
||||
class ITableStyleCommand(interfaces.IRMLDirectiveSignature):
|
||||
|
||||
start = attr.Sequence(
|
||||
title=u'Start Coordinates',
|
||||
description=u'The start table coordinates for the style instruction',
|
||||
value_type=attr.Combination(
|
||||
value_types=(attr.Integer(),
|
||||
attr.Choice(choices=interfaces.SPLIT_CHOICES))
|
||||
),
|
||||
default=[0, 0],
|
||||
min_length=2,
|
||||
max_length=2,
|
||||
required=True)
|
||||
|
||||
stop = attr.Sequence(
|
||||
title=u'End Coordinates',
|
||||
description=u'The end table coordinates for the style instruction',
|
||||
value_type=attr.Combination(
|
||||
value_types=(attr.Integer(),
|
||||
attr.Choice(choices=interfaces.SPLIT_CHOICES))
|
||||
),
|
||||
default=[-1, -1],
|
||||
min_length=2,
|
||||
max_length=2,
|
||||
required=True)
|
||||
|
||||
class TableStyleCommand(directive.RMLDirective):
|
||||
name = None
|
||||
|
||||
def process(self):
|
||||
args = [self.name]
|
||||
args += self.getAttributeValues(valuesOnly=True)
|
||||
self.parent.style.add(*args)
|
||||
|
||||
|
||||
class IBlockFont(ITableStyleCommand):
|
||||
"""Set the font properties for the texts."""
|
||||
|
||||
name = attr.String(
|
||||
title=u'Font Name',
|
||||
description=u'The name of the font for the cell.',
|
||||
required=False)
|
||||
|
||||
size = attr.Measurement(
|
||||
title=u'Font Size',
|
||||
description=u'The font size for the text of the cell.',
|
||||
required=False)
|
||||
|
||||
leading = attr.Measurement(
|
||||
title=u'Leading',
|
||||
description=(u'The height of a single text line. It includes '
|
||||
u'character height.'),
|
||||
required=False)
|
||||
|
||||
class BlockFont(TableStyleCommand):
|
||||
signature = IBlockFont
|
||||
name = 'FONT'
|
||||
|
||||
class IBlockLeading(ITableStyleCommand):
|
||||
"""Set the text leading."""
|
||||
|
||||
length = attr.Measurement(
|
||||
title=u'Length',
|
||||
description=(u'The height of a single text line. It includes '
|
||||
u'character height.'),
|
||||
required=True)
|
||||
|
||||
class BlockLeading(TableStyleCommand):
|
||||
signature = IBlockLeading
|
||||
name = 'LEADING'
|
||||
|
||||
class IBlockTextColor(ITableStyleCommand):
|
||||
"""Set the text color."""
|
||||
|
||||
colorName = attr.Color(
|
||||
title=u'Color Name',
|
||||
description=u'The color in which the text will appear.',
|
||||
required=True)
|
||||
|
||||
class BlockTextColor(TableStyleCommand):
|
||||
signature = IBlockTextColor
|
||||
name = 'TEXTCOLOR'
|
||||
|
||||
class IBlockAlignment(ITableStyleCommand):
|
||||
"""Set the text alignment."""
|
||||
|
||||
value = attr.Choice(
|
||||
title=u'Text Alignment',
|
||||
description=u'The text alignment within the cell.',
|
||||
choices=interfaces.ALIGN_TEXT_CHOICES,
|
||||
required=True)
|
||||
|
||||
class BlockAlignment(TableStyleCommand):
|
||||
signature = IBlockAlignment
|
||||
name = 'ALIGNMENT'
|
||||
|
||||
class IBlockLeftPadding(ITableStyleCommand):
|
||||
"""Set the left padding of the cells."""
|
||||
|
||||
length = attr.Measurement(
|
||||
title=u'Length',
|
||||
description=u'The size of the padding.',
|
||||
required=True)
|
||||
|
||||
class BlockLeftPadding(TableStyleCommand):
|
||||
signature = IBlockLeftPadding
|
||||
name = 'LEFTPADDING'
|
||||
|
||||
class IBlockRightPadding(ITableStyleCommand):
|
||||
"""Set the right padding of the cells."""
|
||||
|
||||
length = attr.Measurement(
|
||||
title=u'Length',
|
||||
description=u'The size of the padding.',
|
||||
required=True)
|
||||
|
||||
class BlockRightPadding(TableStyleCommand):
|
||||
signature = IBlockRightPadding
|
||||
name = 'RIGHTPADDING'
|
||||
|
||||
class IBlockBottomPadding(ITableStyleCommand):
|
||||
"""Set the bottom padding of the cells."""
|
||||
|
||||
length = attr.Measurement(
|
||||
title=u'Length',
|
||||
description=u'The size of the padding.',
|
||||
required=True)
|
||||
|
||||
class BlockBottomPadding(TableStyleCommand):
|
||||
signature = IBlockBottomPadding
|
||||
name = 'BOTTOMPADDING'
|
||||
|
||||
class IBlockTopPadding(ITableStyleCommand):
|
||||
"""Set the top padding of the cells."""
|
||||
|
||||
length = attr.Measurement(
|
||||
title=u'Length',
|
||||
description=u'The size of the padding.',
|
||||
required=True)
|
||||
|
||||
class BlockTopPadding(TableStyleCommand):
|
||||
signature = IBlockTopPadding
|
||||
name = 'TOPPADDING'
|
||||
|
||||
class IBlockBackground(ITableStyleCommand):
|
||||
"""Define the background color of the cells.
|
||||
|
||||
It also supports alternating colors.
|
||||
"""
|
||||
|
||||
colorName = attr.Color(
|
||||
title=u'Color Name',
|
||||
description=u'The color to use as the background for every cell.',
|
||||
required=False)
|
||||
|
||||
colorsByRow = attr.Sequence(
|
||||
title=u'Colors By Row',
|
||||
description=u'A list of colors to be used circularly for rows.',
|
||||
value_type=attr.Color(acceptNone=True),
|
||||
required=False)
|
||||
|
||||
colorsByCol = attr.Sequence(
|
||||
title=u'Colors By Column',
|
||||
description=u'A list of colors to be used circularly for columns.',
|
||||
value_type=attr.Color(acceptNone=True),
|
||||
required=False)
|
||||
|
||||
class BlockBackground(TableStyleCommand):
|
||||
signature = IBlockBackground
|
||||
name = 'BACKGROUND'
|
||||
|
||||
def process(self):
|
||||
args = [self.name]
|
||||
if 'colorsByRow' in self.element.keys():
|
||||
args = [BlockRowBackground.name]
|
||||
elif 'colorsByCol' in self.element.keys():
|
||||
args = [BlockColBackground.name]
|
||||
|
||||
args += self.getAttributeValues(valuesOnly=True)
|
||||
self.parent.style.add(*args)
|
||||
|
||||
class IBlockRowBackground(ITableStyleCommand):
|
||||
"""Define the background colors for rows."""
|
||||
|
||||
colorNames = attr.Sequence(
|
||||
title=u'Colors By Row',
|
||||
description=u'A list of colors to be used circularly for rows.',
|
||||
value_type=attr.Color(),
|
||||
required=True)
|
||||
|
||||
class BlockRowBackground(TableStyleCommand):
|
||||
signature = IBlockRowBackground
|
||||
name = 'ROWBACKGROUNDS'
|
||||
|
||||
class IBlockColBackground(ITableStyleCommand):
|
||||
"""Define the background colors for columns."""
|
||||
|
||||
colorNames = attr.Sequence(
|
||||
title=u'Colors By Row',
|
||||
description=u'A list of colors to be used circularly for rows.',
|
||||
value_type=attr.Color(),
|
||||
required=True)
|
||||
|
||||
class BlockColBackground(TableStyleCommand):
|
||||
signature = IBlockColBackground
|
||||
name = 'COLBACKGROUNDS'
|
||||
|
||||
class IBlockValign(ITableStyleCommand):
|
||||
"""Define the vertical alignment of the cells."""
|
||||
|
||||
value = attr.Choice(
|
||||
title=u'Vertical Alignment',
|
||||
description=u'The vertical alignment of the text with the cells.',
|
||||
choices=interfaces.VALIGN_TEXT_CHOICES,
|
||||
required=True)
|
||||
|
||||
class BlockValign(TableStyleCommand):
|
||||
signature = IBlockValign
|
||||
name = 'VALIGN'
|
||||
|
||||
class IBlockSpan(ITableStyleCommand):
|
||||
"""Define a span over multiple cells (rows and columns)."""
|
||||
|
||||
class BlockSpan(TableStyleCommand):
|
||||
signature = IBlockSpan
|
||||
name = 'SPAN'
|
||||
|
||||
class ILineStyle(ITableStyleCommand):
|
||||
"""Define the border line style of each cell."""
|
||||
|
||||
kind = attr.Choice(
|
||||
title=u'Kind',
|
||||
description=u'The kind of line actions to be taken.',
|
||||
choices=('GRID', 'BOX', 'OUTLINE', 'INNERGRID',
|
||||
'LINEBELOW', 'LINEABOVE', 'LINEBEFORE', 'LINEAFTER'),
|
||||
required=True)
|
||||
|
||||
thickness = attr.Measurement(
|
||||
title=u'Thickness',
|
||||
description=u'Line Thickness',
|
||||
default=1,
|
||||
required=True)
|
||||
|
||||
colorName = attr.Color(
|
||||
title=u'Color',
|
||||
description=u'The color of the border line.',
|
||||
default=None,
|
||||
required=True)
|
||||
|
||||
cap = attr.Choice(
|
||||
title=u'Cap',
|
||||
description=u'The cap at the end of a border line.',
|
||||
choices=interfaces.CAP_CHOICES,
|
||||
default=1,
|
||||
required=True)
|
||||
|
||||
dash = attr.Sequence(
|
||||
title=u'Dash-Pattern',
|
||||
description=u'The dash-pattern of a line.',
|
||||
value_type=attr.Measurement(),
|
||||
default=None,
|
||||
required=False)
|
||||
|
||||
join = attr.Choice(
|
||||
title=u'Join',
|
||||
description=u'The way lines are joined together.',
|
||||
choices=interfaces.JOIN_CHOICES,
|
||||
default=1,
|
||||
required=False)
|
||||
|
||||
count = attr.Integer(
|
||||
title=u'Count',
|
||||
description=(u'Describes whether the line is a single (1) or '
|
||||
u'double (2) line.'),
|
||||
default=1,
|
||||
required=False)
|
||||
|
||||
class LineStyle(TableStyleCommand):
|
||||
signature = ILineStyle
|
||||
|
||||
def process(self):
|
||||
name = self.getAttributeValues(select=('kind',), valuesOnly=True)[0]
|
||||
args = [name]
|
||||
args += self.getAttributeValues(ignore=('kind',), valuesOnly=True,
|
||||
includeMissing=True)
|
||||
self.parent.style.add(*args)
|
||||
|
||||
class IBlockTableStyle(interfaces.IRMLDirectiveSignature):
|
||||
"""A style defining the look of a table."""
|
||||
occurence.containing(
|
||||
occurence.ZeroOrMore('blockFont', IBlockFont),
|
||||
occurence.ZeroOrMore('blockLeading', IBlockLeading),
|
||||
occurence.ZeroOrMore('blockTextColor', IBlockTextColor),
|
||||
occurence.ZeroOrMore('blockAlignment', IBlockAlignment),
|
||||
occurence.ZeroOrMore('blockLeftPadding', IBlockLeftPadding),
|
||||
occurence.ZeroOrMore('blockRightPadding', IBlockRightPadding),
|
||||
occurence.ZeroOrMore('blockBottomPadding', IBlockBottomPadding),
|
||||
occurence.ZeroOrMore('blockTopPadding', IBlockTopPadding),
|
||||
occurence.ZeroOrMore('blockBackground', IBlockBackground),
|
||||
occurence.ZeroOrMore('blockRowBackground', IBlockRowBackground),
|
||||
occurence.ZeroOrMore('blockColBackground', IBlockColBackground),
|
||||
occurence.ZeroOrMore('blockValign', IBlockValign),
|
||||
occurence.ZeroOrMore('blockSpan', IBlockSpan),
|
||||
occurence.ZeroOrMore('lineStyle', ILineStyle)
|
||||
)
|
||||
|
||||
id = attr.String(
|
||||
title=u'Id',
|
||||
description=u'The name/id of the style.',
|
||||
required=True)
|
||||
|
||||
keepWithNext = attr.Boolean(
|
||||
title=u'Keep with Next',
|
||||
description=(u'When set, this paragraph will always be in the same '
|
||||
u'frame as the following flowable.'),
|
||||
required=False)
|
||||
|
||||
class BlockTableStyle(directive.RMLDirective):
|
||||
signature = IBlockTableStyle
|
||||
|
||||
factories = {
|
||||
'blockFont': BlockFont,
|
||||
'blockLeading': BlockLeading,
|
||||
'blockTextColor': BlockTextColor,
|
||||
'blockAlignment': BlockAlignment,
|
||||
'blockLeftPadding': BlockLeftPadding,
|
||||
'blockRightPadding': BlockRightPadding,
|
||||
'blockBottomPadding': BlockBottomPadding,
|
||||
'blockTopPadding': BlockTopPadding,
|
||||
'blockBackground': BlockBackground,
|
||||
'blockRowBackground': BlockRowBackground,
|
||||
'blockColBackground': BlockColBackground,
|
||||
'blockValign': BlockValign,
|
||||
'blockSpan': BlockSpan,
|
||||
'lineStyle': LineStyle,
|
||||
}
|
||||
|
||||
def process(self):
|
||||
kw = dict(self.getAttributeValues())
|
||||
id = kw.pop('id')
|
||||
# Create Style
|
||||
self.style = reportlab.platypus.tables.TableStyle()
|
||||
for name, value in kw.items():
|
||||
setattr(self.style, name, value)
|
||||
# Fill style
|
||||
self.processSubDirectives()
|
||||
# Add style to the manager
|
||||
manager = attr.getManager(self)
|
||||
manager.styles[id] = self.style
|
||||
|
||||
|
||||
class IMinimalListStyle(interfaces.IRMLDirectiveSignature):
|
||||
|
||||
leftIndent = attr.Measurement(
|
||||
title=u'Left Indentation',
|
||||
description=u'General indentation on the left side.',
|
||||
required=False)
|
||||
|
||||
rightIndent = attr.Measurement(
|
||||
title=u'Right Indentation',
|
||||
description=u'General indentation on the right side.',
|
||||
required=False)
|
||||
|
||||
bulletColor = attr.Color(
|
||||
title=u'Bullet Color',
|
||||
description=u'The color in which the bullet will appear.',
|
||||
required=False)
|
||||
|
||||
bulletFontName = attr.String(
|
||||
title=u'Bullet Font Name',
|
||||
description=u'The font in which the bullet character will be rendered.',
|
||||
required=False)
|
||||
|
||||
bulletFontSize = attr.Measurement(
|
||||
title=u'Bullet Font Size',
|
||||
description=u'The font size of the bullet character.',
|
||||
required=False)
|
||||
|
||||
bulletOffsetY = attr.Measurement(
|
||||
title=u'Bullet Y-Offset',
|
||||
description=u'The vertical offset of the bullet.',
|
||||
required=False)
|
||||
|
||||
bulletDedent = attr.StringOrInt(
|
||||
title=u'Bullet Dedent',
|
||||
description=u'Either pixels of dedent or auto (default).',
|
||||
required=False)
|
||||
|
||||
bulletDir = attr.Choice(
|
||||
title=u'Bullet Layout Direction',
|
||||
description=u'The layout direction of the bullet.',
|
||||
choices=('ltr', 'rtl'),
|
||||
required=False)
|
||||
|
||||
bulletFormat = attr.String(
|
||||
title=u'Bullet Format',
|
||||
description=u'A formatting expression for the bullet text.',
|
||||
required=False)
|
||||
|
||||
bulletType = attr.Choice(
|
||||
title=u'Bullet Type',
|
||||
description=u'The type of number to display.',
|
||||
choices=interfaces.ORDERED_LIST_TYPES + \
|
||||
interfaces.UNORDERED_BULLET_VALUES,
|
||||
doLower=False,
|
||||
required=False)
|
||||
|
||||
class IBaseListStyle(IMinimalListStyle):
|
||||
|
||||
start = attr.Combination(
|
||||
title=u'Start Value',
|
||||
description=u'The counter start value.',
|
||||
value_types=(attr.Integer(),
|
||||
attr.Choice(choices=interfaces.UNORDERED_BULLET_VALUES)),
|
||||
required=False)
|
||||
|
||||
|
||||
class IListStyle(IBaseListStyle):
|
||||
"""Defines a list style and gives it a name."""
|
||||
|
||||
name = attr.String(
|
||||
title=u'Name',
|
||||
description=u'The name of the style.',
|
||||
required=True)
|
||||
|
||||
parent = attr.Style(
|
||||
title=u'Parent',
|
||||
description=(u'The list style that will be used as a base for '
|
||||
u'this one.'),
|
||||
required=False)
|
||||
|
||||
|
||||
class ListStyle(directive.RMLDirective):
|
||||
signature = IListStyle
|
||||
|
||||
def process(self):
|
||||
kwargs = dict(self.getAttributeValues())
|
||||
parent = kwargs.pop(
|
||||
'parent', reportlab.lib.styles.ListStyle(name='List'))
|
||||
name = kwargs.pop('name')
|
||||
style = copy.deepcopy(parent)
|
||||
style.name = name[6:] if name.startswith('style.') else name
|
||||
|
||||
for name, value in kwargs.items():
|
||||
setattr(style, name, value)
|
||||
|
||||
manager = attr.getManager(self)
|
||||
manager.styles[style.name] = style
|
||||
|
||||
|
||||
class IStylesheet(interfaces.IRMLDirectiveSignature):
|
||||
"""A styleheet defines the styles that can be used in the document."""
|
||||
occurence.containing(
|
||||
occurence.ZeroOrOne('initialize', IInitialize),
|
||||
occurence.ZeroOrMore('paraStyle', IParagraphStyle),
|
||||
occurence.ZeroOrMore('blockTableStyle', IBlockTableStyle),
|
||||
occurence.ZeroOrMore('listStyle', IListStyle),
|
||||
# TODO:
|
||||
#occurence.ZeroOrMore('boxStyle', IBoxStyle),
|
||||
)
|
||||
|
||||
class Stylesheet(directive.RMLDirective):
|
||||
signature = IStylesheet
|
||||
|
||||
factories = {
|
||||
'initialize': Initialize,
|
||||
'paraStyle': ParagraphStyle,
|
||||
'blockTableStyle': BlockTableStyle,
|
||||
'listStyle': ListStyle,
|
||||
}
|
||||
276
z3c/rml/template.py
Normal file
276
z3c/rml/template.py
Normal file
@@ -0,0 +1,276 @@
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (c) 2007 Zope Foundation and Contributors.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# This software is subject to the provisions of the Zope Public License,
|
||||
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
|
||||
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
|
||||
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
##############################################################################
|
||||
"""Style Related Element Processing
|
||||
"""
|
||||
import zope.interface
|
||||
from reportlab import platypus
|
||||
from z3c.rml import attr, directive, interfaces, occurence
|
||||
from z3c.rml import canvas, flowable, page, stylesheet
|
||||
|
||||
|
||||
class IStory(flowable.IFlow):
|
||||
"""The story of the PDF file."""
|
||||
occurence.containing(
|
||||
*flowable.IFlow.getTaggedValue('directives'))
|
||||
|
||||
firstPageTemplate = attr.Text(
|
||||
title=u'First Page Template',
|
||||
description=u'The first page template to be used.',
|
||||
default=None,
|
||||
required=False)
|
||||
|
||||
class Story(flowable.Flow):
|
||||
signature = IStory
|
||||
|
||||
def process(self):
|
||||
self.parent.flowables = super(Story, self).process()
|
||||
self.parent.doc._firstPageTemplateIndex = self.getFirstPTIndex()
|
||||
|
||||
def getFirstPTIndex(self):
|
||||
args = dict(self.getAttributeValues(select=('firstPageTemplate',)))
|
||||
fpt = args.pop('firstPageTemplate', None)
|
||||
if fpt is None:
|
||||
return 0
|
||||
for idx, pageTemplate in enumerate(self.parent.doc.pageTemplates):
|
||||
if pageTemplate.id == fpt:
|
||||
return idx
|
||||
raise ValueError('%r is not a correct page template id.' %fpt)
|
||||
|
||||
|
||||
class IFrame(interfaces.IRMLDirectiveSignature):
|
||||
"""A frame on a page."""
|
||||
|
||||
x1 = attr.Measurement(
|
||||
title=u'X-Position',
|
||||
description=u'The X-Position of the lower-left corner of the frame.',
|
||||
allowPercentage=True,
|
||||
required=True)
|
||||
|
||||
y1 = attr.Measurement(
|
||||
title=u'Y-Position',
|
||||
description=u'The Y-Position of the lower-left corner of the frame.',
|
||||
allowPercentage=True,
|
||||
required=True)
|
||||
|
||||
width = attr.Measurement(
|
||||
title=u'Width',
|
||||
description=u'The width of the frame.',
|
||||
allowPercentage=True,
|
||||
required=True)
|
||||
|
||||
height = attr.Measurement(
|
||||
title=u'Height',
|
||||
description=u'The height of the frame.',
|
||||
allowPercentage=True,
|
||||
required=True)
|
||||
|
||||
id = attr.Text(
|
||||
title=u'Id',
|
||||
description=u'The id of the frame.',
|
||||
required=False)
|
||||
|
||||
leftPadding = attr.Measurement(
|
||||
title=u'Left Padding',
|
||||
description=u'The left padding of the frame.',
|
||||
default=0,
|
||||
required=False)
|
||||
|
||||
rightPadding = attr.Measurement(
|
||||
title=u'Right Padding',
|
||||
description=u'The right padding of the frame.',
|
||||
default=0,
|
||||
required=False)
|
||||
|
||||
topPadding = attr.Measurement(
|
||||
title=u'Top Padding',
|
||||
description=u'The top padding of the frame.',
|
||||
default=0,
|
||||
required=False)
|
||||
|
||||
bottomPadding = attr.Measurement(
|
||||
title=u'Bottom Padding',
|
||||
description=u'The bottom padding of the frame.',
|
||||
default=0,
|
||||
required=False)
|
||||
|
||||
showBoundary = attr.Boolean(
|
||||
title=u'Show Boundary',
|
||||
description=u'A flag to show the boundary of the frame.',
|
||||
required=False)
|
||||
|
||||
|
||||
class Frame(directive.RMLDirective):
|
||||
signature = IFrame
|
||||
|
||||
def process(self):
|
||||
# get the page size
|
||||
size = self.parent.pt.pagesize
|
||||
if size is None:
|
||||
size = self.parent.parent.parent.doc.pagesize
|
||||
# Get the arguments
|
||||
args = dict(self.getAttributeValues())
|
||||
# Deal with percentages
|
||||
for name, dir in (('x1', 0), ('y1', 1), ('width', 0), ('height', 1)):
|
||||
if isinstance(args[name], basestring) and args[name].endswith('%'):
|
||||
args[name] = float(args[name][:-1])/100*size[dir]
|
||||
frame = platypus.Frame(**args)
|
||||
self.parent.frames.append(frame)
|
||||
|
||||
|
||||
class IPageGraphics(canvas.IDrawing):
|
||||
"""Define the page graphics for the page template."""
|
||||
|
||||
class PageGraphics(directive.RMLDirective):
|
||||
zope.interface.implements(interfaces.ICanvasManager)
|
||||
signature = IPageGraphics
|
||||
|
||||
def process(self):
|
||||
onPage = self.parent.pt.onPage
|
||||
def drawOnCanvas(canv, doc):
|
||||
onPage(canv, doc)
|
||||
canv.saveState()
|
||||
self.canvas = canv
|
||||
drawing = canvas.Drawing(self.element, self)
|
||||
drawing.process()
|
||||
canv.restoreState()
|
||||
|
||||
self.parent.pt.onPage = drawOnCanvas
|
||||
|
||||
|
||||
class IPageTemplate(interfaces.IRMLDirectiveSignature):
|
||||
"""Define a page template."""
|
||||
occurence.containing(
|
||||
occurence.OneOrMore('frame', IFrame),
|
||||
occurence.ZeroOrOne('pageGraphics', IPageGraphics),
|
||||
occurence.ZeroOrOne('mergePage', page.IMergePage),
|
||||
)
|
||||
|
||||
id = attr.Text(
|
||||
title=u'Id',
|
||||
description=u'The id of the template.',
|
||||
required=True)
|
||||
|
||||
pagesize = attr.PageSize(
|
||||
title=u'Page Size',
|
||||
description=u'The Page Size.',
|
||||
required=False)
|
||||
|
||||
autoNextTemplate = attr.String(
|
||||
title=u'Auto Next Page Template',
|
||||
description=u'The page template to use automatically for the next page.',
|
||||
required=False)
|
||||
|
||||
|
||||
|
||||
class PageTemplate(directive.RMLDirective):
|
||||
signature = IPageTemplate
|
||||
attrMapping = {'autoNextTemplate': 'autoNextPageTemplate'}
|
||||
factories = {
|
||||
'frame': Frame,
|
||||
'pageGraphics': PageGraphics,
|
||||
'mergePage': page.MergePageInPageTemplate,
|
||||
}
|
||||
|
||||
def process(self):
|
||||
args = dict(self.getAttributeValues(attrMapping=self.attrMapping))
|
||||
pagesize = args.pop('pagesize', None)
|
||||
|
||||
self.frames = []
|
||||
self.pt = platypus.PageTemplate(**args)
|
||||
|
||||
self.processSubDirectives()
|
||||
self.pt.frames = self.frames
|
||||
|
||||
if pagesize:
|
||||
self.pt.pagesize = pagesize
|
||||
|
||||
self.parent.parent.doc.addPageTemplates(self.pt)
|
||||
|
||||
|
||||
class ITemplate(interfaces.IRMLDirectiveSignature):
|
||||
"""Define a page template."""
|
||||
occurence.containing(
|
||||
occurence.OneOrMore('pageTemplate', IPageTemplate),
|
||||
)
|
||||
|
||||
pagesize = attr.PageSize(
|
||||
title=u'Page Size',
|
||||
description=u'The Page Size.',
|
||||
required=False)
|
||||
|
||||
rotation = attr.Integer(
|
||||
title=u'Rotation',
|
||||
description=u'The rotation of the page in multiples of 90 degrees.',
|
||||
required=False)
|
||||
|
||||
leftMargin = attr.Measurement(
|
||||
title=u'Left Margin',
|
||||
description=u'The left margin of the template.',
|
||||
default=0,
|
||||
required=False)
|
||||
|
||||
rightMargin = attr.Measurement(
|
||||
title=u'Right Margin',
|
||||
description=u'The right margin of the template.',
|
||||
default=0,
|
||||
required=False)
|
||||
|
||||
topMargin = attr.Measurement(
|
||||
title=u'Top Margin',
|
||||
description=u'The top margin of the template.',
|
||||
default=0,
|
||||
required=False)
|
||||
|
||||
bottomMargin = attr.Measurement(
|
||||
title=u'Bottom Margin',
|
||||
description=u'The bottom margin of the template.',
|
||||
default=0,
|
||||
required=False)
|
||||
|
||||
showBoundary = attr.Boolean(
|
||||
title=u'Show Boundary',
|
||||
description=u'A flag to show the boundary of the template.',
|
||||
required=False)
|
||||
|
||||
allowSplitting = attr.Boolean(
|
||||
title=u'Allow Splitting',
|
||||
description=u'A flag to allow splitting over multiple templates.',
|
||||
required=False)
|
||||
|
||||
title = attr.Text(
|
||||
title=u'Title',
|
||||
description=u'The title of the PDF document.',
|
||||
required=False)
|
||||
|
||||
author = attr.Text(
|
||||
title=u'Author',
|
||||
description=u'The author of the PDF document.',
|
||||
required=False)
|
||||
|
||||
class Template(directive.RMLDirective):
|
||||
signature = ITemplate
|
||||
factories = {
|
||||
'pageTemplate': PageTemplate,
|
||||
}
|
||||
|
||||
def process(self):
|
||||
args = self.getAttributeValues()
|
||||
args += self.parent.getAttributeValues(
|
||||
select=('debug', 'compression', 'invariant'),
|
||||
attrMapping={'debug': '_debug', 'compression': 'pageCompression'})
|
||||
args += (('cropMarks', self.parent.cropMarks),)
|
||||
|
||||
self.parent.doc = platypus.BaseDocTemplate(
|
||||
self.parent.outputFile, **dict(args))
|
||||
self.processSubDirectives()
|
||||
1
z3c/rml/tests/__init__.py
Normal file
1
z3c/rml/tests/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
# Make a package.
|
||||
107
z3c/rml/tests/expected/encoding-test-latin1.pdf
Normal file
107
z3c/rml/tests/expected/encoding-test-latin1.pdf
Normal file
@@ -0,0 +1,107 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
4 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 8 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 7 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R5': class PDFCatalog
|
||||
5 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 9 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 7 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R6': class PDFInfo
|
||||
6 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R7': class PDFPages
|
||||
7 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 4 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R8': class PDFStream
|
||||
8 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 455 >>
|
||||
stream
|
||||
GasJL:N%0q&B4+(r#OYAWR;6[eEc7_.*fr$Wgp*&ONi$:L'8CGrlM&kXQ)iG;FQP+R!J;uc#Bn7pj@91E34)!bJ=A3*aD_YC58op/q,>fr(5WK1iefAF-b)(cn?3GQTs6d`\C[(n4g/#U)7n,<1c,8>ZUT$.>eF\O0.aG]lEusFugKGIKoHcl2s6LUG!<gk'4^?ZZfNiOX6(-k-8NaPo<?7hHT;qjj.qn62*Ye#'A]JD-Y"=fjkSYYapA1OEQG0`]J*KFX$`*e,%O55HbI&Hj>t\2ed2PKZX+c]V&:ZGsbMfh*;!uI]$3PH&6CRTP"R>f@Ej2T((4lL:WLk=^!9UhoJp"E,sI)inA^l:8Z&g6<d*\!EZaoHUu.<Ed4,D8>[b9iMmiWVP1Z_3@5Ok&AG$7gU_99G'9`%')"a2$8fq'0uhKV",3E[g17PRNI>9Hp^9%kX!@~>endstream
|
||||
endobj
|
||||
% 'R9': class PDFOutlines
|
||||
9 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 10
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000221 00000 n
|
||||
0000000386 00000 n
|
||||
0000000559 00000 n
|
||||
0000000836 00000 n
|
||||
0000000970 00000 n
|
||||
0000001239 00000 n
|
||||
0000001344 00000 n
|
||||
0000001941 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\2514PW\375b\346M\037u\307 \354\014_\254) (\2514PW\375b\346M\037u\307 \354\014_\254)]
|
||||
|
||||
/Info 6 0 R
|
||||
/Root 5 0 R
|
||||
/Size 10 >>
|
||||
startxref
|
||||
1992
|
||||
%%EOF
|
||||
107
z3c/rml/tests/expected/encoding-test-utf8.pdf
Normal file
107
z3c/rml/tests/expected/encoding-test-utf8.pdf
Normal file
@@ -0,0 +1,107 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
4 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 8 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 7 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R5': class PDFCatalog
|
||||
5 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 9 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 7 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R6': class PDFInfo
|
||||
6 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R7': class PDFPages
|
||||
7 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 4 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R8': class PDFStream
|
||||
8 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 454 >>
|
||||
stream
|
||||
GasJL5u/FS&;BS8nfQ^CX^JEIDA'Ie+usX/FY@D]Asr"SHL5*e.HT15hN1>]+QSY2cb+Q&AiNmVI(J&5pni#=jkp2T#;.M5FbPgDcQ;4)rh<[)XQ2FcV_"=CTpsAK0E5gS)i&5U^t6OtLgn:+YN5L7Qdm)lMIM1p@H1O@B3]Y3+)6/6rWI?Sobj\-W!gN9'`X<FliRl?+N[!UBrHl!Tm@BWo@EbFq.o>>cs>#q*j'WX)](5f2OV6)CrYE-U`JI`iRZac*=:V5>(/JJkB3Ja+2Dpm-LIXi0R6l5*#cZS-&j@^4U!6[8rXDQ!h4^H:D1NE;bQ@9_P>Edoh+(QBrM6jOKhdDkbq.n2>)!X9S[V<[[)pU0".PPR>c@Nn3#]u9Ll8&f=!o2L@U?P(gWq&pn!(Tl?Ym_ZSQHjYUdReTNR;40m:DN..i5?-C[GBlkB!D+5],Z*<~>endstream
|
||||
endobj
|
||||
% 'R9': class PDFOutlines
|
||||
9 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 10
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000221 00000 n
|
||||
0000000386 00000 n
|
||||
0000000559 00000 n
|
||||
0000000836 00000 n
|
||||
0000000970 00000 n
|
||||
0000001239 00000 n
|
||||
0000001344 00000 n
|
||||
0000001940 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\2514PW\375b\346M\037u\307 \354\014_\254) (\2514PW\375b\346M\037u\307 \354\014_\254)]
|
||||
|
||||
/Info 6 0 R
|
||||
/Root 5 0 R
|
||||
/Size 10 >>
|
||||
startxref
|
||||
1991
|
||||
%%EOF
|
||||
102
z3c/rml/tests/expected/printScaling.pdf
Normal file
102
z3c/rml/tests/expected/printScaling.pdf
Normal file
@@ -0,0 +1,102 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
3 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 7 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 6 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R4': class PDFCatalog
|
||||
4 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 8 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 6 0 R
|
||||
/Type /Catalog
|
||||
/ViewerPreferences 9 0 R >>
|
||||
endobj
|
||||
% 'R5': class PDFInfo
|
||||
5 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20130305225909+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R6': class PDFPages
|
||||
6 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 3 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R7': class PDFStream
|
||||
7 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 194 >>
|
||||
stream
|
||||
GappW5mkI_&4Q>Egu0p:7Es>jR'!#32o8fB2Q_rq<nh5[V`.)-q$[\EH$k4$6YY-nfJ1q^!p/>U<+H1-LcnE$OFhptO_6!)8u(,(9NTt(IO7<+@(]#B2=rgtQiC5hZK<7lJibp-%X%9cD8t'7TsqOm/fl@:SqH8^\Q=FT'=MULkiX8e$=9PqV\D\l#"6E_ao~>endstream
|
||||
endobj
|
||||
% 'R8': class PDFOutlines
|
||||
8 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
% 'R9': class ViewerPreferencesPDFDictionary
|
||||
9 0 obj
|
||||
<< /PrintScaling /None >>
|
||||
endobj
|
||||
xref
|
||||
0 10
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000209 00000 n
|
||||
0000000372 00000 n
|
||||
0000000649 00000 n
|
||||
0000000810 00000 n
|
||||
0000001079 00000 n
|
||||
0000001184 00000 n
|
||||
0000001520 00000 n
|
||||
0000001618 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\266\223\013\225\230\266Y\231\206\3278`\331\265G&) (\266\223\013\225\230\266Y\231\206\3278`\331\265G&)]
|
||||
|
||||
/Info 5 0 R
|
||||
/Root 4 0 R
|
||||
/Size 10 >>
|
||||
startxref
|
||||
1662
|
||||
%%EOF
|
||||
127
z3c/rml/tests/expected/rml-examples-000-simple.pdf
Normal file
127
z3c/rml/tests/expected/rml-examples-000-simple.pdf
Normal file
@@ -0,0 +1,127 @@
|
||||
%PDF-1.3
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
3 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 8 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 7 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'Page2': class PDFPage
|
||||
4 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 9 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 7 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R5': class PDFCatalog
|
||||
5 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 10 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 7 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R6': class PDFInfo
|
||||
6 0 obj
|
||||
<< /Author (anonymous)
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (ReportLab PDF Library - www.reportlab.com)
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (unspecified)
|
||||
/Title (untitled) >>
|
||||
endobj
|
||||
% 'R7': class PDFPages
|
||||
7 0 obj
|
||||
% page tree
|
||||
<< /Count 2
|
||||
/Kids [ 3 0 R
|
||||
4 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R8': class PDFStream
|
||||
8 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 139 >>
|
||||
stream
|
||||
GapQh0E=F,0U\H3T\pNYT^QKk?tc>IP,;W#U1^23ihPEM_TN+I0SHG`19f970NBe]1tON^#g$)nn4:gGa]Abo0?Ql6;fKo2.P=R(85)fZE%+C1ccf&6<!^TD#gi\mUVP%V!4<7T5l~>endstream
|
||||
endobj
|
||||
% 'R9': class PDFStream
|
||||
9 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 141 >>
|
||||
stream
|
||||
GapQh0E=F,0U\H3T\pNYT^QKk?tc>IP,;W#U1^23ihPEM_TN+I0SHG`1pYUe1p^"42DN`<;[CKFd-sTNaiRTicS*F4d8L<G:!V'X;$]]d:K;?_8hA<49@m,Ka\iDl!ZRrNb67n1SK#W~>endstream
|
||||
endobj
|
||||
% 'R10': class PDFOutlines
|
||||
10 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 11
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000209 00000 n
|
||||
0000000372 00000 n
|
||||
0000000649 00000 n
|
||||
0000000926 00000 n
|
||||
0000001061 00000 n
|
||||
0000001343 00000 n
|
||||
0000001456 00000 n
|
||||
0000001735 00000 n
|
||||
0000002019 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\232w\017\3421\263\325\354R\366\267\025H\343&\012) (\232w\017\3421\263\325\354R\366\267\025H\343&\012)]
|
||||
|
||||
/Info 6 0 R
|
||||
/Root 5 0 R
|
||||
/Size 11 >>
|
||||
startxref
|
||||
2071
|
||||
%%EOF
|
||||
150
z3c/rml/tests/expected/rml-examples-001-cmbox.pdf
Normal file
150
z3c/rml/tests/expected/rml-examples-001-cmbox.pdf
Normal file
File diff suppressed because one or more lines are too long
136
z3c/rml/tests/expected/rml-examples-001-hello.pdf
Normal file
136
z3c/rml/tests/expected/rml-examples-001-hello.pdf
Normal file
@@ -0,0 +1,136 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 5 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Helvetica-BoldOblique
|
||||
<< /BaseFont /Helvetica-BoldOblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Annot.NUMBER1': class TextAnnotation
|
||||
4 0 obj
|
||||
<< /Contents (\376\377\000X\000:\000:\000P\000D\000F\000
|
||||
\000P\000X\000(\000S\000)\000
|
||||
\000M\000T\000(\000P\000I\000N\000K\000))
|
||||
/F 3
|
||||
/Rect [ 0
|
||||
,
|
||||
0
|
||||
,
|
||||
1
|
||||
,
|
||||
1 ]
|
||||
/Subtype /Text
|
||||
/Type /Annot >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
5 0 obj
|
||||
% Font ZapfDingbats
|
||||
<< /BaseFont /ZapfDingbats
|
||||
/Encoding /ZapfDingbatsEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
6 0 obj
|
||||
% Page dictionary
|
||||
<< /Annots [ 4 0 R ]
|
||||
/Contents 10 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
612
|
||||
792 ]
|
||||
/Parent 9 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R7': class PDFCatalog
|
||||
7 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 11 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 9 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R8': class PDFInfo
|
||||
8 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20000101000000+00'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R9': class PDFPages
|
||||
9 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 6 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R10': class PDFStream
|
||||
10 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 674 >>
|
||||
stream
|
||||
Gb"/$?#Q2d'Rc%,s)=i,'<<sI$2N#VQY;:\.9jQKp?[;1Y@'0H[+i?f9g[PFU3([@Cb4O\mQ(%,*(/YP60^<WJ6@]O3<AX^-6RjY+C*i/f^Je,pZe+V19iR+\>(B_!b@L-&<,E/G_1e8+Y;R,Ip_u[?fq\tV=CeLRXIU!$fOPQiEa2G0_XlBL;XN&N2C*/1kB+\W%jdSk/8S\'b)%djZ`5eQmKFJe+YC^Y9#0IF2d]Tihob$llsYu"Z%T\<!CND;FOMQbKRpVV\s6(AGboimEKtC-/[,lCFuNKcT4E;'oT">FuS2UmHhdI=\#2F/>\L9DaSVs*DBjUH4./j9VboIVRT0@auk2cLs\cb-\e"X3]36*Pu^kjPXk--VA7EV`Lh7l`FB#>MH290bFE:859;IpY9RnUh(@u0_@mT/V7&^5,$K$)ic)'g6?'o&N2_(P=YN7L-qlRobc!,A9NCja,<5/l9`<<4ZI[[iI'?K:>0W)[Cm1FW(]W:Xfu+uHZ:UhE:;aHF3a6A*WACC])8nSqCk8nrNY^'Slh@eZ#04.*/_+W9R9\i.Ib]UtW+e2Ek2J%77Uo)a.VZi:"VN,8L.kFJGK0su-du!#2;Y<PledZ/s+]Ttfjgl>6<E<g3l%+6##3<9E3r>,mrV5&hllM8m'F#oF>j!/Im:.e\c~>endstream
|
||||
endobj
|
||||
% 'R11': class PDFOutlines
|
||||
11 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 12
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000233 00000 n
|
||||
0000000398 00000 n
|
||||
0000000600 00000 n
|
||||
0000000856 00000 n
|
||||
0000001030 00000 n
|
||||
0000001318 00000 n
|
||||
0000001453 00000 n
|
||||
0000001722 00000 n
|
||||
0000001828 00000 n
|
||||
0000002646 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\223\367y\354\321\362\222Ju\262\315V\3448<\372) (\223\367y\354\321\362\222Ju\262\315V\3448<\372)]
|
||||
|
||||
/Info 8 0 R
|
||||
/Root 7 0 R
|
||||
/Size 12 >>
|
||||
startxref
|
||||
2698
|
||||
%%EOF
|
||||
322
z3c/rml/tests/expected/rml-examples-002-paras.pdf
Normal file
322
z3c/rml/tests/expected/rml-examples-002-paras.pdf
Normal file
@@ -0,0 +1,322 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 5 0 R
|
||||
/F4 6 0 R
|
||||
/F5 7 0 R
|
||||
/F6 9 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Helvetica-BoldOblique
|
||||
<< /BaseFont /Helvetica-BoldOblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
4 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 18 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 17 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
5 0 obj
|
||||
% Font Courier
|
||||
<< /BaseFont /Courier
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F4': class PDFType1Font
|
||||
6 0 obj
|
||||
% Font Courier-Bold
|
||||
<< /BaseFont /Courier-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F4
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F5': class PDFType1Font
|
||||
7 0 obj
|
||||
% Font ZapfDingbats
|
||||
<< /BaseFont /ZapfDingbats
|
||||
/Encoding /ZapfDingbatsEncoding
|
||||
/Name /F5
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page2': class PDFPage
|
||||
8 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 19 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 17 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'F6': class PDFType1Font
|
||||
9 0 obj
|
||||
% Font Courier-Oblique
|
||||
<< /BaseFont /Courier-Oblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F6
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page3': class PDFPage
|
||||
10 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 20 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 17 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'Page4': class PDFPage
|
||||
11 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 21 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 17 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'Page5': class PDFPage
|
||||
12 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 22 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 17 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'FormXob.ce52f900887bbd9ff9881c236099059a': class PDFImageXObject
|
||||
13 0 obj
|
||||
<< /BitsPerComponent 8
|
||||
/ColorSpace /DeviceRGB
|
||||
/Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Height 86
|
||||
/Length 3441
|
||||
/Subtype /Image
|
||||
/Type /XObject
|
||||
/Width 130 >>
|
||||
stream
|
||||
Gb"/kc\l$s&BFP1_2Dt)$d:1-71_WG5t""8d$&bf&I]R7/-[n]Ci0j46p]$_"<iAJ+AkPK+^dQ3d#.o2*fP=T(/u'4+Zm=%BD/CfZ`;oPEV<+N41dqfbeEiJFoCU*lDj9][C$6dYQlI_F*$sEYC8T\iGp73lgK<Pc&r,^]Wlq7SO]%?&*dkB7;8pc#'@%.gKhGaJ_,AMooIO[aU7Kbr(V1>a0tHAPLlrJ9CjJP]Q3:qi]L#Fa-T"Ac's+Mn;AA&B6[X-o?:8=&#D:N"#.Sd_Jd&9nAMZ$Rc?Cq]/Y@kGCugmI;S1MEQ=hE#?fu]AM8aaT1Fe#Q@"WD]Ve6J*7aNZ3-FN9]5r]/8)?iJrSUU\&9qs,l-cZ%,@Ga:aj1tI*.E%7]"0q@K7*%X`Af\njiWkC+51"lqO*V0*PI'PBJf1OT02\,Erh63ZEf)S^]!jfHpmVVo1#\nh"B/Yc3VT5AJc=Ij'4BjV:+2kk<HNQmc.&9l_BFJLuek3.Ad))F6:]Za5,D#N8Y=/5er+re/W@^$.6s9Z2?lR&Yg&ub=e2am1b$EC%]6D*Maj'NO^7!+3n3&S;^A.9dq9H6VhO::=>67ig(ZqPk)\b0r:qcXj)4V):BjW1aG9sr[">($q&@&2IVjUXKB`Q6S_#QPVQ<*!=7!gZ)uuaUP>9uEFQc49!Pn$gdSY2"9^dV)^&'O6ZPLEmUUKj=0GrtOFg]EA_)rZ&;rVG*uIo`F7LH(Ktl%Gc6>hI=B"D!/K;VVAbkh_dMaT?"DMF),S/hm>a3)l<UR%IC1E'f?>7K"=C+Ak"]sJfAU=.%EUKQU+N.i;Q//H.6[FEoi_BsN%kVaghJClIbg7+J<T=!_VUr+X)=m/T+^*S<k:Te:9;Ar'52'u/<95_^d?#Cm(3a^).k<+u>B.Che#fJj1ZLr,IdH\qC])p?cEfgQim'seq:@jhddafm@3jBfh:gMK;$:u_Tu`Ef5+:,^BULR&2*)B/@nCjXR21K+<SWuHTFlLt'<kA]iR!TA,d'<J@\QP+[-ZLpcb;?E/.b*;EG)_(p'X^[cm)$98at<>c_NWo*aNDp9X1"d!$,2'E=2JJn8C4$[G>uV@nc,FbWK.kk;5bN[lL.ac+H'4?u]gpgIb!9C[Nt'diDUboZDk3Q6bqekZfLKir0p'T.OkEb0"GQhe^7P5tiPEKg9`>*6*8=eoGBkm.`S8P!!VW:p8uuM*7C(XQ669?@q5$Q4JD5R:NNg&#\*=Lcs_Ys-4ti8M=plM2=X[jDgXP`d5!5=A/'/D7IZWLoh%R/5#uJD-R#!Ct4c/.JK\;hPKdHbZ*&omX+;2N/bA=BSmAO_!:.d7kKp`k(#fe%"%)Bc>TQpKJ^XW)gN/-g9n9KpU)/\f1$QU>slYX%2rG"CReW\5cHb`#!.+i12ka"f!N[]nrqE:aVl<oHK4,j"jG%?3Cb=u&;9tiK2F>=hB+OEDSh8`2^pdo%QR65*#mk%-#X[",Ofs=\_!N!>3!HV)troQI\?^9^#=7,?QpZadoGqfh>,"Q3`/l#;<4!6LL(3mqm;>D2;<UEjnYmQi$QH[bRr<&=3GIsCCj=<_V0PcDkU$"9l&JPCY+=oLba697H/1ZR`NfcF5&A.joeb.C8.W:i1(h_i6bd_aHnq6=W6t'pT(*AptT.+A40#_3BB$q2USI,_t)1079S[5@U[D21aYDqc_RZt6(0)FVb>-DSjMNd2a'#ggd(q3&M5_iUbYsb]ja""]dcA\fuB?iiO&!^PLOi35WqkHR'-KR*aWf^n<f,a/dt28BJ.s-PNP4Q9Hm,H`\H<)h5FLD=?mQ@m@J]hlc9gB.u[)TD,CYOcAYMU/3XRdi)LC-/OnZ`!hnh-%<)cui@I6Ok#?>:jJn&Tb3('.eah]JEM[&j5^)dgEdO)BF`>l**+9SmWp06Tn\hjj8O#guco7C$_cFSN8udG_'JXgj(:e9P*nnOK[6iK?kn>.LPi?]flJeri[+^]1DMBV`UbNOnV<q8>1U'HA3WA`_,Z[[YiY\F\l<kE+8Ck)sKqZmfr]6Z\LlFkKB0G5u2n99UGV8r#ViL])`/I_o3?7-POuCd71kl4tc#&87YZ#7&_njIh5>."XWK>CNV82<:lUW2MZ6]R1"(Qr"9LlJ0]N3]b>>DbL9h[9,de1[W?HDg'Ht=lel/IrgDER(cMeqYC#aZQTG"aM>=r:+og:N9?@rW_D09;hA-aAd$\gEY138bbi'P@0Q6YOP7nqSA49.ffNT8-`cPF!35;&.X&;Js0qoSkiQG5a9P8WsU9K*A$nP[U&kMU"o>YqIs9[^M%D9[uVM0$DR/kl(\cZXB55OdZGEad#;2dKHA#SogbAU\HC\3:Ss4hN7P.K,`5-`og&N[dDq)aI.f@Q[uXZq(#J"84k7RM9GI6Eu=ob5#K["qZi86D#mOt?F/UJLHEq@EFtnV[YYJGC0N2k#UGs_O)`e)0)d_`U4<:#BZoVfh*cco3&^>XC>$l0:NDf3PVCPLkT+K[Gj[;*Mi.`B:<?a;%!=r>GfhIC(l@kjVkHl1:7`XP[)fE9FEV_$!\TETGUITa(dFf,"t3A+]Y"B=CIq/8;/4FH0h2\_-'@F`\hoa*j-]Y^3`L_r8h1=p=Yqo:=<sJP;IO&iQ+08d-CNG$>/;_DBHiBuE=[u4d*$B&Ie"+Raq&W57a\Ba#YK`!"66+NaMM5$&r>Bgbs;^cVM_sYUWoa3HQEjJX@)NI.r?q0!VETqhE@j3RfpT"pBK,="rZ_6UM,J9AsiZ&.PVuI"=kH,W`(^\H^L/0Pl;f($GEt/HKdKa-Z[#mb4Qck:NdTka@p4=AMKW!n2kO%iX4a+%PsVJqh'Mg+P*jW\U+Mhj#iUt8&bn)#YWO)\+6#NT0,TqCkQIFZS_tQfq9j]iEWVSG/#.HH;1Ks+:^BgHYq798DlD2M\)Jj:bFB^hgC\o;H:%"`HcWs\CTB1n`h!$E@9Mgk%VV"54r_tmMGA@":V56%)>K12KnD(SlW7A\OSmlGX,:m0V8WqK![YP?b0[4SD:rC-*s.&GJA78Y!'=J*A3?!5Hnp!m]cU73i^-fm[`,^NS554-[-=Z5\`Bk;o;Z;nQGDC::$=t0T\E-1Y=<p'OND5SD5QO=RT)Xadnf/*:3%Q::607\6%\h>kP3K%I"HS5IogSDcLLBO3hleVhS@CWc(mO8<;,DEi0!5GO>7RPopn9ZYXJ#O"H@C(tsj/.PI+-Y"pJ@=gj.uGFR3Z+[*^=BVXt$Cc*W1/+-B5+alZI1hBZo-/BldS`68Ql\;k-:(?g%7u7$pCe%rKe94K)B.N>\f_[4(&VtcnFh/?.eBk5GO<,P\GA;#]]3$>VTQBYBGrpH')5Y:[OJ_i^9Kd5i5KbtHR>X\kU)%s5S\FmonqYG2qrh)*9t?/cqb!YMa/8Ub@.B+9K".)ZAlu_*NdqGMqYu*b<qL`8"8iHr`IR=~>endstream
|
||||
endobj
|
||||
% 'Page6': class PDFPage
|
||||
14 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 23 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 17 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ]
|
||||
/XObject << /FormXob.ce52f900887bbd9ff9881c236099059a 13 0 R >> >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R15': class PDFCatalog
|
||||
15 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 24 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 17 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R16': class PDFInfo
|
||||
16 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20121218153938+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R17': class PDFPages
|
||||
17 0 obj
|
||||
% page tree
|
||||
<< /Count 6
|
||||
/Kids [ 4 0 R
|
||||
8 0 R
|
||||
10 0 R
|
||||
11 0 R
|
||||
12 0 R
|
||||
14 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R18': class PDFStream
|
||||
18 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 171 >>
|
||||
stream
|
||||
GapXM_$\%5&4Gu<r54%$'cOF%R\j06Sgp\p5EHQn>#=PbgI>b/J`4EipaMI%g&jFUVBujA4-2FQ2E7Wm%r3q1:n/De$\(&8qKY%g=%PgP*nk+L3Au9=f?j..dCsO/6Ld2H?:"&,F]P$7),Tm/fod"7W(IjMSdDMVYiZ#fQR#Z~>endstream
|
||||
endobj
|
||||
% 'R19': class PDFStream
|
||||
19 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 1381 >>
|
||||
stream
|
||||
Gau`SD/\/e&H3^ns5Dl:RlWB`8A/-rQ2s]A!sPtRXn?DL(WrU+/[D0Ee;E\GmmpTeXXKh\(FpI.2L0Mmh=DWD#[$jFlMl/8E#Z[eOoV0e`]tNmJaa.u%kfS"?!aHi$H/9PPaGc9LD+2?LO-ZP3'R,'"lTrMO+5s4qfb[=GqEFSUk6Kaqr7qX$GsP$r)naKE-[S`SB=(:-)T^Q(X,V"LPiuATm$djaDp=kHInu^qC7:G@:f:ZR&gb8P0$nm;f0>VPI-'e_Uji+`'jh\b<R<mb+c&f.-'fr.0Qgjn>".O@(YtG\ESIUm_33uNrD'Vh5\l[p7ko=7McCdjSVfe]u6'YZ[S]$RX??8*iNS<"+i^!iIM-/CE8f+arGApPdk$\SZ7Pej.97e>HopaZ@Fl2d0M!!aXPo/l[ZZ/3<;<pZi(1C8/+=`71Blt6/LrP?9o/*';A*o"t/Lc.?7"j'qdl2-)SBh?a>-X"#0r5RNMWWo#na@6qq_jWg2a[%LN#f_\tUeDd]G3aioG4!pZRpZ403,k#GABQ9>]O)JUm8^pca2V3j7Y>`*1LiJCb\Y]G:Jnj5T@A=J?UPG8Q%[Bec&Z#/5YZX;nthWGiL$b56%d"5GP*Ye"?f>;]7mU>kGneE@s@hF'ZOiLEINHRang+(#,#?6bP5kG4N+",=baTNun(9VSF`3\ed[BP!05,R(&.u*B6VkAJp/aTH?<&/e0YK@("ki35ATLKl'9+85P^n6fHj_u!>.bU9./]Z=/]8o#&2eh3ss%<i7\A'I+ee;5fg`r(GUdI:K@i-')9c=C)cI3dM]W.g[+elt\.u[t8P>Ebh;])tWk"Udpl9K44Rf`H2FE&\m_IVpM=ZW#gWR:n4pn;pk_qmOT'5mop[)/m%?(1B`2Prq:a9:RD@9h.N!ZFU^E:X^1]U=&hI$a0L+E5M<Ib9Kd<FpnbN_5W[)'#19eELnm`^%V-&7]*O12YX=Y&gb+o*&G'fI"kP3^>fRV>tr15X+prlY8Ug=&"+-V3//g+5?/6_j6R."hFC\89;G=7U1?'49s0_abZ%,6kpf@`"aqb)<.&2_fY=pZT`)Z/FG.9$!0Wo]Mou1<_*<Fp[20]4CZ)r[BCsZ`f*nrb3_JAJUqEXo5??r>.&4f[!^l(f3U?0<s5^sX)qF;cF48J/)XauU<S3j-Q.k*'sErVb(7(f21'SEZo<(EpmJKNGNWLtnP%h\p\TIlTl&)FmJ'E1P5\/'N_B&BHZDBI8m3"@p_3&UHgi[h`p]#YLku5Y=3%QV5-+<_jl:+K#^f3u4!/$dSj`i(gM`/E`NH?=U#E5^jRKEV^A_g5c^![?hn-N\`<oAkUT1<DC;6%$?W5D.q5u#dRE*rlEk=JP92-FGH1;t`eC7%~>endstream
|
||||
endobj
|
||||
% 'R20': class PDFStream
|
||||
20 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 1515 >>
|
||||
stream
|
||||
Gb!#\D/\/e&H3^ns5DmaLc[GPpnAQDka/@Ycljpf7_jP&;f(,f/'F>,cc^e9Nhe)HNb$7pgC?+]6mSD:kFOd+6ja]YW;<&9!H*=q\YDD-pbSRp#k7<A=9%jNYKI;2`diAUN)AT%0cZiH%Wa`f&fu:`"o]-hT7=Ug&+Au&&(:q.2c1@-[Jo>:p'1FJi;]l$5$_J?i%k*C2C1\?1NJ?4_)d6>A_gIMPAE*5=W4b__1G7Z2g714dRiPoV*=3*$km2LRPW9i=*(%#im6\3LNo,EKDlR>rZ[#n9cSp+UsZq#6n'%#?:@GO)E-3Dq)PcWY6`55eIZ]r0lWR1T[WZF+C6@8Lnc5KC^"Mi_IBp,jX/9IC\:X?9l]%TlPP_0)T$R"%d**8Gu;\-(nb,2K%Of2&r3\[bi%q$-35;b@A'3<"-S;]<h$L;+GFpBg;HoQ>MD%16QKL@`l*>78i"NIces*B5"as5_81dcEU![H7Q.NRSKp)?[<-AAW=Ka!iIcsn:ju-P0mlNh@?Mem>OB[&4!._=k<le[n4/kY-jtAgAf(NQ#J`?>BJ,m:h&XN/A$?C#*=U*\*PcRj;2,n-WF_Z9b4)RTMDF[O=bB3;p?2d/ertJm@@(7^b\h*XaeM-:h-,QM4U8mV]LoX*Z5q=55[JFBEd1l0$N0&3a]AorPJI!EJ]gt;0.LuTHZ&jSI;d;h)t%`V_e=E,;._\;WK%!NVPc.Yr-uN+Cl)jA`UVg)p_Jt=iPp[e>stL/[]&XlUkXZM:s"AnLBhc+,.;oYLi%8a7_Pm72>0"_/,.\[\$"FP\2\a1C^nb&i(E.9n=X\\93)4,F0a:B#j$_\DDsBTPVmRdUMD4A3Wdr'f`FN\+3q0>$5-\^mUqpUIeZ^ijK.i?Hd84jF$SCCf&<_/K'Epj`^#n'(i[*lCCmXqKR(<A#uN3sUi*jID/OoXc-ISDQ$A:J6$4^7Xnpr?`0TYWQ-slc3l'5Uj-VYm7*tBUDoYnPQ303LSDTW"n"ubD'`Bb/GNAPNN(hN^B(35^J_WFYW`)iH@!^WfD?Wcurc'lCIJt$jBAW`_[dm4r[`\TB!'=\FF&!$a/DftfJD"F\]`5E+=(`,"i8N3$8t?K/A@M*&qT_SY<fn2]I:H;Sb_cq!;;is'#BCF408>(IZp6&B"C08393Gu`75S-iHB@)'EYZO?4B^eO\O7<?Q(W=1RPk3Dco_+3#5uGkOLZY"2CbW-+?c(b<R)K"k@hTn-llr;S>__`HVYfXFBs*ZMX40Y[A6[424tBfh-!O-=",Od6MY1jDRQ[SC,.4uknZ"PNNqRVO7H.TU"qI$,'TsX8IADJC1FsF6Io`("m,om(WqU*I]#J=I5RT3fUrS(H>'`Y=?UGtXCE"#CI9TTEJ3HG("O=JWa0@bD9Q'3.u=,8mA-dB-sYf2,lp$BYUJSX]'=u&qnaiPP,]i#!t*LWQmPlP9^qBX,am]sSlW?n*Ut!kbSQ8NZc@l@>gZbZ6EA(Z5@ieo/)@4SFb\(trrDp[r\+~>endstream
|
||||
endobj
|
||||
% 'R21': class PDFStream
|
||||
21 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 1634 >>
|
||||
stream
|
||||
GauHLD/\Dn&H6"8s'_/h:jQliZ1CF7h3YkD9'kCeV:+2!?OSY7gQ8Xr;i^bJ2g4&.Q47,"!(&EKa3Vsl1S0/LM/TE/-Zag]&U_*b5T,NX5]'uJBE0udj.d^:7s^0rmAi6:M-J<b"Kg`=[nhC`%t2o[d2[JMcNEn6qA)OEQZ-;";S[Q<pl1i]kW=`Pf-7pL+!oi"os#N0C`?X:,AnSY!VcH_q?44IZIIB7?GiLs(<fe!g-dBoe7oC'Zj"rYTM>C1B$_KN;%<u*nQEjJ+lFJ8J3tqjZ%/[$O?X,?n2M0a)#@<K)[&>raMYB@!uQq7^8Xl5#Xuu4nDVs$%dSNrEZ%Rr&a5K3MOp+Inf0W\RE^W"80fb(BG)Kh/k$9#N^hM)O/#jPfDP_>.<oEo]I%k*<j+ds%2o:Pap4oeP7n7d1m)%2+^)W@`EcC>.m]n_=\,ukokiG2Y3uqBCqW`9HHSOq,P+g>P%*-4]rs;\*124nYm\&md.T5M,*.m)`*t2^gY`LGBGT0O)HC^-V@a\,M^LfelDbf07lN-*o,,7/&ul%o6E8_q&h)/EQ/l"([@CiYmDMWIYu^3,D>f17KlZ?@Hni<(/]V,Y#.4!rd=6K!WIOi1"I]@Necmo>D4>hU$k$-TO@;k_SX-Ln"'EFo["P;"I]E0`N3c.&*0u]q0cXE,.r>PSiZ?JuMNYsj;MclUQXe#Po,O`k-FIO9GWb@M!OE82#*iS5'rf$]nq&o7-$15\k]ghZE_bF+e1Orc^41+50XnI?(3A8tbZRRORQA'J6i1aIo*lBpB9[PnaE%j:-]]tTrcI_`)q\+:ig*?2hdG/P.H_7VG`tkOCe_=V-LW7M8u;6SPQ*.LU8H[^,BekG]u_Tj9UGDm:DXZ4aJZ=!fnW7DU!o:=*V0iQH]paKGnaUhQRrF7?S\RZ^=p/6-](Im]Yg"HHi@>/frjXDjEPhf6_(#LW//LrV3cj\MY6j5U^P*VUl_C>Bd^4%V(8Y!"I>!]VoG,`=7fTgGW!#]-0?X-ZS\(menMR&&^*L:r*0d(kG9J,f"'mI^k8d<YL5B^Z5glbl4F`64-<q1p\Q"[^%Y@dDmp^n+dsa7/udU"I(RZGhHY7jY\]d_he)aQ0EG<AI@%YKaPH@Jk"?L)L0'm\;X5o2eE"=d/dDnG>o75s4_",/@'J6K1rO'4non9QrPq,E#1r-b5"7`Z'_6sF@+N/CW1f$)![KDB"]&;oo4K,`or^t>dS/Y^`6jrOHO3pl=bbT\?Cen>:RgiAKaS)O,@u+D$#'ScDuP?$*Z$"JUba3nitB[YkV#BCJ7J@4@<%t_@DlfhDP#R,\\_m;d(?N,9LE6X=GD%"UUOM+&C5p<Y-c@7=EX6T3'DU)=k4EonY@@c>E_ICF1Vt6h7IE3O^G%k^>KZ@Wk$VC`"kFuOA9009kW6u;/qg+loW?BGcfl=AoisBgS34@'Kj0)o6<l8pj#[h`nN)aXZQk5)5RY#)k"l'_U`'[4k#EfFBL]!U=hBJk1+0Wc>>3Ke1at9)MrJ+,Y4o^L'^^^JX:8OF=[B]kc$cM2HA1_O#+VEJ592<K1EB;2UX[tcpKrs(RYcq-ipmSmt.u>Y&5j%5r>,>'b7'^<+eo96gZU3'D'g."ungC+%<uu&-~>endstream
|
||||
endobj
|
||||
% 'R22': class PDFStream
|
||||
22 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 462 >>
|
||||
stream
|
||||
Gasaj>>N*i(k!dbIlPhDVpVc815<7CUJ"97&a?&DgF-R;)r'lVgD5ZO9JgORIHRup3Su9:.mKd&3!UKb\cDi*i%kr,0^o[G\^ahd*R.Fm?ZD;iT&Cq\2LVOe4%&/JG?s\XpA=03^-)YXU1l>bV6.Q+\i?N&i1Jqo]#E=e'GsZS=J%R3_&Ek(cUTQ@dHX1e*U7Dic8FQqU/(E0W*S\4"(l/=b,mg5Q#0\M#`C-"'8Mi(%Xa4rjEeK[\NLPAPfgR]2s>h&9$92Gc0&enGV7uEK3;>%bVHPHJZ<OT1s,redZ8'ZE2H@^@:%dLhGdS=-YjHCGCV"YIFt3)$JVqN)N$c:Sl])&3S>TV\LOH`qOjqQr0`1!r*Krj;%>683OXl5Y+f`p[UGKA>43gr3S4OE##VS2HS6kTl1$@q,mm5qH'l]t9k:8$*QAK72@+*'bpBC5Kd_D<&m"07gkWAS~>endstream
|
||||
endobj
|
||||
% 'R23': class PDFStream
|
||||
23 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 1991 >>
|
||||
stream
|
||||
GauHKgMYb8&:HLqIi+gh;$pMCF]Vc]8D4D&i1rpq+FV>SP$CnSOBcCABh/!qSlppegN$g@BOG%"GB[q;B$Mq0)W<(5T2AAUE^LZ/J:]Lm&dkMR.;^^%O3Qq2kL1*Z2l:!)HfJKnDt^CIm.H>#bMd3IUuc8XS"']O?<rTKr4]%f[#V:=jWpDK%mQ#Fe)hllIe5,HSt6Y')"[3<((@*>R]dLEq3$]4.rW,+0NkLT2SQC9jn7cChHl38Odr"JXL61MdGZdBZZ38hNL%aV(riU%=Y5t+1nMo]X4:ml'(ig0p>=^^_nO>14VP58PMQY558!%sHJ1VBAl&[q6C!I.^*qu`VJeki8P;gSFJIWW8n!Cd'E:5mo>RM<s-D3SPg.e!0%L[C7Vo_WOTt8#fr_E_R'u!XOsk'X8/L?qP.YAp[$M^KQ#9m6g1VF-'gj20,iJ!=4\q%c\!FJNa<>E)HT9FZAtA_H'?5VXTlL?0b`7Q1&#E\J8Ll3HQlPgip5>Im]ZA4Y$N"["<gJk?P`.'HO`8UEY]<Rg#[OOp9e]o3[E.Ic.%@GZT7!hO[sd&Z5:**!\?iAlrH.epc_M/Bl(QT1+u7.\d0:=!a/VZn4uZ[\D98^=<c2YK;@Pp[*d1qdb;Zi+a#X&q4/_\f,2]EV=g3.LG(]%l?bGuW`Tmt?b/?Hbds%=9-V7PD^q1tLoQNWaY)JWf,AF2O``P25/]nh51.c=-TVJip0%SJ/]ZG?o3d"/4e5ab.%Wu,*7I.<6g9(PD*\K;9Q_bCNgEP@/!\36QE':ElR#RoLn@]sS:;Y^70:gOF4i7;345XTr,Mk[om77u;kdZMs5ERRgr8K2W8>L2>BNJ?:$<tZ$LO%`3Or"[amY]:,.(pCM@sud1bC]]H/$rESSlIN\\f@g1j"M[/K_d0Fn7IcbP]\H"W0J6+Sro[Jg;k\\KGCk?/3d2;ZNLTUF21\K@m)rC*PuEhd0SW:;5PoQq`o%5U]c,Tklj.cTii..975*&Zp;6OXK62;lH6q=TE:5?nc7EI04\XsC:=b+a9j2IQXN]:#oF=8=`*Y*-&FtB3eGg+,*X,YE5T#%]<`!K#P!n`HgF:PM6b:0gNs_mq*i,@"OQGV`CFd0g[PkU5[=k,HcZ&jM@:$RR++[[<@>5jg#dYi5c&a<%j_F:`[F>DaTuJ:P=670ALZ21a=9OWjL'R(A$o*\alu:9*K!FP5U?aO"XZ,S'`.r1B3r<EV,H4#dt0M@+HarB#S^QR@O=>-(W/t4nJoZHiDMr[0jo$oN,f<**.`'9k1\`Rdj_1&.jE_NAV\='o/)gCB;>Lu$8N+R1gL9oXF028Lj*:A\E1RJ1B5')OU(=ua28`G*eWNi%qT6u&*6gQbOfRKR)Kr(#>__?hFYNZ\7-.IA?DWT)""BTaAa!@_f;cO6^0(L1c0bKS4q><4kX(JPXtH7N[ki,\8P6\7TD(e87j>Q"kRr?*)E(^m6m'fSHr68ClfL)KBs;5W%F[>%g+gc>O2P9#-4$anGL1F-IQ[@r&dMMLg-=Rc"VR-Q8,#kbF^hANLc"UNrcu/dbY)_<bX%OVHT)OVi>=I]*$JT.F$'<!HI0;_D-VU1'PCJ4[_t9*D,%]I["PPT,I7?%X]U]4g>eb:9t.13bYp$=b=>6j*H77`[U(J^r5it^Z8d[W,%Oc3hUkV$0_p%[Q<$1W8E1_;EPB_')8("BQ`lg4CgoUlH+aj>X^a]DZkj:IO`\nB_BG;mmd>nd=-e=].f9_g&S2qc!=f4&a:fG:aujWGK-N=6p5PD2Y%jnL:,9"fIK-Xh.+*$:*u1X5t2gd$*>B#NmRdBSOo>qQbQn?YsE%Ul@47GAiuI,*]>'ua5?#X&36blIO,O>U09bjLNUBR60:LGVEO0udLT<kX,ss@]n9*-1qHInD;L9b)BC-0?8qN_NLi[Oe0hJ$j^X,52)*:NHY/rdDleJtb4&)P7J`uNmCZR4%]kX#XA'2+9b6KXh6.bY4o#ollp0V~>endstream
|
||||
endobj
|
||||
% 'R24': class PDFOutlines
|
||||
24 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 25
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000269 00000 n
|
||||
0000000434 00000 n
|
||||
0000000621 00000 n
|
||||
0000000902 00000 n
|
||||
0000001063 00000 n
|
||||
0000001234 00000 n
|
||||
0000001408 00000 n
|
||||
0000001689 00000 n
|
||||
0000001864 00000 n
|
||||
0000002144 00000 n
|
||||
0000002424 00000 n
|
||||
0000002747 00000 n
|
||||
0000006424 00000 n
|
||||
0000006771 00000 n
|
||||
0000006909 00000 n
|
||||
0000007180 00000 n
|
||||
0000007331 00000 n
|
||||
0000007644 00000 n
|
||||
0000009168 00000 n
|
||||
0000010826 00000 n
|
||||
0000012603 00000 n
|
||||
0000013207 00000 n
|
||||
0000015343 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\\\235j\236!`\255\002\350\332z\003\317\346\3325) (\\\235j\236!`\255\002\350\332z\003\317\346\3325)]
|
||||
|
||||
/Info 16 0 R
|
||||
/Root 15 0 R
|
||||
/Size 25 >>
|
||||
startxref
|
||||
15395
|
||||
%%EOF
|
||||
118
z3c/rml/tests/expected/rml-examples-003-frames.pdf
Normal file
118
z3c/rml/tests/expected/rml-examples-003-frames.pdf
Normal file
@@ -0,0 +1,118 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 4 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Helvetica-BoldOblique
|
||||
<< /BaseFont /Helvetica-BoldOblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
4 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
5 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 9 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 8 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R6': class PDFCatalog
|
||||
6 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 10 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 8 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R7': class PDFInfo
|
||||
7 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R8': class PDFPages
|
||||
8 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 5 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R9': class PDFStream
|
||||
9 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 875 >>
|
||||
stream
|
||||
Gb"/&@?6jB&H-M+J!aKUfI!H]Z6Fa7>*C;bUt=W;:qJ3ZJqZ)5J)=fL7"jBiV&)kMEL/I;oA85ip$G)]Q9Re9SSnMbqs\JmJ5G_O5a]O+ItWm^E:@X&:b`<qb@6]<D@r'5El=ZSB2+d!So'+pJ^N)qO7^VN)>H</n@T,4LU[)7=3bUNIt7Pg5s,S]&POT,C0MaCkUniTUh>d.GZOG?L!6!IWC8s!=9WLU8=!mTjKG%%a:qQ7;sYpG,C^H*+J2(8CcINFLo3;!4%<&+m@;<"U8YBk'i`pqa[*u_V]]G>\brZ="Di6s&T62_f9$h(7c2+*]+,;^8+PW=g4E*%Jor!LI)Y85$_4LjiJA;)LPYsGZOH:'7'M>mSB1&BS0WJ7ed#>ZejtrX0+tPp_FXWtME!Uq$GLMbk<,au`G)$u13JV^0k*[PQFDl2Zq`f]_F9t/,I=$l>)LP1AFl8]/l4$u]>ub#Pbft#F=8NM=LOeYB6g%YT1D$U9%dcef-W?`(>nE3)/L)'^)guccF+=.D'uB?^p,8T]d!scR+\+r;lt0_l0cRk=2nU+ofnj/7I>T0O0s=tU@u>&V(?K2UdJkcLmQY.@]RQ(]\fe/j(kbF[CP9YI62L%j(7U8oLOngBbrXPIs-ODVG"WZZ*R7;IU@TR\@AP""@72)qM*:@bhP0m]3T:1_:e`9iVL`QK/3WD:0HAH997P4$<ZC:;eX59goF%:Dld7@V43P^Vc)/UNJ<&pUE"E`oscC=XOm=I3F>(il[[qr3+hi-1bd-bp3o.%bH&G.7Ehe/RfGfmnO:)`ZoaeOG.7jUXDLh2Kk^%.Q^2LL]1?W,9n[PGJ[NDF#2Gp22`5!.E/gF:_K=R0QhCHt_&p0ACBX~>endstream
|
||||
endobj
|
||||
% 'R10': class PDFOutlines
|
||||
10 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 11
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000233 00000 n
|
||||
0000000398 00000 n
|
||||
0000000587 00000 n
|
||||
0000000760 00000 n
|
||||
0000001037 00000 n
|
||||
0000001172 00000 n
|
||||
0000001441 00000 n
|
||||
0000001546 00000 n
|
||||
0000002564 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\2514PW\375b\346M\037u\307 \354\014_\254) (\2514PW\375b\346M\037u\307 \354\014_\254)]
|
||||
|
||||
/Info 7 0 R
|
||||
/Root 6 0 R
|
||||
/Size 11 >>
|
||||
startxref
|
||||
2616
|
||||
%%EOF
|
||||
149
z3c/rml/tests/expected/rml-examples-004-fpt-templates.pdf
Normal file
149
z3c/rml/tests/expected/rml-examples-004-fpt-templates.pdf
Normal file
@@ -0,0 +1,149 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 4 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Helvetica-BoldOblique
|
||||
<< /BaseFont /Helvetica-BoldOblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
4 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
5 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 10 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 9 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'Page2': class PDFPage
|
||||
6 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 11 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 9 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R7': class PDFCatalog
|
||||
7 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 12 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 9 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R8': class PDFInfo
|
||||
8 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R9': class PDFPages
|
||||
9 0 obj
|
||||
% page tree
|
||||
<< /Count 2
|
||||
/Kids [ 5 0 R
|
||||
6 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R10': class PDFStream
|
||||
10 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 774 >>
|
||||
stream
|
||||
GauHG9lo#B'YH6>J(UG2dV2rZ[__%U:6JAMBg*FWEtLlL\$e^W;3HE9l!Zpb):GlZ#D6me^"q6(M8?YC7_`XDHqa&/S:PZ*;m=UVO^-fql#qN!4+qUXfO::qK,1cnCO#Usp-rJLf_:Mmk^WJU_66Y\O[s>.]?#uMn`o41G_G->P.*#sisl9R3t+7N$od2k08qlF;+01KbmCO;Hof0qjk1,P@$_GQ8qu,Z>=ouDjKm6aXmbq!HP+ZP$O8D\?pm?J1%@uI;dmc''h6ERr':n*>:jhf3OL]P+rL.d8kT55!hP5$n%bp4j`B=I%4KkXP3!VURZ!T@FiTm#U9m]lbhVPuY3bN,jGg$2Lbp",BH!5<Sr:`T/f!Vdh"?ZEFJ]hm"Cha<29tWM4FB%X1R\6H*=>tBQqS>JFC*4J6d*$=KorM3^6.NiY^^=;<GgKn^(?,LZm,Hc,*PUjZo"-?hBYg.%n=d)Wk+Lq.3>SL,'RnW7V(Uc<"hrG$]>7A9.Y.J&SKRPerBE5[f5=cgtp#s-+_6=PA;+%qPR5hFZqap%8KVH]+^8I*B:'*j\N->6"f2DKRaH9ONdnbJW,jKWcVM6NLH;I;X0S4;;1d,SY[4e(6G7M:0!u'[@EmnP[djka*J;,A[QP[BG8k;.V2LO/=KX=<L8<=YH$B\]GMD'rP9Vrboj<)"u3%SJo_IgTKN8rp7SFKHgta[f.m4;b:>\7HnBY@Q*#Y?EHieW?\bm%4aa%W^00VB<OVDA#TZ+Vs#<3S-QLsfDd[g$`W~>endstream
|
||||
endobj
|
||||
% 'R11': class PDFStream
|
||||
11 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 937 >>
|
||||
stream
|
||||
Gb"/$9lJ`N&A9=Y+.h\M<fLmuNGW]OQ)(FK2G%DXQWt<4?oQ_2m3QKGI<X:M"GecIl7(^[L7*>Uc'u,]Jgk&mrXKV";h,Ap(+b&F#0S_@"ID(YqRtebSrOCb^5<NGE3#?7=="GsI:MX=n4aQ^K&Mc/QfS#0!WgIJDHF)N3%9<hES_o7L#?5?Ts/B8@6:n`G$nOm2&t5!2]?Ds''9n[+$ZABpj'7NBZh/2h2+W1^Oe:NGg=s+SKOCd=$Q7$K9)-XedQ(0nYY2:i=Y`0Q4)H5mPr9)DRDP@L()h.WBt$f"/ZQE0ZfBV-re[6<"a%bk:h_O*:ge=F%2s,Z]$6Tg<aiGa[jGNIR]Y<N7&HcBT\$H-nk0<:$(I]fBbNcL-ilMLp%Rm9Gi"X#oT`OOLqt+^'KB($h%XQ8'Vr>6j6V:SB_jM?'2H>c)<`)JgJTo]ZBWa1Keno<J/XecF",cZrU0.MMP]&1\%%7&OD7-J=pt:4NghT(/IZPEY0f==]0?.dj_0!r0on7^Cr`L,#VKb9o2cK1\Q,ieieNFoLL)'_V`B%C+L3nYrp7iV20C(51:EGU&"?*VmD;lBUd0G7.d18X/7_5B/>jY<"u5u[TV6>iBm$%+]f0'AYf]Z2U]\@TU<Z=9Gq'spJ7!lMOfEJ_,hMDehu\ARBR)%1'!m7#DQ@28Omin0LUjp=]Qojl&96]eZBS>C3k6OoUHD8N9q;af\1=qj'pfD.7aVr,9R267;K;"QLo3AhA/^ns)us7Pe-Jj9l2;<hQCZbf"@&\1Yrfe`$\R:Q%s[mA$4XYDY'eAjWK>eDh8\3l)Bl]B;q+u7pdg:$gqUClg&Tecc`0UrH5prBu-$gqJM)#LQFliN88?m6lBL:NsNAP,C:M-?2T;WG+;j=VQ99"7Y`\sP?2N;7q4^#YI4bFiiEl<lZ)f0UYkqVaQ35`~>endstream
|
||||
endobj
|
||||
% 'R12': class PDFOutlines
|
||||
12 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 13
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000233 00000 n
|
||||
0000000398 00000 n
|
||||
0000000587 00000 n
|
||||
0000000760 00000 n
|
||||
0000001038 00000 n
|
||||
0000001316 00000 n
|
||||
0000001451 00000 n
|
||||
0000001720 00000 n
|
||||
0000001834 00000 n
|
||||
0000002750 00000 n
|
||||
0000003831 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\2514PW\375b\346M\037u\307 \354\014_\254) (\2514PW\375b\346M\037u\307 \354\014_\254)]
|
||||
|
||||
/Info 8 0 R
|
||||
/Root 7 0 R
|
||||
/Size 13 >>
|
||||
startxref
|
||||
3883
|
||||
%%EOF
|
||||
149
z3c/rml/tests/expected/rml-examples-004-templates.pdf
Normal file
149
z3c/rml/tests/expected/rml-examples-004-templates.pdf
Normal file
@@ -0,0 +1,149 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 4 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Helvetica-BoldOblique
|
||||
<< /BaseFont /Helvetica-BoldOblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
4 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
5 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 10 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 9 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'Page2': class PDFPage
|
||||
6 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 11 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 9 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R7': class PDFCatalog
|
||||
7 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 12 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 9 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R8': class PDFInfo
|
||||
8 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R9': class PDFPages
|
||||
9 0 obj
|
||||
% page tree
|
||||
<< /Count 2
|
||||
/Kids [ 5 0 R
|
||||
6 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R10': class PDFStream
|
||||
10 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 774 >>
|
||||
stream
|
||||
GauHG9lo#B'YH6>J(UG2dV2rZ[__%U:6JAMBg*FWEtLlL\$e^W;3HE9l!Zpb):GlZ#D6me^"q6(M8?YC7_`XDHqa&/S:PZ*;m=UVO^-fql#qN!4+qUXfO::qK,1cnCO#Usp-rJLf_:Mmk^WJU_66Y\O[s>.]?#uMn`o41G_G->P.*#sisl9R3t+7N$od2k08qlF;+01KbmCO;Hof0qjk1,P@$_GQ8qu,Z>=ouDjKm6aXmbq!HP+ZP$O8D\?pm?J1%@uI;dmc''h6ERr':n*>:jhf3OL]P+rL.d8kT55!hP5$n%bp4j`B=I%4KkXP3!VURZ!T@FiTm#U9m]lbhVPuY3bN,jGg$2Lbp",BH!5<Sr:`T/f!Vdh"?ZEFJ]hm"Cha<29tWM4FB%X1R\6H*=>tBQqS>JFC*4J6d*$=KorM3^6.NiY^^=;<GgKn^(?,LZm,Hc,*PUjZo"-?hBYg.%n=d)Wk+Lq.3>SL,'RnW7V(Uc<"hrG$]>7A9.Y.J&SKRPerBE5[f5=cgtp#s-+_6=PA;+%qPR5hFZqap%8KVH]+^8I*B:'*j\N->6"f2DKRaH9ONdnbJW,jKWcVM6NLH;I;X0S4;;1d,SY[4e(6G7M:0!u'[@EmnP[djka*J;,A[QP[BG8k;.V2LO/=KX=<L8<=YH$B\]GMD'rP9Vrboj<)"u3%SJo_IgTKN8rp7SFKHgta[f.m4;b:>\7HnBY@Q*#Y?EHieW?\bm%4aa%W^00VB<OVDA#TZ+Vs#<3S-QLsfDd[g$`W~>endstream
|
||||
endobj
|
||||
% 'R11': class PDFStream
|
||||
11 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 937 >>
|
||||
stream
|
||||
Gb"/$9lJ`N&A9=Y+.h\M<fLmuNGW]OQ)(FK2G%DXQWt<4?oQ_2m3QKGI<X:M"GecIl7(^[L7*>Uc'u,]Jgk&mrXKV";h,Ap(+b&F#0S_@"ID(YqRtebSrOCb^5<NGE3#?7=="GsI:MX=n4aQ^K&Mc/QfS#0!WgIJDHF)N3%9<hES_o7L#?5?Ts/B8@6:n`G$nOm2&t5!2]?Ds''9n[+$ZABpj'7NBZh/2h2+W1^Oe:NGg=s+SKOCd=$Q7$K9)-XedQ(0nYY2:i=Y`0Q4)H5mPr9)DRDP@L()h.WBt$f"/ZQE0ZfBV-re[6<"a%bk:h_O*:ge=F%2s,Z]$6Tg<aiGa[jGNIR]Y<N7&HcBT\$H-nk0<:$(I]fBbNcL-ilMLp%Rm9Gi"X#oT`OOLqt+^'KB($h%XQ8'Vr>6j6V:SB_jM?'2H>c)<`)JgJTo]ZBWa1Keno<J/XecF",cZrU0.MMP]&1\%%7&OD7-J=pt:4NghT(/IZPEY0f==]0?.dj_0!r0on7^Cr`L,#VKb9o2cK1\Q,ieieNFoLL)'_V`B%C+L3nYrp7iV20C(51:EGU&"?*VmD;lBUd0G7.d18X/7_5B/>jY<"u5u[TV6>iBm$%+]f0'AYf]Z2U]\@TU<Z=9Gq'spJ7!lMOfEJ_,hMDehu\ARBR)%1'!m7#DQ@28Omin0LUjp=]Qojl&96]eZBS>C3k6OoUHD8N9q;af\1=qj'pfD.7aVr,9R267;K;"QLo3AhA/^ns)us7Pe-Jj9l2;<hQCZbf"@&\1Yrfe`$\R:Q%s[mA$4XYDY'eAjWK>eDh8\3l)Bl]B;q+u7pdg:$gqUClg&Tecc`0UrH5prBu-$gqJM)#LQFliN88?m6lBL:NsNAP,C:M-?2T;WG+;j=VQ99"7Y`\sP?2N;7q4^#YI4bFiiEl<lZ)f0UYkqVaQ35`~>endstream
|
||||
endobj
|
||||
% 'R12': class PDFOutlines
|
||||
12 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 13
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000233 00000 n
|
||||
0000000398 00000 n
|
||||
0000000587 00000 n
|
||||
0000000760 00000 n
|
||||
0000001038 00000 n
|
||||
0000001316 00000 n
|
||||
0000001451 00000 n
|
||||
0000001720 00000 n
|
||||
0000001834 00000 n
|
||||
0000002750 00000 n
|
||||
0000003831 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\2514PW\375b\346M\037u\307 \354\014_\254) (\2514PW\375b\346M\037u\307 \354\014_\254)]
|
||||
|
||||
/Info 8 0 R
|
||||
/Root 7 0 R
|
||||
/Size 13 >>
|
||||
startxref
|
||||
3883
|
||||
%%EOF
|
||||
BIN
z3c/rml/tests/expected/rml-examples-005-fonts.pdf
Normal file
BIN
z3c/rml/tests/expected/rml-examples-005-fonts.pdf
Normal file
Binary file not shown.
118
z3c/rml/tests/expected/rml-examples-006-barcodes.pdf
Normal file
118
z3c/rml/tests/expected/rml-examples-006-barcodes.pdf
Normal file
@@ -0,0 +1,118 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 4 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Times-Roman
|
||||
<< /BaseFont /Times-Roman
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
4 0 obj
|
||||
% Font Helvetica-Oblique
|
||||
<< /BaseFont /Helvetica-Oblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
5 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 9 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 8 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R6': class PDFCatalog
|
||||
6 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 10 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 8 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R7': class PDFInfo
|
||||
7 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20130304200123+00'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R8': class PDFPages
|
||||
8 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 5 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R9': class PDFStream
|
||||
9 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 1716 >>
|
||||
stream
|
||||
Gb!TYcYm#H%*.f;niu?jot]c=-!a_3",[,s<b"9$4#i(d3f'?OFqOA]+8)4sS^\O/n;A;jfJ!^uP9MH4qG<>2<aK\=]Nc?GAnK?6ST3N14rG.cRb9@Vh<acED6e*KQlO(Y\7X`02@K-8o]2Xn'A)oa5Gd>dj_B$JLBj=7dh>UGp8s2Ne_$$*>4Sed=+AFQbI]E3o4G_I]Xq?`c$X<02Y6h-qV'a']d<:9ApM'pcYlO)/0F36ApNoX\%"10?d7r<q(U^-k?If)b\kYkojIQ5_ttAd6dhFu<Z6/L\HZ5^63q:?ik\Q#-q'(X"FPIbk?mfYC2!S4gcoPVl$)9=ZLR[]%si%n@*QrGMB4mdk5?MTm%O5&I[Vf3CMe"hVX%=ps/VGfRW64N=AJsb`9b>"Z0d0_OqD77V:]?D]mbMd;_60mEi!I1$^J[,jt"s^Lc\,X+nD4@A]0'7W;$X48<f8BHsksl+U_iW!($7CCajnI(s^JNoUZE@NBWKN5UUfRJ97O3'E]Od-okrP"A@B,%ZW$iN?JjCh'd&8oKY;C9Z\LLR8Ukq==IVu)'pXs-:CWIlc:K9;h9l?,pd.k?:Y*U5p_H5a(3;#h3bjVbWo3'JJ'3uOZ4QUM6_n+OYC]I:c_-I,b]4nQ7CIHlm7\g0QJ:H?"-B](uTB\LWi1>jKW%8[KDQ<K'XmI6sfFm7H>[>BF&18V&>YX=jj!6j9nD7<=+fu&]?5\4Mpp5PK1b=832-E+s+M6WEWp<e<8Wa#Tc3)I!DY@S:,[kEYcIRB_b0#S=PqQ;H#TfEDTkFePqA;@X!KeWXi&@nO+-C=.n4A8dO/S:Cs?-l>*uVHDrY,&3MBS@RQY$2B?iVH]>ZP#S:66YoSth;p/fOnghgG"/ZmWaKQDZYDDM]j9Q,#;BnHPj.'%0?_t17S/2`+ArV=["frLO:<8rl73&&[3_gSV_FC3k*69?%Q`t0Kr/'LH#*6R0C[?hL@h:tQde`.B03'OP.:D]lpa)X!rDP$;R?,PIB<tn1G0BROp,NOTZ>e<\o+-b1:<'8PJJ9"`%W!H../ZsSXM]WRCmZUb#RZk0LU7C$3=dRsC#;mjT_=!TFVKPo`dIoj#pDou7=l)<>R*'e&!]II_C0(54>[mbkQ_uC(mGpJglE)t:1Pi&]0L(^E)qmkVc:?%Ic;oT#:]@V8Tctf/@Y`"J8O1tf/b(j'Ti./OZ5Wmi4M:?;[/q4h*D]h+s43'\J<7`;NQ%86M!eDa'3("#Q_I==V1Hb\QV;2\cIee;@-!TeP?@!E\,ekO*%`pW4_"W4n@Q7Q5$d\ZeH^(4?F'DM"Q9@fq_*!Y:et,\"DiQh>-HorVYYunIQHXJm`Qb]HM[C(b!o=ml)%h6@nO5k.G:jX.M=#`<533*prT%Fc4<6;]_ce10n863DcUe&tQOr):>Xl..)50;GSuM%B3Fm8f(*T8$.1+2[?]7d-]F6AH7,1Z_ph+:WNH,+7aLm9IVXiSY8=l77b:-ih6]VV?3'+%[#*9fNg"7qdh=T]MpR>6W7,;R#L^4<%o)-+VU"HU[T<YLjSNaG!>_1'*Q]*R4n^DOP4?[_PEGMP`ZG`8VIK7!VTV6CHL)!>/X*:0'C[SR*p\)Yq22hcXLW"g80W5jcRd#qE4?-#d`EtO./_g8@%t7&kYBiV@37krO1P,+&R%XZ[MbPIIP#M5G$6\I2]<_XJW2M1]Mq`5.YW,:]:LtiZZ_~>endstream
|
||||
endobj
|
||||
% 'R10': class PDFOutlines
|
||||
10 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 11
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000233 00000 n
|
||||
0000000398 00000 n
|
||||
0000000567 00000 n
|
||||
0000000746 00000 n
|
||||
0000001023 00000 n
|
||||
0000001158 00000 n
|
||||
0000001427 00000 n
|
||||
0000001532 00000 n
|
||||
0000003392 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\275\375"\226\004\012\247\311\024I9\2513L\031\365) (\275\375"\226\004\012\247\311\024I9\2513L\031\365)]
|
||||
|
||||
/Info 7 0 R
|
||||
/Root 6 0 R
|
||||
/Size 11 >>
|
||||
startxref
|
||||
3444
|
||||
%%EOF
|
||||
549
z3c/rml/tests/expected/rml-examples-008-tables.pdf
Normal file
549
z3c/rml/tests/expected/rml-examples-008-tables.pdf
Normal file
@@ -0,0 +1,549 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 8 0 R
|
||||
/F4 10 0 R
|
||||
/F5 11 0 R
|
||||
/F6 16 0 R
|
||||
/F7 20 0 R
|
||||
/F8 21 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Helvetica-Oblique
|
||||
<< /BaseFont /Helvetica-Oblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Annot.NUMBER1': class PDFDictionary
|
||||
4 0 obj
|
||||
<< /A << /S /URI
|
||||
/Type /Action
|
||||
/URI (mailto:robin@reportlab.com) >>
|
||||
/Border [ 0
|
||||
0
|
||||
0 ]
|
||||
/Rect [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Subtype /Link
|
||||
/Type /Annot >>
|
||||
endobj
|
||||
% 'Annot.NUMBER2': class LinkAnnotation
|
||||
5 0 obj
|
||||
<< /Border [ 0
|
||||
0
|
||||
0 ]
|
||||
/Contents ()
|
||||
/Dest [ 25 0 R
|
||||
/XYZ
|
||||
72
|
||||
695.68
|
||||
0 ]
|
||||
/Rect [ 155.9877
|
||||
643.68
|
||||
297.72
|
||||
661.68 ]
|
||||
/Subtype /Link
|
||||
/Type /Annot >>
|
||||
endobj
|
||||
% 'Annot.NUMBER3': class PDFDictionary
|
||||
6 0 obj
|
||||
<< /A << /S /URI
|
||||
/Type /Action
|
||||
/URI (http://www.reportlab.com/) >>
|
||||
/Border [ 0
|
||||
0
|
||||
0 ]
|
||||
/Rect [ 297.72
|
||||
643.68
|
||||
439.4523
|
||||
661.68 ]
|
||||
/Subtype /Link
|
||||
/Type /Annot >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
7 0 obj
|
||||
% Page dictionary
|
||||
<< /Annots [ 4 0 R
|
||||
5 0 R
|
||||
6 0 R ]
|
||||
/Contents 29 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 28 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
8 0 obj
|
||||
% Font Times-Bold
|
||||
<< /BaseFont /Times-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page2': class PDFPage
|
||||
9 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 30 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 28 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'F4': class PDFType1Font
|
||||
10 0 obj
|
||||
% Font Courier-Bold
|
||||
<< /BaseFont /Courier-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F4
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F5': class PDFType1Font
|
||||
11 0 obj
|
||||
% Font Courier
|
||||
<< /BaseFont /Courier
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F5
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Annot.NUMBER4': class LinkAnnotation
|
||||
12 0 obj
|
||||
<< /Border [ 0
|
||||
0
|
||||
0 ]
|
||||
/Contents ()
|
||||
/Dest [ 25 0 R
|
||||
/XYZ
|
||||
72
|
||||
695.68
|
||||
0 ]
|
||||
/Rect [ 155.9877
|
||||
607.68
|
||||
297.72
|
||||
625.68 ]
|
||||
/Subtype /Link
|
||||
/Type /Annot >>
|
||||
endobj
|
||||
% 'Annot.NUMBER5': class PDFDictionary
|
||||
13 0 obj
|
||||
<< /A << /S /URI
|
||||
/Type /Action
|
||||
/URI (http://www.reportlab.com/) >>
|
||||
/Border [ 0
|
||||
0
|
||||
0 ]
|
||||
/Rect [ 297.72
|
||||
607.68
|
||||
439.4523
|
||||
625.68 ]
|
||||
/Subtype /Link
|
||||
/Type /Annot >>
|
||||
endobj
|
||||
% 'Page3': class PDFPage
|
||||
14 0 obj
|
||||
% Page dictionary
|
||||
<< /Annots [ 12 0 R
|
||||
13 0 R ]
|
||||
/Contents 31 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 28 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'Page4': class PDFPage
|
||||
15 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 32 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 28 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'F6': class PDFType1Font
|
||||
16 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F6
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Annot.NUMBER6': class LinkAnnotation
|
||||
17 0 obj
|
||||
<< /Border [ 0
|
||||
0
|
||||
0 ]
|
||||
/Contents ()
|
||||
/Dest [ 25 0 R
|
||||
/XYZ
|
||||
72
|
||||
695.68
|
||||
0 ]
|
||||
/Rect [ 155.9877
|
||||
679.68
|
||||
297.72
|
||||
697.68 ]
|
||||
/Subtype /Link
|
||||
/Type /Annot >>
|
||||
endobj
|
||||
% 'Annot.NUMBER7': class PDFDictionary
|
||||
18 0 obj
|
||||
<< /A << /S /URI
|
||||
/Type /Action
|
||||
/URI (http://www.reportlab.com/) >>
|
||||
/Border [ 0
|
||||
0
|
||||
0 ]
|
||||
/Rect [ 297.72
|
||||
679.68
|
||||
439.4523
|
||||
697.68 ]
|
||||
/Subtype /Link
|
||||
/Type /Annot >>
|
||||
endobj
|
||||
% 'Page5': class PDFPage
|
||||
19 0 obj
|
||||
% Page dictionary
|
||||
<< /Annots [ 17 0 R
|
||||
18 0 R ]
|
||||
/Contents 33 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 28 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'F7': class PDFType1Font
|
||||
20 0 obj
|
||||
% Font Helvetica-BoldOblique
|
||||
<< /BaseFont /Helvetica-BoldOblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F7
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F8': class PDFType1Font
|
||||
21 0 obj
|
||||
% Font Times-Roman
|
||||
<< /BaseFont /Times-Roman
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F8
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page6': class PDFPage
|
||||
22 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 34 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 28 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'Page7': class PDFPage
|
||||
23 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 35 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 28 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'Page8': class PDFPage
|
||||
24 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 36 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 28 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'Page9': class PDFPage
|
||||
25 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 37 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 28 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R26': class PDFCatalog
|
||||
26 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 38 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 28 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R27': class PDFInfo
|
||||
27 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20130304200123+00'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R28': class PDFPages
|
||||
28 0 obj
|
||||
% page tree
|
||||
<< /Count 9
|
||||
/Kids [ 7 0 R
|
||||
9 0 R
|
||||
14 0 R
|
||||
15 0 R
|
||||
19 0 R
|
||||
22 0 R
|
||||
23 0 R
|
||||
24 0 R
|
||||
25 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R29': class PDFStream
|
||||
29 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 2127 >>
|
||||
stream
|
||||
GauHLgQ(#X%"2Jjs++8pfM.GURYu(N99U]:;\T7q)TYQXA:&,CX,B'&fC@ab1Qk3D9.SOeK5B,>i=X0T3TM%kYjig_^K1`WlNOqK7t=E<Ck-J__r=I:]=>RI_5$:N42g+ugq^7$+/FG%Y-7i=^*8g`"_(/^<f%UE=s1<+=/_Q)CXe&,;OXo!.B3g4/Tq1`&k4U/la7FP%f%_=`+rH^#[nH<X8?iR$W)p/K/cKl@<oZ'@<mHi'O_TM>=@o>__t-G(_o.1-rB5%`3BKLde-O@I"fNq\GMLBU\$I"YLsPGW'IJEXXlme\_)Zm/;,c'!6so**7?MQ(;);cU3='OR2qp;;8==kH8QF-+X(Zi&n)j?;PAM?T"nZEHQe;<jD_Gh@WS=6E3g<?mJqHnV)MHR\dJI-rR2.]*RoZ.b)#([Ja[mBEg$h3QKQVFX3\Sh4^[@t7D.pfopNd)m_T@+F1QXo?6E8-*W^DhqskcpA5i<[9"GB?;b=b$J0AatXb@qRZTL][%=P8i4b@g-3?"\,$*V>5?H>tp/JW`F>O<W>.H;Mj6LI7OrpmGp>!%hR4-WFho3aSFAbqTi%fRZk5*JDT0!/->4IY$=foQ(klE.]p$R*tQ/l)M6k;$;u_`ljN#?S\?q["dWIeS(L>,)RBfD\U]^=E>[oUC.hRc6l,o"_/*FbNcs>6;FKDRY]Zb_RV6[jCf[,buY.7RB'`\#XV>LKZ)(;9f]C>aLD>>a.7"1Yk5$+).?E[pqJVS>tlpG66*,Sg=GKQu91tjSLX=i'UPDXq__`F_t]set#@^dT0rbr"Fu3_55q/1Mfq@_2aqr=+*u[G(VcUV%YcE)m/.5Lc04p%])Jq3USZp6Mp<nU&nOTl9JF3-q-5PSUsME<F2M2Xh/+m44OBQT+)%RG:Z(;irR3=#98)a_XuOs3GV\J%9Q6@[@$Df4Na*tW(lM)Ca,8`^rkJ!24BD=Y@\&8Q/]6/E[KBt$02D%YpgfSUTFkr+hlp:3u"'I.`j3'((qp)^s22c0J*JU8BZ&o#*qu'&.mifqc$k[bt'?qgpJi-NZnYNFg1oo.[1FP`)^!/Jl:P6YoYgNK5"Y9SJ]I^].4ds(*=/?hTlZ-5u#fC.QOmNP`a?J`jclep:DT_(TIo(/A#iu&8<2b_fEgUNG&Vj-I=dTVc`"A+kf-EA+KEEArc-d(d,PA,-@W=H`:ngQ;9Xh=j[1J*OkH#Nc/o,S@U/?S#MVEJm0js;o=6udbQ+hA2emg`P_h9ptQ<$YUu=JbgXQ'C2=M[DGc9rUk=+ZJu5u;FN3KLoWMb<7(E?k]BD1`b)PF6;6L.6T&Uj`UuNKfUuNKf[,X]dR@ZCE*:KOJ*UfXK*UfZ!*I$Xkm*'P$RHL>$i7o$]+bZ*i1;T/c=)G0Jld,\X5,/L6HjfbK<ZGX]'t7"Oc(H&c.[_'pX;M`FX8K>$B!"B;h9%DBd.`HCGdolN7%&foMW-c%LC5Pf;>i2+1*!D:OF$:&4<l4@i,`]4KFDV`J.6^=H-@`&%Bul0HHQ@Diq(%NiEOB#X[?'D'<`Q?B2Zr_,Q/4e;VgEW0o].N?0lUaKb"7B(+ERkOjGpYLTQa&`-u1p1]'c>52K)b%*':rhD[A[k3Aga^ai3NX`,2^9?g!oj4!(#RJCAE4G5d3okeLXPZgTrq'B:np?$<_k$Q1E9sB@3,BUGiJPL7*7VPHFV`?!l(imUr%g9=HC^p;>c:F%*##9[bep3e5S$'K9<3`GdZ^\SQ!ZHq%/S`qB65?AUW?GM=$(E%LbARWB=H4PYkMP.'kod55/"ed@jb(PWpUc9\CtRXq"s;V*r=1a8!Td#.+G9QY@09.7([YVa#4jJ'a1njps0mEDHr)Tan9r&%J/?F<dPd6mb'=dd`psC6=)mRg*V:3%,HaB'*dS#6-$,Gqm<Ak!l$*Frl$*Frm<J<ck+p08DUR2F2sFq.qp/7!KQLfWB*Rl=Wc,4aXsM<n12@omB#NkkY(pp=+4]Xr6fJQtX>O@<\q\-^/_BBQq!(N"`g/hTn,"/9cYu$pefNERB.+"_#mna)N-Q7/&LXO!EoU98Fp=P#LI(Et[=/_m20ZhF]l-#F2GQ+_nBUZ,pV'gY?48uE$TY50Lqf+gDn%5giVMg]gT`o=~>endstream
|
||||
endobj
|
||||
% 'R30': class PDFStream
|
||||
30 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 1251 >>
|
||||
stream
|
||||
GasaogQ(#X%"1(mIphkGVm$olAYBn_8a@M<2VHn'kt>>p-/+eu1ui=?lhKql)9K1t=Oi*YYXBNR%XCT*!2!SKq^uW62f!ZG$6TU_]n%="@T_O'+7&/Z65J:!S-3.<6^hXo\qC:Hdrb0,F;"4cXAbQl;c-=<G>E)?1-+(05\.^HT+P)jLi9j=I%,`V?Hj6tl\]K)Q.j]rWY'E397r3.-)%-l>M*o:AAOZ6_]Aqq&)J6RYuXblL)JKK.\n!eYK;P+^6LQJ"&,"6@Jpql5JaF=L#G+E+Lncjr^LqX$<iE80G(6,kV(50AkFJ9:sH0s)D#6;pO33V9Z%rUK<S44A!FK7L-Hjr.)aHI94U@/-uXc%P=?)D7R>;5@@&;s%*HT,m%l"CRlML[/t%8B8u+6T"5E3"'gVb3Lkq3V#2-89;'E@d\-.2tk2?#cDbbZp*aB'%a)X`"enkM9KN_N!"m&%URMTrCf?N(t,H26[XWOcM;!A`Rl@R;be&bl7>$2\;?/_]Fm?H1lH85`*$tr!r/fn]%[^bZtA\j=oK\qao+-aV0W-c^$C[fD598-5rONLBkUg`&H#+f=GMi(8:O?=L)H&ti?IAE$aP&IlkH"cK1$]hT`"'MRN<[t+JLbgo9>FAZ/P*6&bfQ0t#Urp]4L6UpCn(EQ.HVXTDo_`M.+jEq*6kJO6a&2_O:gU8uIO)K:Ymb::PGMTKqb-KO1HS+5\#S+1X*T#m24d50";dqlQ`"gai*P$8Q0*qtBc`lm-Zkk?oSS,G-2fbI/W_O.Q3/J$LJ^00dVK>RVd:44!PDu-i_#%qJb-Dq0amcdfq?h#X7eC0:SYrEh7(dYj>*;'^2H6r,h/`p`q>A6"+8+G(BVVoZG6i8bL"/^JZg-'GG`:S_.Y0@igao6Qik!4\f(rLHT//hoRJn@%@M?"GYcL_#V8YBFhDS@%NBI+M]QG9A>AnO],%g1!-Sa2ng%Ksh_=j8510K\)n*<(?#VFrP?pU0MMS9fJ!gJfg^hF.0pM:nrpnjlIuY\+\.c_@V91q;id+Anp]6NL^b<#F%d0W:lLS-DL;\CsQ_aX3\$/fM9$l#_<&@.HEW,]ZL<'#^nF5_EooA\2-n<`AM-\e,e7BHY!ue[LRTiXJ/gB1W]#HeLmu!_,UGGPG7a&X"K7!>\rScPfmFFMhf@T9*9Dfo./c>D0rgbq6mJe)^\FcJL./(=saV&eHm/Iu:9>_,V?(PlU9A#Zo_Jm*$\1fI[9D>64l/Z3L[:j7~>endstream
|
||||
endobj
|
||||
% 'R31': class PDFStream
|
||||
31 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 1320 >>
|
||||
stream
|
||||
Gau0CgMZ%0&:G(NJ!e8uO]=4P77p!G@(0fq5u=p-s+"q-N]+3(b&S9]f.V(%`JuMHTs.u&E+[B8Nb0gL+Vl_1T;sQZk63t1+s;HU)N[E&(/OGciqB5Q:?7nA(f:Vkk7Pn1YMf6Mk24o41d&X-AZ7Mg[`T]udH9A=DQCjNFIH=/M:JZa^tg)L=hiMKTkNA^+(4URmY4VhrsV9"fu*;W%']$NTr;2J*CTc&d+>D(XGRe)\#So_Z4_$iXLk@o^'P_mKCE"bL2-`5.(4n$$G"B.[h_qm(#/"[XY2m%Q08"Yl5o#i?b3-#n"H_<;D?37lf%<,e=a!(0+JHIcMh-n_pE6jBXsJKl?1R"LUOjNU8^*=4hQ3khbDp-T.;(0nPZPsgM4Ltej^Ai(HY.PGobVTo6T7.X%MDJ92V-&B!pbUCOF?B]I^D+*qPRDa:Y[^notm3VU[kr<C2c=M_+3,X'5+.2*U.[?C"]%`B7K&Z0C\N0i3&f5O*[H`sg!P%W.T1;4_b;=Y`#\6p)bUQ/=T[\X8>8S=(3lnXBeSas_n'W((Ct5t7M^qDkbRH')RS'9W?QOg;b1N#9lS,/Q+Xj"uN>O"k9l&tZCQ_oIm=oDA#J9[WLnb(=nKbogSsS812\IUuN,H7g6ffD.oTEW,aFl;(OE<)A$M"^\(Cd/73-Dq.[fMQ:l]h!1"$,k&Za(W[.(:U4M4Vam7MO7\&%Yq?.,CB`'IYl`Fjq?6"@ek+:E['*(d."3g?,i\'1,4.4TaFl186ZksIU2+N3"4Iunk=S?FIYQt6Sa*$DIb'_Hh&s?'=sZ;G8lD0aj.>=umU4OqAAV89A`GYP\)8^deGQ#"+W+"]dc=lg;6(!`WOBi^/r5!DQuFC26j]\Bk+#O0PF'YEbg;dqE]hC&Q=NCo\.d*AjVfAhBI0NJ=-/l,F%XCl8r]s&^7+/S0.`Rc]8eh1kObK_5^2^e,98"PFo+3oCFXH1mF^R,F,p:m6>f^RFZu@m29p5gVAW)5Sn6-PLrTh0cE!rc:6#=71WsD[8X`(&;X:B<As/8AZ@ABd82Z;hY>9J4ZbmK:/Y#B[L1@gHo,1!<02[s?-HM9cl`t>Yk"t6t5NTr;nb2b>2[R70PO$ej>pX=J1L[=h\&Q<:=h"0BN9=g);\mA,haU1F'@>D<%;Z),>Kd/<JC[2r?saO-)\9;Hk\M)T8n`&J&%"mkChXG.TsH%r(($Ok"Bm'm[Q(4DK[rW2o8@7Fd+Q9``6Uq-$#BZH)i"5WIt&='&,lH8Qk0.C)"%q5rF*3#o_4[U;DM$>fIX1,luS7^BRt"qnpbboIdVmDS*q!f&2j~>endstream
|
||||
endobj
|
||||
% 'R32': class PDFStream
|
||||
32 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 330 >>
|
||||
stream
|
||||
Gatm6b=]],'\s#b%qhkn0fMgjG3OMai^V0fB&d!/LH_pVkP%^!G3gWP)eg42EZVn68s'%G\8N9nj`#36+9hKHdR(k-iQ?/k_Q'h^8j[<\g^97=0C['94(gD3:n!8(ZPHU(6*P&_PEG0(c=4?dadB6nCk"VF%CCh)E,pC7[tQp@.7hl8ppdE+Z9>3cafdFpXg!Wu9tKM*(qSjCgA&e$C5Z(hGItUV7sSI,Do5HkHb'[@G&HF#-GWpN2o*GJ7\UBp[SU*N[*^35Hgo"t6Xk%RN]JRm1*0-uBc:Upc97Pcl@2<O>5Qdlr7<J\31/^;lTQq?p'I9\N-,~>endstream
|
||||
endobj
|
||||
% 'R33': class PDFStream
|
||||
33 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 1210 >>
|
||||
stream
|
||||
Gaua?hf%4&&BE[jp`KFT.Q-lZ[Za82UodfZ:"?VQ]M3_Y&0Pg\3XFQK^OEW_bD&gu9AK^PNj!m*3W!ia!5d^rl?0g,khQqYh#IM.VFq'AUM+t3hG;1e*!J_o.0GW/`1t-.+ke:,DERbU*^T0`%Ur&!Dj2@a65r::h'h0i<>7!Z@.i0Tct'^_GGpI5=b=SIr@Z>rkS9QCMo!%I4F+'CR/DEg-Io"Qc&fs&Ul8A:'Q8nX^-Ld@61Z9RPJ#\E@]A^2\ltG6*=I.!AG]*h.1al8Q0;<B4@mTgS!6SU)"XIU#XhRl)$.ed(l>2=O#RWf.]qe.@Dm/A8EbDb;iWIr/`6+cc2b6R[Sd!PJV"^5`('rTB4qrA*e`#Zdm=s\(*P?J&90\"%T1k?rI;e'l9a%JeIALe[jiK1;d*mT`$-OdCU+YDrAi^[qNe/WltF,IO#3fpZcI&7f8+oQ_d0ZMmO$Q)I[_\=j$F[&/dgfFFr84?0IQRT8bSC5kra-b(L,Y@hkbg_km7\%^pCf_5'2Gnj_TJP3e5qFS>_!"@Z-T_p2uK47_qA`d#1N3$$D^gN`g]l#X$=+j&L_,iaK;(DjKdS_0hJKbEjOF6N"@cD0k<55I]mA>?@!^Z6"[iUq?=FE4:Fl"AWOXM[n<a4Wg6eU2,^t=nQA%-!i^Sam,K!MVX.)Y_C%,fjL+lc2>qj1/D_c`kndbYKe@.Qt?GKmagFc$U^]\@AmDV-N2arK-=41Pf;ZZ'LH,<>tA6T_bl5"]i\?iE3)lJ79LCqTenE&0Vn,!kL!-(6>KNoQruP$=K/(1'udGs4Jqq,"U=7\)%Hb/23Z._[JqW$,cY'C/10FY(rqf%4k7PLGF;kZNpUC1rp618MJFJ$S3]KsNd7Xmg-D=2grk?!Lc,<9W)%=B=cHiuFR5na)/q*Rd/bhu"CT?Irhj-qKEf=,EW!k]8Jd</G/993`ABM"(m54FQAOYL=*<@5pF\YOQi"e_[h$pbe_OWcFLN*_RE=2C\JhIsf_cfV6a]4XI'Lc>UtKG_0f3<^)P`$6bYIc?TaA'S^rT0;SVBiSXKbT6b`cY:JIt\HXl`-n4DAtBBZ-*HVf<r*Bm(CPEgLC9M8Qs.$+&0<)3="O#\/T9bYBtc,C4fHjp-3]@)`:3*glbSSfa?qJY!qpK1262()kXgD&,!\d5G$P91a`D7U)PH?X=3!IgBK1>b>[lq?p'0H>W~>endstream
|
||||
endobj
|
||||
% 'R34': class PDFStream
|
||||
34 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 2462 >>
|
||||
stream
|
||||
GatU4>Ari;&Uk7Ps"MO3DU'HR9!U$AkQTU[g%H,XQgG**6.6'BU24Zp8r'/#ptp:MUguQqXLL`YfHNQ*Hnubf$l+;RIt@EfQ2p@qi5_Gl#XWdW+ddRSGk_?4*j2[lbX;5#B7W"46Bo^--jIZLlh/f;l`7hC+V5i:.P8nuD^O!)q?fXr]f)*ZU8A3=(elaL\UE@m-htb>K<K,t=%^5[LL9$!#K,I9o@__1bpPTap,#/\W?=RB=He,1eBrj%IrMfH.b@ol,rr&pe.(UKQ<_>:[a6!2Le8lp1k3>["gT_j.T4?D@3H6,5dQ1&E"=tSo+tHYplqhZ"P.S--2<'L*5rhe$At"*j-c0s(P7#'93^XI/qF=;FKUK*dRks[C9[fj^q]mH"dmMAX]SjBZB4_+R2OPTf;I<-!F2abP+0"FQPCuF/(q:@MbEN3Q/=WN#cO/+N'qO403J&Rr#%YMlSp_d#7i>f382IBH8UCm1hR\gjY+"idXm:PMDHJY<GNg@jX?6>h8,t'+_;93::1Nk=Rn<dJL2)T%c&`k#YYZ:M/MY#/g>n5$''@ddX!N?c-mk,2aPGP;<%!mZQjb37Fo97D8pYJ$4Y"SA]Z"N)01Br%p/$R#`4C)o#Gru#,b'*el`LK6ASt4!_n*K)qENrBW+C=3#82N(7iQ*H>c%2`cVui'VXm(.Pb,2B6#dldnZVnbF5I9aeGOZ6nC&$&-a4?rq,[nn0V^(mO#t.PUR\%4IM6D%]2`6s#!;*[gMl>f\qhnmnGd7gInD<R,A1A$$D/gV\Xte$j/@'eXDM`UJFO!n<@db:#tLQLC4(K#Q;/(6(]e'kJHK%$U^<WZYk6<hB.6=m+Fo"GMEbJhE7Aq1*^/]r_6BqS*m,U*UGo^r*Tbu(U&t)SbYlC"S90,r3]R*qLg5)5Z8;?ESQ,_BE/d`/2;s1(>3_%R"J/2K>OL:6/X2WbI/r04sVhB]Lgbl_dGYV0q9*%qZ;iVGOW=MS>PN.iT.eT-asZC@#7sRM':$H",6>0\gEI:7/q_L^@GlbO@6IOqt9\Jd+"LV-qa#>^oHHCk*Mb+8]-DR7e&u5)"c/qAC-<QL[MdZHT-1#oVZ\J4S3W2P0A]]k^7]fMZ2A,oPFZL>)-fiY7C-7ai,>N4oas4nPS2V:@ED2^au_P=Fhc"=GK^Vp0:Fb=>D?aGk,^fg;&#g.DDcab52='Y*`ZI-%;q\]61o#+O$0OERIie@.Jr13"o$:Zd1Afh_,^Z_qKLeBN:ElHUFW.X%N;E'$n"h]5k17P`%9PRA,VfB\a.eXH:!7=LtM,2-Em^@u!n6dH]CeCO:Vd^b^Co,o;%cq#jZMqLH=l=H3,L.b]ho[P2iu3Tb`gM-7DFV&(H)>+.\a)?VU&`hg]G>Y3!dq7R!T_H^6i9@N7g]eUgiEj#^tT`Uuj9H.8J+,QfU"!7itTHquoB_3;^X0"tsi!-anWh/E+XLR>1l@0/oX4u2.]/aE&fc1q6)0sdk%7eSZii<h0DJ1,N.rhP^C]j(u48X/AkFR1hT"!"aeSagL*>\LMC7N<i7k,ilR)#)PR39LZKkD%3Tp?bgM*J\HKAl1BGVU.!e%s+n`a8,ln8_tme<Nnd5>u@Pi/n\s<-4!+lK$`,=OK+SY\h6bh$;Su=b=&I3oXXtVEo>P4#;;1bO!>*/a<@R`T31(:rY1f"Z#%)]W13Y0JU:s6d5_YL%2=TK9OR9]Y@a?rV_U:rWYRZS*]k#1nf.<2g?@:hKt2e31CGb$if\ZqbRS[;!B='G&4FWggX'&>)B\Pbo!W,SdiYI(nH])chdMC:N=M@,(naf]PZA0J]CVCgqD4!lY']/cTOrC%'MJ(:+D,VBi?a0r4!SB8S^qVD;O#nkFO"MlDLWO[)(8U%Edr')L[`m*FmAR#=4+?Nd>"/VQqLo\fUb]pQGrT.7r[=KYbm6^26$.CC4AA<X%SnX$j-Fb:QfH_PQ7*SAT#hLC*tebDF%4V""Y%l9W^+:*VXY9'(>rK08c>Dj!fa#2a9c(C.8pNo9Rh7??\&d+D_IH-n1]mN\D!!Vm8\A\l37,h_1@EHiIn"ck!C_5FWGi8OSbpb>DPDA<c&b5>p?)Yga$`iR>g3n!9:99LmtZf^?L1;FTc,iMcP?Q<<5HL,J-d69SS#K="oQ^%7ZpE[,*Ed[='pS%$d>o9(4%fY^hk-?H*:l&.]d$lpK'a6KI6VW&CQ]i!Urb8,ImXFZ:&Pp\]mbem8G7mB545;N2gT&#V\V"8)gdr>omVp(fUY/eo*W-!$:;SE#LDshhMp>f"i"n(k&k89NgbA?ar%-t?IK=L;@?e=?%5XWpB/+W"$^a!^UWa`rR!G'h`SA9_@.#;!13^5Abl..#q\M'_hoORp@3,Pa0mE*pQobVLbT6,)cd-\.`?'N(_[fo=^&PAY%__K)B)PB+^qANEh%2aBn#g?@h]:uY7p#WO^GqhXS`CQ;%m+^Di;2_gA#@S(~>endstream
|
||||
endobj
|
||||
% 'R35': class PDFStream
|
||||
35 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 526 >>
|
||||
stream
|
||||
GatUra\K`-'LhbYndfXFPo=JZ6bKO#O:W?R?U..0AUlV6Hp2`M!b-,.'uc%]qrHo'DJTZu4EPfa28CDkX(r',6,!EC'+XgY/Fti95VY@1TF'd([7Xs6>mZR3oGU46Eu<:rWm/9+G/(!9.*8ELR5CDnXBXFA!nr$qA0M20\[GYAff@jc4TlQ`#Z#"C::!0(1:1GOTuRS;X\k&uR`2NZ$!@U\%2URb'0Tu]n4UiHOO&B=>U3L&ilh(_ZIs0R8uN4oZ%:rDh`t%UbGO/Y![ptoJW0u#&/Q`m"-20l5tOm8a;j^Vk*Y'a8'Ys(7?BOh'?i2ICQ=q>>f\%/`$^p^K%Cu&[lIMUk(lee`rrS+Ec1J*$Sk5"JiP0&c&m(:1EC"dp]PY3n<tSG`gh^MPKDtJTB=(%:2,eMiY0Nj_/#(dREi]"+6Z/JpMC@FH\D?p4]Kbs<5Q3sbM(SB8XfM@rp;i'12cJp2kIAe2s,o3E',/_"R=I4U9^,Kk4<u/lf7nYQ[E#XjniIO*.7g1P5ot~>endstream
|
||||
endobj
|
||||
% 'R36': class PDFStream
|
||||
36 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 3185 >>
|
||||
stream
|
||||
Gb!#`;0/MR&UrUes+e]p]N8b5bQ%`-DK<4cgIcL/=heP>J7U9O-\3Hbqu#n=0\m"=JtDZ]WNG!^Jc6M#JPYm^Zl:G;m6B/$>],8je#iE78I;64m=S7*+r7Y;'gLP]]rOT%]DllF(3(m!Sh<\`p8.P)p$U^=mhE.XJ`<I5/[p-np4<2-lCDcq%9HK:iN9_Vln>3I$XMZXT1-"7W`n1@Me04TDX6c1;q8$>]AAlcGGs1:lqV,A<82F:5&Lji.-ndu;E6Sg;XBl#YqE*-\ikki_RA&S@_"+X^V(Gm^P^e7`-&=i*r!YE=YpZKIU>3;okK&oY,f>0s$rX.11+Qa#nn9ERGCY4B#O#m>t8[W;P"8]-MD+"DX<dWgr"?6Zd]jVb>.gPi?t!2J8'H538JHbHaXk@XEJaOfrhp9Yns/0n0o!Idm/do)_&a^>]r`Mrh4#KnO"4'XPWMq!<1K6gBjP$ks?]Lct%E'[8YEtZI#;m5OZem1[Klmfc9NUor%*A7clX5b'9LA^jl91B@U6MQ==p:QYRuJjeaNnp-<^->#8*0SH@`o"O(t[@LdO2#>g0kB^,SfVJ\+.l6^g-F_CcX\(_l5@U#r!j0fn-QKr"lZ[5W6`I>_X1"gIF:A6hF=oAPL^a"IIkXPimC$JR8U(6YmlHfT,*IuVgFj?]kn,Vb#!_j\c1Xm_3\dYGgIAokk]&J^N.X5K(^*B\Q7TSB])Eb2!%]^C8eUIMh\bknI)YQDp@]'?cGT*G=gVMY3cDI'<eiiME>eW<O8&,f!]U;24<Gq/NimmLhJc<D\J6CPS@!@>j3kfPo3[5Y(Q&[J6-Xs!(h&-9;icPU\SKSQ4;8DT.!B^$:"mjMG:h.(O7/+Z;_S]7-CTJ`hS"gpt<Ni%/2m>H&`bDWF4pp$]]qgmN\++:#D6;V^0th\U(KV(gl[)L`WW02?&7;W!9tP;'X0l.bCl;qG=,Q%3]GI(.E*+Y,?f02Tqj#Tf-r36oB"mm9c88G00T"\oh`gM3b=7C/]1KfEY2*D/p5)1<&K^*`*SKTPF.u+!1TtjnDP;$00sT%bg9)/bi\%%>:.R-eOdOai84kD^rZ(fG,-STo`UP.u>^,POe@`9pS:q6mA*+ONZ@A)=S6:YY`]Zlur*7`M_m<$RIq&V1.dn_)qn.F&%emGA5<7S9HS^C,J)!a"mADhiVZrckE-Z%7*#O,g:3B!@klcURbnMj4A)PDfC'nW`V]Z6B;XUE4=YdQK5;/qcI$$8!\fC/,c/TL5GFsrTk58%.VgsVGdW<4YVCc-KRTMqkR-U'%9+e'`"P7M$Di:XPg'PX/!9o=o#`o6O!IDtkSH*As'-N8:!Ko\^+:SGSdQe?d%<MXsE?ILb#6L]P+@$(p8`Zq[#phG3qb)oT\:E(BTTbhb9#sS`#!/a2305$b7&eR!O;\Q2WR3sY2%g-lUN%D6)@05.i2kER7r"2=20,CI;Bp`821"?k;Bp`82%k[BUO\!H80CNa"JXC:+@qL/U!uUQ8rWtJe0HWR(MeLmC'aO")P%]FWR3sY231F`P8XmP;PS4S2%k^CUOaOF)@069JPKr*%\uSS5\`+eUkZ\<;2mB1Z,\]Y+jG'ro,Z1?a"uW3b]bo8*R&oO1=)Z<F!U>taF)%5MqTBHDb69;Jn.5X?7*5@n6,&BKGtJ8D0Y4"r`>F.Eaj"c/0tM@cSAsKr%&uqa'\#Ii:&09k412h,I_r-"IYT/#+MNXP,eQCouSo?*^sB6`T>MDbu$#MrJ/UndG4FDlEW*lcu"eP\aD[XI1Wh_;9["$;;<3]UZ<,Cm84SG149kF8's06hSA:;M7VJ9J,e<d.+Tc<i9%oM-jgh1GO+'C7P>)JOub4,'9bDNZ\_M6@/>b6LJB.$2Y"t.;mgIBY=.tam_u>2Pm;:Rg1D^iqHhr7D;/m=;M,eGr'_7HGbd1@`LQ(WAm9FY%L5je[^b(Vim@3V3)W1@X69*0*6!>)s03=)imAe[X*o-j]f7jC?'iWU=7"Zo.;JBY5FR?[M"In:nu6Qrl[.5Qh2"d*G:3FIh$+8CMQ1!=gGQ3[W:l"T^O!B$.I>?g=B/#!Cmt<N<>Ve!]e&FlkLqi3`@C28Q;$6i!At_fFroCU^T(L.r6RX^5!Ln$5(U<W5IlMbS&a(A\N@>!:$do;SOIZQrF,D.?kl23I?V3]'_A=a@ND_R-t:<!\qmXbAJ[.I_lFQ0'#haY]`(BX=_3cfqQ$%71"u-nX(,Ic[:],6o(oCB?@Pttl`Wp*rDaH5^In%mS+F4\nTnu<+5[#a`RIR_"3[QN.m<1D'i55=8<:WeTi$ln.E&rsF=L>(.NZOCjY,_XG''F7R73'+(L8e'Oek%#=c4N^?AsO'-!?30lm5eoP;CC%o!d62!./O6A<4O:=s@9A%cTk.B4U!=fOn/X:6b:+EY'>2T$0VIH`AVE8pPP>L_!pdP3FQ+T2Lq7Ol=jQ+?kIl+VQ6=hG@dE;%iEO-Z:Vb*8!Ul1j]5JY`E98HbbE@LF-^.!1[I>,s:mO%q,uCd-Lcm_d;rI(@`R7[AVV#E/)'cGqJ#CfIKb$7GnT$an/aSm^:KpCF*9ab,p+%p0)9aA<4Mdp<3Tj4P4GS#nQ`of4sI&"ZkT7!b>*A?NBH7pBrhL"Toe7L&nTX?SMQSj=:Ggn@Vf:r?[)I^%(_u"O=5IG[?='&GCsYf-50gIE_:d`.tRX4hVV^1[H?Xf-3D3IH9Y##b5>,H!ZF(&GFi,CCrPD?LbZDnKI7aVq3,3mVNE1f?/'9Q+gQTl$#k30:RWAXn;9i8\T)*1Z(.5K=r%i+P@uYL4.)5>/Z3#cTJlVJMZXkT%>/MKRN.M[0W:2Dg5THp^m/=dq]OT_`m%)/`K.M-_=Y&^_ui#cYF+7_ER\c=p3-TO*Fuhp^m.]Vq3,3L:u_p/`K.MCJV-&i8!XP4Kh2$#^b[t[0W:4cgt>Y#I4$q=p3-TQV=TJiEe$_]iJ$;S+E^>%sH[^dqEgFB/?.(B#-*hH(&P=H#1X0fJM5h;br$?.=X3;HSrY-C-9bk:u9@mP(b16=VFS@rJ&$5!WOq@qhNjCk?ARR^C5E8MSG]88Jq$"^1gVgh9'!2L9Fd/(TlaLJ2moAT*+j`!N:@j]B-kQh"-8mZR-'e]CNecX8Pon\f?$<kgDC%%,l^8b9"D_Po,N(G4.lI[X:rT*?g[UhhU.T,K83Frr<IeX^1~>endstream
|
||||
endobj
|
||||
% 'R37': class PDFStream
|
||||
37 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 557 >>
|
||||
stream
|
||||
GatUq:JZTs(l.Q*I#%Hp9?,]6^K5P6)D<R!j$=Q(/;*/@cAumJ$S:$4Oc0;-qt-4fmsu8WdQ_R:E<^@o_.89$'8RESBg<iQK5'Cn3='(Hb&BTpE$YQ<@?\L%msXsPFu]])5[ph\bgb[sp[jnoal2a"Gr)E*"9g?DhN]eG-["KZ<1h#t4:c46FlS_Z_MRK1WtR=q]eG-,AdI0K;j<j&Rq9&gE!B/DB3-`TEXpJ(U<t,O=eJ^th@rQ4!+I,Rb[_HV]V\+2b!M(gTpM6ZI`+unZ;"Sr2FiTD,;geRd<9qn:VYeNI%,R2Yl;l,-1'&h$1U&Nnm^A7)A;B$&hlXH+;]SS,r]_73)J#Ggu/@Z>sbI"j-n4[fur10"3b%;Vn(iVc&(^smdL8>/tpbLE@p=OT/dg+NrE^P3m@9+[#_c8#FN,V:34I`oXnPSs6WP1DoYLfJ<#p;HeZqlCMp3D_uF\X#6ofd2;PQQ7d.hF%*[LYfl,R2PRM<cCW:6V4mTS&2&5Gg?<A=X#V0fl7JUQV_U@i4R<s;JNH@>UpSPL(Ja`O;)OJK?~>endstream
|
||||
endobj
|
||||
% 'R38': class PDFOutlines
|
||||
38 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 39
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000298 00000 n
|
||||
0000000463 00000 n
|
||||
0000000656 00000 n
|
||||
0000000887 00000 n
|
||||
0000001113 00000 n
|
||||
0000001336 00000 n
|
||||
0000001653 00000 n
|
||||
0000001818 00000 n
|
||||
0000002099 00000 n
|
||||
0000002271 00000 n
|
||||
0000002446 00000 n
|
||||
0000002673 00000 n
|
||||
0000002897 00000 n
|
||||
0000003207 00000 n
|
||||
0000003489 00000 n
|
||||
0000003678 00000 n
|
||||
0000003905 00000 n
|
||||
0000004129 00000 n
|
||||
0000004441 00000 n
|
||||
0000004631 00000 n
|
||||
0000004799 00000 n
|
||||
0000005079 00000 n
|
||||
0000005359 00000 n
|
||||
0000005639 00000 n
|
||||
0000005920 00000 n
|
||||
0000006058 00000 n
|
||||
0000006329 00000 n
|
||||
0000006507 00000 n
|
||||
0000008777 00000 n
|
||||
0000010171 00000 n
|
||||
0000011634 00000 n
|
||||
0000012106 00000 n
|
||||
0000013459 00000 n
|
||||
0000016064 00000 n
|
||||
0000016732 00000 n
|
||||
0000020060 00000 n
|
||||
0000020761 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\275\375"\226\004\012\247\311\024I9\2513L\031\365) (\275\375"\226\004\012\247\311\024I9\2513L\031\365)]
|
||||
|
||||
/Info 27 0 R
|
||||
/Root 26 0 R
|
||||
/Size 39 >>
|
||||
startxref
|
||||
20813
|
||||
%%EOF
|
||||
222
z3c/rml/tests/expected/rml-examples-009-splitting.pdf
Normal file
222
z3c/rml/tests/expected/rml-examples-009-splitting.pdf
Normal file
@@ -0,0 +1,222 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 4 0 R
|
||||
/F4 7 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Helvetica-BoldOblique
|
||||
<< /BaseFont /Helvetica-BoldOblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
4 0 obj
|
||||
% Font Courier
|
||||
<< /BaseFont /Courier
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
5 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 13 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 12 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'Page2': class PDFPage
|
||||
6 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 14 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 12 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'F4': class PDFType1Font
|
||||
7 0 obj
|
||||
% Font Helvetica-Oblique
|
||||
<< /BaseFont /Helvetica-Oblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F4
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page3': class PDFPage
|
||||
8 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 15 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 12 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'Page4': class PDFPage
|
||||
9 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 16 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 12 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R10': class PDFCatalog
|
||||
10 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 17 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 12 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R11': class PDFInfo
|
||||
11 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R12': class PDFPages
|
||||
12 0 obj
|
||||
% page tree
|
||||
<< /Count 4
|
||||
/Kids [ 5 0 R
|
||||
6 0 R
|
||||
8 0 R
|
||||
9 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R13': class PDFStream
|
||||
13 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 399 >>
|
||||
stream
|
||||
Gat=%h+kg@(qj:^G;tEqTS]Ks"j82]d0iWeoED+X0`tpg-,d:%/T(m=#U)pS/>qD$.g'pPL%B^%gai"D%#dP*^]Y6G;`q'>qMM%uEA6W3cH*60*5I#Kpe[-9OH>\nXjKjLVL8(kJ^VPI^<Ne"mJc9`F:ImLFV?00j/Ba6LZ"Cf!ARtM#]M4iC!;3W/`CW)+ecaj%YI7gk;DB%)Ls;!0^6%8mWt'\(_''IcdGh:gn7=s%I5P`Qu\HrRhqJKD*9cr-f_+84F9P(^tA+@7ONRc#A1O"Y!2P8FgUS+[QCT!2siSK)_A"2XUR2-T$M0aS<?#bWp\#brP,6oV'h-;cp*F:djiVBZs4ZJ_Biob.U$Ci,gt&1=5=`<%HGFrdh4[bHrb+O2b"ec!"MI(OT~>endstream
|
||||
endobj
|
||||
% 'R14': class PDFStream
|
||||
14 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 500 >>
|
||||
stream
|
||||
Gat$s>u/<k'Ra>os)8T\6mHcTFcJtN?qaCp2"APO.YZ-_2VT_OhqOG-PlOFf/nrVEkFQ`uK%M^8s">&DK&`Y"5UcC=KLH<^LCOiI[kR:g"\B_(8X(b[$]m@Z:"#uZ;P\:@5!e5fVFRu90"BC8rV+0"1hVTWefjf=plVJa%tbMX'TC%/b.u:n`#*0V6:phJpr*M?`KDW]<j6LI_'iSsqjEVb8kjsnEf^SR_BAQ+C@k0+h9;i]l(3LFhDo`8)E]Z0C,(l*<jII_a+Z6:3O0uj_m5%-MA"WjNoe,Qj1lbY!H_Y]NsE!D4A.JqZF#%GD-CAH`'e?>jc%;UM8423jgn]eZ0dt+A675oZI\YQfNe?\`8*#Np/M@qna76ZeZYj(Q8@2H(Z[oXgV3)u/tIV]09b$(?2[-fFg&_SM)sO]fojfqf50HG;60!"lL\W\'9;VIE*9Xnh`iaCEm,g\M0?JENV)-)Iui:MFo4JYXn:@8>'YT'K.j*u2.6~>endstream
|
||||
endobj
|
||||
% 'R15': class PDFStream
|
||||
15 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 517 >>
|
||||
stream
|
||||
Gat$sbA-)l&A/t[%g@=5%BQ:AagQ:#GsFnC&)BP^:=e*d?mjX4Qi):Xq(Y'l%DcFc<E6)(<<VPNMZ;iD3,poA-P42/J@*[B=#b88nh3]]`ZPpK-BX@V#AE>=\Ihj](b+D^r4KYUig\D<\>nq8s*rd'ptZ`Nln>kM\>.^92GN%)0JlF21iu2RCToPG<Oe+AO&lIMc@sbsi$b+(<(K<c[(_S=))>[5^V^*k,i`om@!o8S:cc),iq.,pD://n>Khkn$]'LF97pXDreYZXCGK=$l%.T,Rub-I=$G0b>S5Su9To^bHh>0>Tme$V\@W%.B6Z$HXD#CP-AY@ZO#jr(>9l*i5+G:l\Ybb!L3#Sb<)s_GSr1364Lcq9O&*`NhsQI5Y-"'P)5m9,Xsk"%f"8r%J(]m/gU1gW.8;%tI,;QGMe$#t76Ze8q.3VceIl"6+`f`!kG^'mM_c29E_=R`PGJnfNF$"A,:e0d<5+r[4hd/:fOI4PPfLZjg+*]3BZ0c^+\fZN6,E:n~>endstream
|
||||
endobj
|
||||
% 'R16': class PDFStream
|
||||
16 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 351 >>
|
||||
stream
|
||||
Gb"/a;+ne\'SYEPr=9-$R%c=G`1"As%Nd#sQTn;'Xd-<E/-GkF-?0dU7bLUc1//,C3Ou]`,6HXb,/,-;i)8TO+s70&KTJko:N<Mcj>BZ+7M%%_,ZrW5?4a.uPUSMV$Arog#,D(M.HOVEBX;ZF/Sf!<qY>+b5(\6<5)prWd\Ohc5n[g&6CnQ3,tKIeK3:=N59dUJ`jkXMa,OjQ;6M#&es)_B$KoWC?J$GrGVn.>>LS&CctuJ%@r_q07TbWho6pc8<%m0BJU,jJE9>E=ZsD^A]Zc^Bh6LHr+8;i$Nr+QZgE6\-_Z2.?Q]T>o$11GsRr<r+%qq`jW:l.Vs)\3gm^8OE2#.,e<)7?~>endstream
|
||||
endobj
|
||||
% 'R17': class PDFOutlines
|
||||
17 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 18
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000245 00000 n
|
||||
0000000410 00000 n
|
||||
0000000599 00000 n
|
||||
0000000758 00000 n
|
||||
0000001037 00000 n
|
||||
0000001318 00000 n
|
||||
0000001497 00000 n
|
||||
0000001776 00000 n
|
||||
0000002056 00000 n
|
||||
0000002194 00000 n
|
||||
0000002465 00000 n
|
||||
0000002596 00000 n
|
||||
0000003137 00000 n
|
||||
0000003779 00000 n
|
||||
0000004438 00000 n
|
||||
0000004933 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\2514PW\375b\346M\037u\307 \354\014_\254) (\2514PW\375b\346M\037u\307 \354\014_\254)]
|
||||
|
||||
/Info 11 0 R
|
||||
/Root 10 0 R
|
||||
/Size 18 >>
|
||||
startxref
|
||||
4985
|
||||
%%EOF
|
||||
124
z3c/rml/tests/expected/rml-examples-010-linkURL.pdf
Normal file
124
z3c/rml/tests/expected/rml-examples-010-linkURL.pdf
Normal file
@@ -0,0 +1,124 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Helvetica-Oblique
|
||||
<< /BaseFont /Helvetica-Oblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Annot.NUMBER1': class PDFDictionary
|
||||
4 0 obj
|
||||
<< /A << /S /URI
|
||||
/Type /Action
|
||||
/URI (mailto:robin@reportlab.com) >>
|
||||
/Border [ 0
|
||||
0
|
||||
0 ]
|
||||
/Rect [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Subtype /Link
|
||||
/Type /Annot >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
5 0 obj
|
||||
% Page dictionary
|
||||
<< /Annots [ 4 0 R ]
|
||||
/Contents 9 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 8 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R6': class PDFCatalog
|
||||
6 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 10 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 8 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R7': class PDFInfo
|
||||
7 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20130304200123+00'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R8': class PDFPages
|
||||
8 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 5 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R9': class PDFStream
|
||||
9 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 416 >>
|
||||
stream
|
||||
GauHFd8#<J'R_@f+7A/o@`L's"eUaqAn$^UZTl5PF%coJ;h*]]%^tr44nrDu8hT<!S9$>PM!Tb3?Q4MW%C63>EmPaj_$&slR-QH)6#g'P5pc`U9JMr%>JNlKI"h[q3^cR[Zo/DM*72ERJX+6MS(0G&VoUl<nsS]Yd1t#FS$2)l[eY+J<E[(\ljE@po[F%iG0@51,[jiUPkE&4(kJZ>B7f!.N)]'Te<V1Li+^Dg'G@RrFg.:^!UO<&+H:]8/bg_VAb0*4$8M35H-/k?kP$qa'N;9up!gOobN]L;6K0uJAl[DGa.L;C(]S4GjM#PM>&q,iMiXak=8@`U)fp<(A(La/TPZVU=Pd!PEu_AD%G4\rh4iU84WkYmO$';[3MU-bRYTOq7o8+e/Y,!>_b'i7&J%fn0_begFLg'~>endstream
|
||||
endobj
|
||||
% 'R10': class PDFOutlines
|
||||
10 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 11
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000221 00000 n
|
||||
0000000386 00000 n
|
||||
0000000579 00000 n
|
||||
0000000795 00000 n
|
||||
0000001092 00000 n
|
||||
0000001227 00000 n
|
||||
0000001496 00000 n
|
||||
0000001601 00000 n
|
||||
0000002160 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\275\375"\226\004\012\247\311\024I9\2513L\031\365) (\275\375"\226\004\012\247\311\024I9\2513L\031\365)]
|
||||
|
||||
/Info 7 0 R
|
||||
/Root 6 0 R
|
||||
/Size 11 >>
|
||||
startxref
|
||||
2212
|
||||
%%EOF
|
||||
318
z3c/rml/tests/expected/rml-examples-011-keepwithnext.pdf
Normal file
318
z3c/rml/tests/expected/rml-examples-011-keepwithnext.pdf
Normal file
@@ -0,0 +1,318 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 9 0 R
|
||||
/F4 11 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Helvetica-Oblique
|
||||
<< /BaseFont /Helvetica-Oblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Annot.NUMBER1': class PDFDictionary
|
||||
4 0 obj
|
||||
<< /A << /S /URI
|
||||
/Type /Action
|
||||
/URI (mailto:robin@reportlab.com) >>
|
||||
/Border [ 0
|
||||
0
|
||||
0 ]
|
||||
/Rect [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Subtype /Link
|
||||
/Type /Annot >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
5 0 obj
|
||||
% Page dictionary
|
||||
<< /Annots [ 4 0 R ]
|
||||
/Contents 17 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 16 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'Page2': class PDFPage
|
||||
6 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 18 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 16 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'Annot.NUMBER2': class PDFDictionary
|
||||
7 0 obj
|
||||
<< /A << /S /URI
|
||||
/Type /Action
|
||||
/URI (mailto:robin@reportlab.com) >>
|
||||
/Border [ 0
|
||||
0
|
||||
0 ]
|
||||
/Rect [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Subtype /Link
|
||||
/Type /Annot >>
|
||||
endobj
|
||||
% 'Page3': class PDFPage
|
||||
8 0 obj
|
||||
% Page dictionary
|
||||
<< /Annots [ 7 0 R ]
|
||||
/Contents 19 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 16 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
9 0 obj
|
||||
% Font Helvetica-BoldOblique
|
||||
<< /BaseFont /Helvetica-BoldOblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page4': class PDFPage
|
||||
10 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 20 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 16 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'F4': class PDFType1Font
|
||||
11 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F4
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page5': class PDFPage
|
||||
12 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 21 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 16 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'Page6': class PDFPage
|
||||
13 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 22 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 16 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R14': class PDFCatalog
|
||||
14 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 23 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 16 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R15': class PDFInfo
|
||||
15 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20130304200123+00'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R16': class PDFPages
|
||||
16 0 obj
|
||||
% page tree
|
||||
<< /Count 6
|
||||
/Kids [ 5 0 R
|
||||
6 0 R
|
||||
8 0 R
|
||||
10 0 R
|
||||
12 0 R
|
||||
13 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R17': class PDFStream
|
||||
17 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 509 >>
|
||||
stream
|
||||
GauHGb>,r/&A1NU5O>XS_IRN(N]A8YJqO\597A!8l&.Yr&tkkXmC'"Cf:`E`/(&[`1ZP`m&EjAdH]eIn`c1[*J/$ul+=A/g<uAli=+I)Yn.5oh+I",qJguIuhtut-h!u:YBNp\U2?MX3B"k1BYuT9Nq*lg;9%<(sid%OAlZr;sID@gr"I`kkV,.rSbSN.<P$*)5nIjiq2)VbYOf)0?-tEZ1;`bX5#D\Is`E=jE?#.)jNR*f\'XC0t=d,%]O'H03&f!tE9XW7k&/eBbbu]`e7b12*nVgD>&L1P"!Ol_Q@G3XjE,54]l6$O^P_QMKSH`)+^V.*%mf`*0O@pc8AM&(e-]@="=>M.)e>O??$5_gdd8C26WoGcCRe"0J)@oiZ.]Xmh`ai!0(N7W^mdT.T@!H_g\i[6)YE.M0$8s`a4#+F9f5dcJH8amRrnR,DadY%As(Gi7:+,8N#;4L,S`=1DGC$jUpB&b,l#PNGNgi0LijNNWl$r,1'0,dD+5lJm!<~>endstream
|
||||
endobj
|
||||
% 'R18': class PDFStream
|
||||
18 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 202 >>
|
||||
stream
|
||||
Gaqcob79+h$q9oSbWjmZ\j2,TaOWa\DN+Mp^^;eY'J].L*NC8;D7[:&3L:<R+h_Fplko$jJKjRuj8oQM@aEVI8>Bm)9S%7UZ8>+\(^+Je*nJ]!1Hi\qQ)t7a#")s]8(2;Gr:Xn5eJ(`L"kVajcanT`(DMH@@pV!D^;F%\3dHdrkERU72t0FtSTOl^CpLU'cX>!&1kmcE~>endstream
|
||||
endobj
|
||||
% 'R19': class PDFStream
|
||||
19 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 475 >>
|
||||
stream
|
||||
GauHGgJ5X?%"5>/J+2Kc7#9;s)P.Mg5XG`jUHd+bNc"F*\cM\UP&0O6?$P!(C6[<>nZdM4,#Im(gF!0?I0)><#fn-V!cl.$H%nTt"sk[0(DfV%#H8H#1"7)RL;>VRE6#k`,dE.^."a=+8J)0Vq<I].B\9:oB+;<d0-P?jbC_KblSMJX&PFdFAZH5?Zg'&jK3A&A5s?qd<oaUN"XJM_B'@goqe0)/#bkh*J5b9'NBi_9RbP<;<5l#)dbl@qJAi,ZP"W;SVo#fZ,B-`R?`4&afT@(Y[mgh(D83cN[)i/O4:lO%<5bLH4"/O&IKjU*&KPUcNT[.!o(?ZFWP3$c[XrXE>MC-AFnStglT?2O8QD9#aP"5DK?Ji*jRHf*B!^/1=*$u9@Db/^4kX]"j;U6co4L;^@R#-Rk4U/O*Rs]-mQ's6*p=SF`-B=8be9([NmF(S+*-01A;ONc-"d21`E$p`K3o%mld,~>endstream
|
||||
endobj
|
||||
% 'R20': class PDFStream
|
||||
20 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 172 >>
|
||||
stream
|
||||
GapY8_$\%5&-U@,+TF.R7>8bJ]%67K[&47GpCAO$KaMSnIqr!f#)3@MLgqk-\Hb$I784nZ>sK#*emN.Ih7_"?"R3so6M\)&kkDukL.W-u,HSrXZu>`DX^UHSTRC+$K]5'?eI:$Fk5"$#h$n.SE""4X'a52R.NSnuGOY#0-G^s_~>endstream
|
||||
endobj
|
||||
% 'R21': class PDFStream
|
||||
21 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 1297 >>
|
||||
stream
|
||||
GasIe_/e9g&A<G1s0+:>7.."\.*K&HkbW,Y4h-oUd7c1,JE2k]%0A?db#Z6jDaB5ch+T#RA;OFT^4#nPjg;g1Sj(>Xkk>OWhr^.VBi@sEb#Ym[UCWjCPK2.9FETtG>0`FZG',d^6,([O]NSr,X#7!q$ef\ZqrdF[jek=]Bu;+BQU+-=?cO8WDU)qe05Z/0.6aAq=LqheC:VF:.p?6@fkNt!opS"lQW3r\!`<$c98P.1FKe:@^3Klm5o30[E.3^%X+Y^LG\7Q2rDt#oO8Kthfnt+;<T@*:;Ws+#;;:5`D"\g]bHj,e5JKX.H$/oabps4S#t(:d4S!du9X@Ho"%CRfc^%-;)@1L#*HgXuWF]'1:8%>)lLFu%hl!sjEZe@Pp@>H2B[cO*I".DJg_lt4E()/iL;%m&*>JpY#OWg"JW,iD$6rL73UrCeko+1q9R4&%3j[p5[;gUJ'q@^u(\\lokUWm</Q:$RUtF<G:4ks7.,gODT!EK+dn\R`Y=b\GV2c&Q"0$99!kHmEoV#N34k3k]./0'T!a%Z7%3iiQ>6SmSH-^DqHg4t!5FinZ1/foR>mq9Yi$\d#\NiX7d(7%mWG/BfP<Hc2>`>gQ4]?"cLNh^ue]nUFQu0`)A9e&[84iCsq]G/&!a>T.fN6t\HBQl$3l^RR>JraiG(+l8PJ[-1^Lg!b(eZq?>A1!h4<Xc(A3e)+7EB!n/OOaR;&OooQVfiFN7eNBhGloLh3=!:`\])226/_3UV&*8]$pPanbb@[cQ1b"b,b$SQE<[_l)g.H)YPX)Vl3m^4B/K4(4hirl2"n-<s*=(]&)p4Kj@b>PL2l*i!b=m;HG7l=Qbm8V$It^>TJ1/(Mlt#.GRh@ndAGsN^lpGY0hI)*hj`KBi$G)K9R\'03+=jdXs@**g<Xip0aoN9hY4:cC,1ADJmu&g&9T'#4gPaT?(ei;.'aiAb<QskR=&Q*+>G):>6>6OF:UGISn05!6,8u(h>UD.QCgh"rS8D3Q0;QkV8L<[MAOQKddSl#$YLVqjs&`Z<*moSdbljQjUK68m<3a6#Xl0'\9AOSHl#_Pt8qBSKL!3"Z=,3`7d!C"9:feMK's[\q6;m6&uFLg!QQg"ND_T!3agW!mkB`gl!^'<&:s,in>lG`&4]FfS.D;gaH,]lGa>=GPSd+6]`58.%`A]Ho+9'4H+-4Z>>R/)VI]&`'priTHTmUH_YoG>#_OV-VF<19Ni;G8I2m]@Z0;0CfC-MYXI/0TkmVteCJ7+67:f.*-CBu`eLTXP9rm*9,?XV]><7th05rZ:/CikN,4al~>endstream
|
||||
endobj
|
||||
% 'R22': class PDFStream
|
||||
22 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 1071 >>
|
||||
stream
|
||||
Gasam9lJfF&A9%PIi':E]5X""/8oa97C+@#9c=&Cpd.QY&mL6X8]n=7lhcFjO/+Mq@c:Tc*6u3Bn'0q#_C&.:bs:no7IPC[jTSY2b0-l^lCQj6QPY^L([::Pnr9.SH+#o.i?1AG.Fsu)>Ae,\>#@0(eK;Q^(E\._;8j^,k=J1@\')[Ym57mn;Y<s\n`fV]da&)^`@BW,<8Q_>=]2NXOD"E[ara8!C40/S<&:>&<BBX*G<f2N>6oh)4/=;=if2m0qMTXsU1=4ST-Gf>d\shD]Gc,(UX:f2gX4b#[];>Up+Mr.IR!uf?:C'](GocB':PrQJYF3Q@a>bJCm]M`kW>#Kns3MVICICu6J*/qc,P1.d(@E,GT^j!^a3?0,I3a9X"E,/\$*8;^;ssPi/GHSqR5s1L!*s(5IcnT09PFrl+oe%g$?D@'H)]ckn%u)L7d,Fr=.Zj5W7CcmAr'T##3LWG%s9Wj(nk=P;9LX"fD+6@*;"M3el.GkJp/@*nWf??:Cm-Z:uua6$hkdef"02,3N#5V\^CX2e\+7B\U&eSD3F^[W02upmJu]eBVUs_#ZOQ!+)F)'G@K+9/XhF,%uLGFm0A8^]hWKE(_(l+e55f?9kLg*do-SjekQdP`,)VAI7q'RYJk]C(:3h[.eI2^![rqot'JRiJOro_p<M,*j-TfcQ70"UjXGjdrc*7_RIp^<h_CorA_B=`qI]Q\IaIV6Xu"j<!SEbj1Xgg17ZbtE52_g+rGZC%A=^T4JkQAD9F/.@1#E4agQcM33r+:%+]CSZ[j5%<I4A:[#G)'oHl>%"-=QnkCG'[/(UuI-cf%P_+gq>RK@-o&HJ[oeVbac?,93UcjPK(m-%:\H%I%KJm$W1!mkB`4I@Z>?*gm^k'BoPREI0sbouX#2ej)Q^@@E'?%-\8'Vr`?b%D/2BCnXDLX\5R<BHs,gTuMJG*3kc;:\:b0[D1pVafWK>cXM2-2p^fNJs5M"C2t7DK<J1.mF,/PR/&H:9Kf7g<;bkJ(jEJpA_h`Dp.f(/"q3-+WO#Ak][9DFDU'0OO^:,2<+*-C\Vt"IUP7bji'GaC*)j~>endstream
|
||||
endobj
|
||||
% 'R23': class PDFOutlines
|
||||
23 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 24
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000246 00000 n
|
||||
0000000411 00000 n
|
||||
0000000604 00000 n
|
||||
0000000820 00000 n
|
||||
0000001119 00000 n
|
||||
0000001412 00000 n
|
||||
0000001628 00000 n
|
||||
0000001929 00000 n
|
||||
0000002116 00000 n
|
||||
0000002398 00000 n
|
||||
0000002572 00000 n
|
||||
0000002852 00000 n
|
||||
0000003133 00000 n
|
||||
0000003271 00000 n
|
||||
0000003542 00000 n
|
||||
0000003692 00000 n
|
||||
0000004343 00000 n
|
||||
0000004687 00000 n
|
||||
0000005304 00000 n
|
||||
0000005618 00000 n
|
||||
0000007058 00000 n
|
||||
0000008274 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\275\375"\226\004\012\247\311\024I9\2513L\031\365) (\275\375"\226\004\012\247\311\024I9\2513L\031\365)]
|
||||
|
||||
/Info 15 0 R
|
||||
/Root 14 0 R
|
||||
/Size 24 >>
|
||||
startxref
|
||||
8326
|
||||
%%EOF
|
||||
263
z3c/rml/tests/expected/rml-examples-017-outlines.pdf
Normal file
263
z3c/rml/tests/expected/rml-examples-017-outlines.pdf
Normal file
@@ -0,0 +1,263 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 4 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Helvetica-BoldOblique
|
||||
<< /BaseFont /Helvetica-BoldOblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
4 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
5 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 18 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 17 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'Page2': class PDFPage
|
||||
6 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 19 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 17 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'Page3': class PDFPage
|
||||
7 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 20 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 17 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'Page4': class PDFPage
|
||||
8 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 21 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 17 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R9': class PDFCatalog
|
||||
9 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 11 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 17 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R10': class PDFInfo
|
||||
10 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R11': class PDFOutlines
|
||||
11 0 obj
|
||||
<< /Count 7
|
||||
/First 12 0 R
|
||||
/Last 12 0 R
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
% 'Outline.0': class OutlineEntryObject
|
||||
12 0 obj
|
||||
<< /Count 4
|
||||
/Dest [ 5 0 R
|
||||
/Fit ]
|
||||
/First 13 0 R
|
||||
/Last 16 0 R
|
||||
/Parent 11 0 R
|
||||
/Title (TOP Level) >>
|
||||
endobj
|
||||
% 'Outline.6.0': class OutlineEntryObject
|
||||
13 0 obj
|
||||
<< /Count 1
|
||||
/Dest [ 6 0 R
|
||||
/Fit ]
|
||||
/First 14 0 R
|
||||
/Last 14 0 R
|
||||
/Next 15 0 R
|
||||
/Parent 12 0 R
|
||||
/Title (Level 1) >>
|
||||
endobj
|
||||
% 'Outline.7.0': class OutlineEntryObject
|
||||
14 0 obj
|
||||
<< /Dest [ 7 0 R
|
||||
/Fit ]
|
||||
/Parent 13 0 R
|
||||
/Title (Level 2) >>
|
||||
endobj
|
||||
% 'Outline.6.1': class OutlineEntryObject
|
||||
15 0 obj
|
||||
<< /Dest [ 8 0 R
|
||||
/Fit ]
|
||||
/Next 16 0 R
|
||||
/Parent 12 0 R
|
||||
/Prev 13 0 R
|
||||
/Title (Level 1 Again) >>
|
||||
endobj
|
||||
% 'Outline.6.2': class OutlineEntryObject
|
||||
16 0 obj
|
||||
<< /Dest [ 8 0 R
|
||||
/Fit ]
|
||||
/Parent 12 0 R
|
||||
/Prev 15 0 R
|
||||
/Title (\376\377\000A\000m\000p\000e\000r\000s\000a\000n\000d\000 \000\(\000&\000\)\000 \000a\000n\000d\000 \000J\000a\000p\000a\000n\000e\000s\000e\000 \000\(0~0_0o0T^\014g\0330n0\3330\3060\3530\222\00010d\220xb\2360W0f0O0`0U0D\000\)\000 \000T\000e\000s\000t) >>
|
||||
endobj
|
||||
% 'R17': class PDFPages
|
||||
17 0 obj
|
||||
% page tree
|
||||
<< /Count 4
|
||||
/Kids [ 5 0 R
|
||||
6 0 R
|
||||
7 0 R
|
||||
8 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R18': class PDFStream
|
||||
18 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 172 >>
|
||||
stream
|
||||
GarWr9aUqV$jGR;Tm(`SF\sNk[,Y36eURq9JQ,KYr'NW^R:';l68fpu(IFlaG4u*C'$N9;@`SQa6\KP`Mg'C6bS\ii`Y;=YSM>Pf1*`].8?E*qZ^@dB1^9#9V:4lNXW=cb;9O3cR`P/VY.RDgmH`Gt/nGAM6Y>ut?$Q)E3m]B+~>endstream
|
||||
endobj
|
||||
% 'R19': class PDFStream
|
||||
19 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 170 >>
|
||||
stream
|
||||
GarWr_$\%5$jPX:U$qImVh_k%da"mI:BM4"##[nC"@[`fZX>pf67sAXIgE.dff`*G<j:9iL`n-B$kY7f([peKR5(Y0N@CZ<#@mU"AO]FaO?*jKB/*IdBFQ"q9;gZ'>!$HO\sDkkeI:PF7eQ`G3F6T7!P(O_o`\WGpAre-.OP~>endstream
|
||||
endobj
|
||||
% 'R20': class PDFStream
|
||||
20 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 170 >>
|
||||
stream
|
||||
GarWr_$\%5$jPX:U$qImVh_k%da"mI:BM4"##[nC"@[`fZX>pf67sAXIgE.dff`*G<j:9iL`n-B$kY7f([peKR5(Y0N@CZ<#@mU"AO]FaO?*jKB/*IdBFQ"q9;gZ'>!$HO\sDkkeI:PF7POP>kBOP&"lp"nee`Geh$;I7.OY~>endstream
|
||||
endobj
|
||||
% 'R21': class PDFStream
|
||||
21 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 282 >>
|
||||
stream
|
||||
Garo<4`A1k'Lhaeq%%\L6ALY8U'*qh_8LrdOi:$(KRD?*8H&:**Z.b>b0om#jEp;N+`W9^((Ka[0jPG`5jgpPS3h+tP%!hp#0[3`4u,EDk1Q%Th4eq@4BobWg]]lOC$qAk#m58,FLmfYg;_6H?7&-A[*][q42*hUZCO7P+CBPJ-Q`-!K316Xpgk59RFoP%Oc4bH'%-SR(DZ:6=Z80:dq^b<p(P&o$Ul`#CH$h0H`bMBU,,7T[f/bLntYVhla#'iO05N%ALc3k@,o$!+:N]!SiU1[~>endstream
|
||||
endobj
|
||||
xref
|
||||
0 22
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000233 00000 n
|
||||
0000000398 00000 n
|
||||
0000000587 00000 n
|
||||
0000000760 00000 n
|
||||
0000001039 00000 n
|
||||
0000001318 00000 n
|
||||
0000001597 00000 n
|
||||
0000001876 00000 n
|
||||
0000002013 00000 n
|
||||
0000002287 00000 n
|
||||
0000002412 00000 n
|
||||
0000002584 00000 n
|
||||
0000002769 00000 n
|
||||
0000002897 00000 n
|
||||
0000003061 00000 n
|
||||
0000003430 00000 n
|
||||
0000003561 00000 n
|
||||
0000003875 00000 n
|
||||
0000004187 00000 n
|
||||
0000004499 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\2514PW\375b\346M\037u\307 \354\014_\254) (\2514PW\375b\346M\037u\307 \354\014_\254)]
|
||||
|
||||
/Info 10 0 R
|
||||
/Root 9 0 R
|
||||
/Size 22 >>
|
||||
startxref
|
||||
4896
|
||||
%%EOF
|
||||
244
z3c/rml/tests/expected/rml-examples-022-paras-oas.pdf
Normal file
244
z3c/rml/tests/expected/rml-examples-022-paras-oas.pdf
Normal file
@@ -0,0 +1,244 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 4 0 R
|
||||
/F4 5 0 R
|
||||
/F5 6 0 R
|
||||
/F6 8 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Helvetica-BoldOblique
|
||||
<< /BaseFont /Helvetica-BoldOblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
4 0 obj
|
||||
% Font Courier-Bold
|
||||
<< /BaseFont /Courier-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F4': class PDFType1Font
|
||||
5 0 obj
|
||||
% Font Courier
|
||||
<< /BaseFont /Courier
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F4
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F5': class PDFType1Font
|
||||
6 0 obj
|
||||
% Font ZapfDingbats
|
||||
<< /BaseFont /ZapfDingbats
|
||||
/Encoding /ZapfDingbatsEncoding
|
||||
/Name /F5
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
7 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 15 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 14 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'F6': class PDFType1Font
|
||||
8 0 obj
|
||||
% Font Courier-Oblique
|
||||
<< /BaseFont /Courier-Oblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F6
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page2': class PDFPage
|
||||
9 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 16 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 14 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'Page3': class PDFPage
|
||||
10 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 17 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 14 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'Page4': class PDFPage
|
||||
11 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 18 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 14 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R12': class PDFCatalog
|
||||
12 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 19 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 14 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R13': class PDFInfo
|
||||
13 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20121218153938+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R14': class PDFPages
|
||||
14 0 obj
|
||||
% page tree
|
||||
<< /Count 4
|
||||
/Kids [ 7 0 R
|
||||
9 0 R
|
||||
10 0 R
|
||||
11 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R15': class PDFStream
|
||||
15 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 1376 >>
|
||||
stream
|
||||
Gb!#[;/`4!&:T\)s"JS&S>tG]Z='o$LJ+h::.j9rRAVMfCO7f.0Y">lFT(m'>n"/uI7rq*=!b._n'$1:bVq=/2H]`eld*Ngi')hKW=:b>0ER^U#2o[^)I?eLI=7s<.+l6pUGhY21H_nNEN&2eJ:VWA&?]I:l*goopjNRD-md*;6jad]?[egC#/\+tr(2\=G^YjnR&YYug4V3MJhceC-j7aNH@qlL>^`t]lN9d%'WV<Wl4XKZ:7W^JWn7g]p`bT[Dr@1NHkD8_bVjhl5U*$;Sq]lM-(09X.X3CkGe3-9r:kl#($mY8^it/pTSC.N19`?!UEL#_0MY6mn5TR^<t[K'eTrhTa<TV@(<O5+6hO0n!]1dcOUa8(n:K!If<d\T5_bH*#Uk4X^U@D_HkQUV-5e"mg@JH4beFEcn2/+!%.pasJA;BrAXlid'';ONb)8,Q?\\Fq8g.3M?h13fO?"Z#OXJrCKj,M#EISm=\V,7"/t[$-8*PPn7.Ye]\CR&Wo[jqB:>eLJ'UaUZ&P42q)k0.@Nd<R!UZE87gF]T?Om\.[ef!e@B[UR\B=b3CAD\j/0b]q("hTbXA;dsQP?A:K,ECfo(M_p9>'rqCYu(q]GPe&IR2/P)/IKJR:fhLdC:%tskb1HdfiT(M+LYoC(WsQ@gV%ndU:_$a<9AIZH"6PTahbRc9q1X\TV^d7fA%P6l;8Kfa%.dr$4Eq\Z5-=PV=N>/1jBsn@E]oP@.Zcogd[ZT&TT^[>-&7uS*Ar+dY04:#$Dk6ZW(W>9_H4269NH*FBZ<`9ToPH6kASN;=?4Q1_#%#d)Vu&4lQW%:^5nL*21"GfrofkG16h'=#Jb"U.D2M@[]g+bOu?f:AEUYYDU5XPXe%["#Eu!ljuW>]b$,MGSB#Y,[6]+m(i(@kIDW'gb\,.gmtLGg`ngQCXW)<gNco[9c5>"Kh\.LGXn;4q(+o<!q4E)A8ELUps:Ck4?$l.cSQB6EEAan5s(l>F)d4oIUoHOoe's<e>_Q\4jETE)"=lglS1&TZ#3.@*Y\nh1pDg@@h+H,O"$bT]<Jn>n4,BC3G6GPhbN+D6@C.BC0cc,R")p0!7tg?Y`!NEY(!A)]qs4;F;=QRmDdsBfJ"B:/U+f1<!mbhApc2ulB_&IWpD^DGKhWCb]QP,4HmOT*SeKh:VM\BA&7>5m`IZGO1k.Q-3%X#f;sbfSZW11W#50Z[b^,)?!E1l_dR2Wa1l&1rM-oq9TQLJS6hFf"paauF/lY%XqL<*P\g1Z;eh[ifOemSm^M<Do!#4q6QW'B(!NFUl`Wlgr/KBTUJ:<]*7Vl$YN&kN$e.q;3KsTC-@^bmQ-*X5J#tLYod6:rGNt3kP(&Tc[_\]N.Sf^4b7+U+=8r?W\/nK~>endstream
|
||||
endobj
|
||||
% 'R16': class PDFStream
|
||||
16 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 1469 >>
|
||||
stream
|
||||
Gb!#\9lJcU&A9%PIi,,>W.hY<Idfuq/oGDHKj-Mk:VG-k,r))A=/>,W^V7%d>`+b;;'M:8Y[PH'jkKOlc--Yl_87k*IQjn7Xoioq6\-uuk!0(^&DY-@_<&YnQPXCr!VPLlUVnm&\3LEAAp_H4i)pfu.i<d4j-JN7^O[NMEk(#HGm"fZa%qZm%)HQ^ISgXu0/$4BRJ[gY,sm.B]>X5I'>_@Ch4,THfkTbkV%tViYZ]J#=MQ25[l4AeV6hquG5S_-dl\id/0fDl-:sH>I%BC2BCK!t1k-UFMhc7i6Pf\@aUL/lVtYFcHpNfl@U#B+/PV=r?u(@<i?hfG_P\\V5,$gI5,>M5c(c.]CGpCWENn4:LT3f<6g1lD>&XmG(oI^I@^g;8!5&NO3H=+p0S?Wjh$qBtcYsW83uCuX4+c;b]aQQs;p0Qg-,VehE`*&^0l,:8hXTt8lIeGmNL<eCLq/^<n78'5+N,gk;[=Pi^EjIS8$EF%M;U*V[5/Z!:]4.SgfB+M5DR+B\gh@Ya*'dn!*\;C7L_qZ7N#a[oer4P<=8ZkNDhqsN_KQk$O3b)OeSeq8a9UXRf6VpM&Yj(HMn#BnKgMkeI&07"sfb1VTec6#Kf_5bjm_bC5q`j:sj`%7'o-)MF/u\7hhrMTefXt@FebG5=UIr*>2gc]o#ZOG%<HSF8QM&#;PCP77+_C/Aa<OIYQB2alA6S<9qe.Y"h8_EFY%m\TJK4>/GTtWO2j259A5ki95cn*/B4Q6do2<.NuEfV):Pl:H7N\a$;mmf0nOmQtVrpi&T)L(lI']SekU-pnjjZA%i2qf=[:uZYO*t3]S=!oB:/EGsT[\OC03T$B2LN3AoHR+&G/&+X(Ul5h^!ST\UiSnGKWFfOS=O@'JMlL("8f3jE8mk*>Sp4WS"s7nH$.,N?:!hVOj!6E:=R:iUqk%>0Ff<`/SVeD5]A?Rmll=4tENI0o!6+]5q-!X-uuIHOJceE\3gdEDF%"?Ur8JC_k-[FuP^K+dO0)9s7h:rhPts!,>GWP75=h]gTrN$0Sc]+^@V@lQ0?V-Hi9R28bLB3%jQM@[7;i?;)8EZ*]Z7Y9@$6n:V-gaola=_Z4*pi2/S@?,QQRkT[8l)M87--GFG"aW,#kp)i2]fTT;+?qC_R7hR=[r[iX^?<q<c8ehu'JGdNXCI97%#JT^E2X?MbWF.m0!]mA2c<-@epqCHkh^b<]LG7;$7c%C<#g7d[;%LsOEAY_[)Q3%i_f+S2;4V<YHg6,:35'.N]Ff+@>D@o^VP:cC8$#SlusKZoiL0fK+4h7W;FVY)67uKS9:o2HWt0_B+[X9c;8#aBs66e66(&oZa58)hp8u`'mkXMLftFQ'BH!OHi'fbr)PaWJQH+4Tm+K_.mQ(s)#0,M1Rp\gCg(*2)/M*Sh5blgdD%.lM>j9_4&#LMHbPTmak:/]b&+=a[Nt.Ng3^,RibL<^]P_'\!\Q/*")Z3#;#~>endstream
|
||||
endobj
|
||||
% 'R17': class PDFStream
|
||||
17 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 1407 >>
|
||||
stream
|
||||
Gaua?D/\-!&BEZub'+]uhU#2?GLqmTlC0W+3JmI``&ZYEnn,]G\2?0WYEO"!rasbX5i<VcOp4=Yf/*#jfq1DP-kLc'rAe!\S-SQ[Oof2+9S(op%D`=)_<K'+V^HeM!VOt]US_8!i<$.Z0ZQ*W2Y_qjY^kU'LCsE*E=%3;-/92s'[SKDIUVRX"CE;H<P/$RHBNg!eD#/FC"qPU4O`sH'6'_Af+HM$[\K-8Mcs-p*C"?Tq":HcNfpA!')fsbcqAIS'sKm2@;e/c]a^4i)DL9H(X/Won876,'as:DB.tst=NDI'+uol<Z'\/AEAU<(,*=5-ToE_<MNU$TSlDl")rR+>R-,ZH1oXaoj6kGuANi=.J?&T)(Vn`QJ3q)l97d_$APSS+,!YXPJ@Aqac'Qn;.%-(*bRJ7;Dk_aS\l57!/IA[An?u)R3i$e20Oj5aesCnqTik;jFWu`UF(s.4IHn88p/S,ekQOglDHj(lC>?kZk`jZ&fgcMEh9+m]q",G8h%fL^(M:cF)*:#S*]nnJ$2t`DMip#42!qE/4a:Cu-ts's7?[D4Ub\boTJZEbOsk=^/&\%ZZ+NX@1Ps;&a+N=/W%8PJn0oK..<6;#=%:dTgEk2G`87<1A0/]SS]MX1raU8s4<ao9aYQ-(pi=(bTX$UKBOd(3rc$_^*nfG47?3Mj(udCNMJ7kt<*;dpUc;[37Cklu@1#S`ce"")nBr$cBHsp]<gbm@Gq:;T>$R=6o+W7O1msc&=l?sPONosZ"#*qPj&96#YcPS#]RefWJVA;^S/,6;j&Pae'[rUF-oItsX<!Z??n-UCFfh#?Af;71^.HE/Bb?+S(80]qpK[05GgRhR[^"l&T)Ea;"L*2oi6h^\]Y>Kt5B]W'Yd&I5.NTd&/O!1Qq<3"SWI[#UnYuD\Cq+o:hnd<tp]c6;\EG2j%BL!Z5Cj7*dfUn\91NQF\V#N'*1I7h\&a*perMR@khC1a'A)^!T?)[S2K\j*-E)EeK]c_E8"2k7*1I9"rSLr6lQR5iRa(UX/`>dVpY4)L$I?cFpLFX,;G;$bJOtcSlB^)\?m0dC[Q]/dUU[bT`%oR_*h%(*2O/-FS+*T%1)tPueJYGBfRtWPX(&h[S1*[N%'G>7_S(OS2pKXf8T!5S/;J]+NA0AEjdWm@NW'7cTB3kPY[,%+"39ChG%pJ>.;\/O3+O*7CFE3`<4hVM]<;QASZ<3HF+02IPcOl$6.Pdo:B]sKH?4,K1C<=<&P%0*g3+3$M1@Zm98hJNm3`*h,?]rc[VL">(HfW+a5&6ZY!7m1MfH*ud?KDp,bm3TET?Y!*_E'%T'6k<&Cr%)r(PRU;+3!jY'-DT%!-"1G`8E$_?;`+l8pCd5c<6OP^7C.<,r8>ku9&:6)T[8g),f>6eNA#q6$\+:/Cik?ots#~>endstream
|
||||
endobj
|
||||
% 'R18': class PDFStream
|
||||
18 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 462 >>
|
||||
stream
|
||||
Gasaj>>N*i(k#bss)=]h:8;=d$4Lh`7S-9-&a?&DgF-R;)r'lVgD5ZO9JgORIHRup3Su9:-U4@"3!UKb3^Ws8_.On7A`+dqF5'mPQKBSdTK#R!T&Cq\2LT6tE!Hf&kCMf8hHreFm:chYRMM)eg'V)gMc35$^d#XgFc3MA($JT(=I6OVTf;2I]`>IU7&q71Ff;@?37ih]M)s>]Tlt.C1\ApC<4R.kX0PHX"CX$=B]?7Z`IX*?Odtn/aR+fqVGu-[4$s53.4sQc%\KX.ijjj]%;'120[%hg"fekBdO5c28jB&\_3m4?KR%]uHW+4<T<)&Vh#WsXoO3B@.3-f/C+0(/HX:D8jCF0Jjf4[tk^tYJrA+[sn@orh7le6+jOc3p\Vd[]g4i`KCV?@ijBrqF2i)dVh0W"e9oj4L02Y9OcGN>iCEc]:l7cP#[R"#RD(\[k/k#6QPd%9.bc/(_~>endstream
|
||||
endobj
|
||||
% 'R19': class PDFOutlines
|
||||
19 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 20
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000269 00000 n
|
||||
0000000434 00000 n
|
||||
0000000623 00000 n
|
||||
0000000794 00000 n
|
||||
0000000955 00000 n
|
||||
0000001129 00000 n
|
||||
0000001410 00000 n
|
||||
0000001585 00000 n
|
||||
0000001864 00000 n
|
||||
0000002144 00000 n
|
||||
0000002425 00000 n
|
||||
0000002563 00000 n
|
||||
0000002834 00000 n
|
||||
0000002967 00000 n
|
||||
0000004486 00000 n
|
||||
0000006098 00000 n
|
||||
0000007648 00000 n
|
||||
0000008254 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\\\235j\236!`\255\002\350\332z\003\317\346\3325) (\\\235j\236!`\255\002\350\332z\003\317\346\3325)]
|
||||
|
||||
/Info 13 0 R
|
||||
/Root 12 0 R
|
||||
/Size 20 >>
|
||||
startxref
|
||||
8306
|
||||
%%EOF
|
||||
90
z3c/rml/tests/expected/rml-examples-029-keepinframe.pdf
Normal file
90
z3c/rml/tests/expected/rml-examples-029-keepinframe.pdf
Normal file
@@ -0,0 +1,90 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
1 0 obj
|
||||
<< /F1 2 0 R /F2 3 0 R /F3 4 0 R >>
|
||||
endobj
|
||||
2 0 obj
|
||||
<< /BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font >>
|
||||
endobj
|
||||
3 0 obj
|
||||
<< /BaseFont /Helvetica-BoldOblique /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font >>
|
||||
endobj
|
||||
4 0 obj
|
||||
<< /BaseFont /Times-Bold /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font >>
|
||||
endobj
|
||||
5 0 obj
|
||||
<< /Contents 12 0 R /MediaBox [ 0 0 595 842 ] /Parent 11 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
6 0 obj
|
||||
<< /Contents 13 0 R /MediaBox [ 0 0 595 842 ] /Parent 11 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
7 0 obj
|
||||
<< /Contents 14 0 R /MediaBox [ 0 0 595 842 ] /Parent 11 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
8 0 obj
|
||||
<< /Contents 15 0 R /MediaBox [ 0 0 595 842 ] /Parent 11 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
9 0 obj
|
||||
<< /Outlines 16 0 R /PageMode /UseNone /Pages 11 0 R /Type /Catalog >>
|
||||
endobj
|
||||
10 0 obj
|
||||
<< /Author (\(anonymous\)) /CreationDate (D:20140724022809+05'00') /Creator (\(unspecified\)) /Keywords () /Producer (ReportLab PDF Library - www.reportlab.com) /Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
11 0 obj
|
||||
<< /Count 4 /Kids [ 5 0 R 6 0 R 7 0 R 8 0 R ] /Type /Pages >>
|
||||
endobj
|
||||
12 0 obj
|
||||
<< /Filter [ /ASCII85Decode /FlateDecode ] /Length 3047 >>
|
||||
stream
|
||||
Gb!#^gQL=$&Uekgs.QLaOE#$:'ec;[7m$7:SFUQ@f2IqN^H`JY_59aA,],&=T@4oOJeCLmZsHg]'no-;T[B+Ti&ER6Do_bp*Je#ddSCA`3A*I4amj"-4hd[MO3aGHIf@QM\`AE+juTj,1kl%/f&M#C/.;UfkAtr3d,".T^N4o'`reKI]V,"q.O;^/*r[p==7f),ltu<d`Bh52a,flf2l#lOkKacEc=^Ps3'R/pC?@,2:qiH`)u??V]f1aZi;s+Q=o7j%1Mu7""742:43^g^0KabD2dbiUB+p@4)#[5@hJ'GOn+H*7BcqoT7hPu^'B6Xi]D1c@ji,lp!,biWDWg-jWg+\#.]9I"NbL*>iesUn-'6(1PGCn9K$l4Wb)94@mn)RLZ8bR%GU<U(R(H?e4r](JE^#ua0BWJFCDbr?HkiXsj_6LNRSpL/>""(olG!t1@[6:PPntpE=FQAe]t:0DgM&q816te2dKC,BUln'BRkg-GMUJ;^hhk;3\J.K3)tVp'A?69n%5^ZO_rjp3H&tUKB,o0"M^7"d?*]bf;N.KXe=qK]Y6l*Z1OYH.<.YF>ngMa.Ct[#E^i7A(q2Ot*@@bCo1.+gCh-X(HX+JmUi#\ADe-9l:8,!3dUQS[]'Ps*HXg/3rm,1#3!G*HMA=`mflp;NC/Z`I_kCkN52@!%=08u40"$DHO<f"/@<H4h::(O]H9#JAi[G0/c4#u'?nD@t,5.p[[!etEdISngdI&GP2S7-;.LDuPN+d0/_c/h**;r(,H8RAV=WsuC"QKqcohgCXS@b-d]-5%N52$o:pI)(L@PC,8;67!S=ab25O_k^kLBd\]fP="<fiFo4A1<+;Hc?(]s757&9O*nG_P'2sTQ>0eXBZ#jt(iR;A'FX]5fL[Q6f`]=NY5hNC`4@uk"J1-Z*cmTJ@>6r:8Ke?O=`"qq?sa\bQAo;>Z3\17&%pa;]BU1E@qVo6Ut)Fco0OLCk$$iu;AiuIr"d7_c>-EMh+"jNV@Xh*qMunc&4EUrfGq0/9WA3!`@Iu,-\inA%$<'#aIUCm2?[JSi;=L=@ok3s!g9*'cdb(BD"UbGn.fsd6BgFLVJO-_?>DIB=;3*S!q,-Ya@D6Z:*r*CRu9Z],50O?U%&quX=%#9b2BggfdcX-TusSF="^eCW=8I_G1sg(H(MX\X:2g%QCn-4_I-AogA)#j(UGLP8-FPo2t1J*Ej5n=bj-/QSb:=p_-,:taEL[^hMPG&P(Vk%B9H[/CNQD.-0NHCH3<`T9'<dE@p/^mNSD\(X19`&NQWt*,jQUN^f]6(+&G7P3@i:>RSQkjl%n.XIq^?En`79%?uaMt]LPO5?GX%RjJ1/K3M(dN!P'^"cWcT?#PC"he-+IO`\KLS8:jJ(Q3l)'Q,kC^RQ2$l(X#iD#`'J<j41`=pe)h_U(K\8fk;CFPZl^B1r<=63ic<AW%X]p8);5mgSG,qa9a>U0k^5=PP6Su,R^1BWg;C7ECjA^Jg36]NFKg,S2qm0YbOcDD##M>l9)(:E7@H67lcg;[\-*B>&@t..U=FK9):#hKr+CK"P4Ob*F!nS0()p\ecUcO829o^0-mspG/PDfNQUcp;h`,CS131lidX.`lLXKE"P7T/oTa\.fE$jg\t`YnP&;=Mjs*"J/ZfV6BLdGs`4&5VHc30Ygs?tuLN[3:O"BW0&;YK4&']nD=sNslNWbY+IV;56Hc36\C`>@B%;Z^1(9e7pmQYgh-l?+[agW)VmH$DSelLqhDs+Q:,BBd&@[bPQ6M'0!Ba0Lk$JE3Kc2)KC/Y%O<@,^`3c'mcXQ"drVe'hNSo:GM9d`SKCG1D/`IV`:C%/R.M-?o15l0.M8ms8VBK,oB8_sZmU#p$_0Vk&&(<=@^9ZW!c'[p#tdSt-(3p!+RCe$IL6m+(@57rL%hY4q52f:uQJHI8eBKH@gp?h`hBX[ab>2n.!kd\G8VDr/$83Ub@0;K(EjBWbjBo]FZsjL0Z@]fBBeakQWX]fCN(St,e>?mmo!MK?j`L&BfuUQ*JBXg/kCfYEfc<#$mo)s'k&qZ/=>-N"9Z]^OWpCuK[!@,dNKeu:ZJ/U)e@Z6Ke0)6&Y[gqG.qJ8pojKi)F:FtN$j81_c5i5\u7I&AM,%@pEJdSCMPapcl#\l[:No,E$!mpM4@CHhKP7-=VolXL/Y]-b7/Zr2HGS'``ILlXf#fg$Et&8P3^)nDAq!$#>Ik>"\'k@)'551[-dR"t@jqK.<ZZ7q>,Q9uNe_ElG7,L`q0<>&$OZb$siBD8iuZb%5?QhRn+$Q/Gj'/8:+gg=BI_1(C-e1^PMQ.1<.mBQroa9W3f0;Z(cANeY+N3nNOF^Xt,Uq;1:<NC$`XF`T;f:_95U8W`Zc%1f68=<6+Ngiu:^a\3Ukq4RZW^99=GE#lVZPD-T84115:Zkd:X"0isSP4hd$sQOCP;,/k(E=5Ed`,66r8=4C.9oZ!a6rDN=OfN9\3\B>WmAqsE/A;#\*.7#:,m<c@!*-jEc"j2$E=a*Sam2#q88,q(H]@g=kKG$EoF0KrdP[,QXS40*cTj%ag8'--Pk<Z)UJ8tDb_o0YgG4kB3fZ=b?O+#mmMKs<U7'14H#fJYO#)qi)rG96I,@+UZ^pSO<;EE\o6hNj]Ci]O%.Yuq%]IjW^bB8IeBU<^QTI;mnBnT/%XhJLO"la$G:Z?>W/4F`V_La3F6Z'epD2<h"sG%@]Y3(h0)r!DhV2@7dFWEoQ6ri?q%\h?=A_5$U^^5B%Y,C'o#8g0LNFk#b0pFQm(;2#^^k,X3mER#jGA:pq?P%+3FS1?T_\.ITDeW@XrP>o6X*?lt:ch,NGPU9^ejjVkFgt`qh-7%\XkKalLG_p>tuITZqFI8[tiV+/k0`BkB/(/A&r<ISbeMIX."i;iA/e73Z/A7KsHNXUm=X/'X^5')eL3YOcF@n%JRlU:4Fr:"`RRh;@#&@\:hP#[+('3aq8P+E?r_4LM:tC#8,lbjm.><^EE1r@7J3LZ&q`"V_*_^AhOso(CBoYdI*ubf/^S?'Y2:CI=3eKi=jX<!;Q%[kH>RYg%m2o+h1skKj,4Wl54L~>endstream
|
||||
endobj
|
||||
13 0 obj
|
||||
<< /Filter [ /ASCII85Decode /FlateDecode ] /Length 1190 >>
|
||||
stream
|
||||
Gb"/$9lJcU&A9%PIi+st3H,gaa>.o%V.]uGE8.0#OGbbZE_(&Qgnf4]MO@i/fqh)/:"oA=TI=4#Q=0-"p:WD'AeKpq-OHDV$h2U\?>gHI;V9Q^/>FM-n)2Iao&AX!,+PKkjSg])U=Jdm&!B;O,YOmp?U5aRY\dh=a00^OgRgF/-0sK;0-%g/nXgo_F:Fju\mNt,?qXS*r<V/E+lU&V$O+"ZPcn-0&sh33b&1]aIN(YC0>S44pCUPS'<Uk;2M[ko0]jU_.5]<@&BelW5TBi!F2fDYAa\NlhIK-fW@,=)lM!H0>3aH'it:e?Kg%VG!CFU?RDie6(LHS0#1h%_?noV#Mm\@.Kgo2!SZqTd8-oIeE)5u.B8*2W7*qWITPM=LP',Ief74X4<fR+p%ZoSMKsT1Ui4cd*7nK"dTauCo:hF_4@?08XYX_HI=$sMcK;Be;^(;Ds<D>-J'.$3'PD$R6$*a$f/4h=^d#*qqXKs^ol:\.SW)>-9O01u"6Kia(5XeSX9FBQmY)&d,?5REK3IZtu$A5A6nbp8T..-/D[3UBb.[HAT.%^\nh$V+S&D0m)F':4OPe-6-4b=^.6H]YOBen*89f'QSQ!'$5Vbj4g(m\fZ4_""A1*iaaCH*f=lfjC`^"+AT7B+@3#"O4G?sU*BB=t?&I2QSS9KmC9AqN%bOueAPOMVIU$anA6e0kak]bAX#mM?Qp&V$q7G^jjc"\usA(bb]D8/)6Ze=K.mQ&gs8rOYg/\qXCX'@PHW3=gcTCgU9OQ@5MHadH`FX:90Jp#RR=6c9e#V0VQOjWn>)*@\0;1e.5>Z@H4NB\3Ue`%T,ljRNB(GXhs1al&Pe0/fJlo<k,IN6srQ%B>!fIA]_KcXK8g>FPD#nWnb!/J_h*fi#nW*NZL.?-!rZb&OV*"!Y4R0Kt#dLVSOrm>PL*CnM-l_L%N`_E&C[%b=L(lG`lW;sPaQ7?=;3XhSX$rM/;"R6c<F#]g*E+fkm&6#(Gu'K)m-bg2,jZChrH@iOc^9r9o<&`gMid$LpF%I6`#XXGHc<^E44O3GBVSY$-ng<%;TMibhX%663+$,GY@8GQni>_sJeV[bnpjZf>]hjA6;h_>Z!%JoQ,eCfeNU/s:_A+[OGBt/puaU3\q;kIusj<$nd$nH`=XT*Oo9Q7=_I0TFkd6'(Nk=,!TB`;(kL4A1Qi_MF.$X!~>endstream
|
||||
endobj
|
||||
14 0 obj
|
||||
<< /Filter [ /ASCII85Decode /FlateDecode ] /Length 1117 >>
|
||||
stream
|
||||
Gasan;/_pp&:T\)s"MU/paVU3`Y_?cV,k:n/EN[#b=`p90GlEeQePg*jPP/nf7kWl9k,UVcbOqc2rDhK&CMqHs,.o5k8`>a7hEY$<tHZD!r3<'Q![kqIsL!^0glo"i[@?Y0a^=(pI'p!aKcMc0SFfYZ`jDa`;b:sL)c2,Dgc+-hYN^+_KZOaLttO,CU(cA+o`)D2suC/QPU:#lX1%`C-d!*'tl=.@aGD<*0t(tQaBqtK8ea#8E_7Dq[?L20uJ9\]mqMRe1q4mqZIQ+YSU)C't!m=2f`\!oerJX(RT)99;boNQ@;kRO`<f*o#=<@Enqs$R,rI#^ks_NBFXS<C*Cb9)$O#!co1X>kR>E^C',0)8efk+aA4W*"RPuZL7KMkUp.NJ/K"B7@K7>RV(2<^8o'G<B'tr&d*+dIU]`LsPpQFXdXusJ3>kZKZN-Z^[RM`W;3k>$SU0?9jaNKiB_a4\HriJt[HN-[CFBmp>=omX^3<YbQbAu=AGVl65'CdA1q'4j@,""8TP>`U<,JZ;aJko^-#*sJPj?82+AGXKR>Y)$*;Zg*4WfRMRZ^X@'6n<CY/SO)YB@1Rl,GP+h?c?mCC*Rs;NIC?U1b"ZA/-Xj4m95<c4<iK8E4&=@0<>Q(HPa6$O02BE[:0R2i`<0C5a$9D_4!$$.lD<aW.,E&3&U*_e3/h)&;%W\2q]N2:d4A?+"GIi<ltnLVW8Os8)DAG[ZbW0a_u63b`*6nN;]h`L?`W*XHl0B(`TL.bN+@PQNtIPTPL0n)c0a*a.l1hj.e-E8\k&>*9Aj4*X_tTK!8!Bq$b<=B5kK,_ra$ou,"al9$VQLP@)%)?m"UJeJkD(d`FKMhd$6_a$WjWh/#5Uc.^clqXZ%Gu*(80+241Y"."iD<[S!%$tMJ7D&ue-0^[i3Rb11E:p71;)5-NWAEd:QZG-!8=if+Xe"g&kes8B2jDXj7Uq6Bd"Q1QcP);i8['+hVAYprdmTC2'L]][%(tN_#eCak_!AIaDq$&<R+An,$V;,8cJmijR&2!S%G%od:N6-S"c(VsRr^Et0[qYYQR$@c#6Lh#SgjF#GRDe-S3#@6ErQ=ohj,O8S^o&:GE=]1mHpN:3F&Jdi:>k4he?#d~>endstream
|
||||
endobj
|
||||
15 0 obj
|
||||
<< /Filter [ /ASCII85Decode /FlateDecode ] /Length 3689 >>
|
||||
stream
|
||||
Gau`VD3*G]&cNgos'_"<W)GZ:bO7(;!kmnOY\fia2$O*rqh:>LRu&C?UpM*(f6;u!$Y@Melj_Bi8\?RB*6p\<bep-%(u`6Dq(mg-IU9ofG<Ye3=Du$JH;dq\KjWFb?[R.p_E8ci^SGLPhj]tYn:=rjj%m\OE]Jp:BE[W<#64Mng[T4^\:ZZj)19Lo`o2pUi=D^R$9iO&hC!N)`V_Tp5Jd1lB#<G4^.;Y?nn'R_9Q6Qe!b\$L@o+./(gG/Ubb2pcjXnl-o42C'W*R<B&WFi%TC+&acct%,AGfiKkO;4nRcAne:RS8:77W+1hQl!_g35^PaN1GA2X>ePON8f2O'HNj'Z$!Sp7V!$7d*#)/27+1,_R0)Oi_qg(WiSi^=%?SP0^=,D+e:%cd=*"*oC>@CqB*_[A1CRA2]lZ]?8In)nnQ1B!]UZgdl;ZHrfX;Z)>^,2J'?qDln*]%.59<r!B[Bd%I^m]*6F]R=mqhGm8;I:T?)Z&shX:73GUOeI^.kb=&W<OVt'Q";kZc<t3dJ5`bqSIPGNPc!X1/Tr1<"2b^oj:-N[Si,A<BY;=D4f?*YOKI?c+29,*o&0R,m+'MGo`7.*5#BTsHXd(AJR<[f.E!W75-lSb(7K_sbSD;%?">#*5LQHFC_F$TgkWIKZ'0`Z'9pJ9]E@MPap]^Mi16uJ$W)./LF-$]rcl<WjFue;s_HZ,a_)m[[_cT?4CYAmrST=FlX#GCN'N]e6e^+SSP1,p%:7#C<e&3u0U3Oo""(?IW%;)$!%-%JYLs\LN'!X\In-1]n>X,On$3Hf2Ca1-d*FPpY$sW@'FK!4I`GQ1s"7GP=r+i]L&$I']P8>9ob&YGP:2Dgn@=D3`WCJU/)XYAe#7ObJ&IIm&[Pn&J>>JssOobE4M55;@04K_>XHsQ6[Z>U$*Op+E+ZO1P^nLtF$4$mUn2gtDZ/'H>SJ[c31(:Q#PXl6Q[OfK^\At!*G"A2eX9N<alW"?Q_Bb0R5#3qp6J0Ed_/F_`$mrLK4ALm0j`g#93smdNKsqsP%,*VHn;^omLB`7<6l!JjQfm?6:AgU^FiCUsF;`-6@i1?M^Z7K`pbCa31f]]Ic@!d>r#d4Q2Nr7I#>rBB,PFjq=bJ]mes-[8!(Z)I)?3;5*N(;[KE*E*6?XI`.?gbAA2:;s"#CK\i?F>MS2<H3O1^%X@NfSD]s\-'"_Qjbneta'3r])IOZ0"ar#;X&K>b!nJeAQL6N_%,XL=/RE>nAN3$R5#aC%0i!MZ0b"1kDM:X)i!J5l&tf`\<<Q=0M:.*LaI@M^s,gKClB2+j/Y+?32t"/\cs0nk!R@tD\bSn[_S;f*_[YT9V7clsX!\kY^&,)CNQQ_BB!N`$]m9RV'd)bZ-4ihT5.%&[eS@T<t>-CJ.dUKA/q>p*+NME&n:GUgk2$ggb'Mpae2+B*o?#"9AD9Ug!Gn;Bu%h@W\A@?Y7B<b3Em7^QuW9-':ig:4Es_.i_E(X>F;7lIaL4H3HNJn'rh;n;!lB20FW)=<P8+`f,^);e"3&G^;&b\CBUPcRN!Ar:1j]8/iVUlZsGI3$QXU='`1]3cOJbbVZ!7,3K.N8fD?1+WX!e.YDBpl=OJN=WoD#=X%sHQiS60bE%SMINk*m6mJ30nkep9Bs_BI)sS$^*+7c_BCt4$MNTd.upmG<*)$:'PS04?G!f[Ub^]e-%^b?&mhYED%mC(7c^iq:C*JTHiZlC5U:ilGFOPh`)UT$e>B0Q-f]n>7Wgb`2e;8k2.)B`<lPoIm?da5\!kTG<3/<Q?_BDAVmNa7Se?X1=@*``:M5np_l?m,WEehn.?qn9,)pD@cq,YPFhT:+,m_6=P_\sIM)AK[Wa)HrgqY(V]!>pe3u[XHM[.8:/32YJP)KiC&:*adF!4U[S\JL%KLV;>\qG-KN%:X9b=ORk==S3Tguc*Yas6Nk=%XBfC\R9qgpYR436E/=aZ!eZ;s(L`%N1+?2!'&g\.2"d6$:_J-Q6.pc=nOoN)s0hg,.7>%"jki;G:b_Rc]pS6CDb2A[\;MOII0OMZ@j\5BN#OP[sf[UN<f)/L&;nj3TF`hBr[$7-(hW5IedZA;!QrUYkT<a-EnaPFo*l6_<9O:O<]?*O[]88pJ4AN)A_/Fj/MYbkuQD_Om@O0X-m3ct_F:J]>0]6S0XX;ac`#kf642!MG&bMi>opO?X)YM(X08:95GciCpc7M;L6h>(n+>$c5(rZ_3kXU+Xp@=qVc<U?jf+6fJka:.\I39oQf8)#SUQYD:`Irb:2/gsotRIPFPK9&W8UR1tr'Uts9uI3Rdu;11Cl_G,F4=->q;'Q6(+6'$Y$eO4D"3J6`H$<596$VXejQG0Yu;Jj]]^qU(NY%dID:5j]go/ehRGW#.0Q%k\[]kOef2d7o8<ZHN?^,5SMZUKe*R>c#o.;NoVE=<XO1"9[Bc8M#UoDsM4@^^H)8.#IX)qH!28rB5%iJ>m]`NET,\#TUD\iJ.(im``!UY-'A@W<r[%/-]"*GDFX18e"DI57$6)uV]Tds%k'?#pP5ac&<Kn'Qfe'!/!?4$M4rH&6=X*Ti)>'U!e(L)PP9FqOCP0Y9-`=`)LM>ao=WDT:+s5lHsgquaF>;\J?83R=8ZaZ_=4X\%OG@*_C0@1Ic3Jp5.idBhALDeTI.LMo^G`99/@K1^8*OL6q*/r1$f4F1$5`qN!*M>^(8$$EJOkSf^YbiLV+%?"*2O9t=DVu[!K)D@(6hYB>do^BQ3C#='H7ij(YE+A#/,!00=TaPWN;]C8jV[d9,H<tZhT>(<Gm<NWF-m(F*O2Or_Q9C\JgXqkC:Ge;8QI(,!\K^6CeSoo-TP+kS<YVDmB*rrmP3b4%qY2DqR$HI(9a<bN]=^,j)S$)^BH2\$R]*n1`)l9AB30Y*R]oM!e31o(ou;6^/8kE`95egM2Q!N(omr+V-pH*]<YKC4?7[ETC1D8J;U_8FpP!NtV7L-eBl`'1k9V#=GcO<"$^O+diWE40:?6XhW[NB<92.<PU8&@Jk9Q.)R3Vf-'S?BE%6XAMX>gSVFK!ifP[%eGYO5Pbl2C9CC,M')fW.ZRPIW';qketmh2_;jcBC!;PT[N5)>1lc$ZJV[S[^87Z3sm[?g&e_X7B6eaXpG^::hc+k0%Bp3;hI824:YFbNj%ucDO<^TlTS^H5*Hg.8dOI;4Sf0QL.O.iJQ3')lk&Zf(Y8![=oX,l(`+5PBda<`thU-ZK^.U"UOklhE7Q4:$dCJKb?2SDA63pU1/Q+c*(mJIA)oE*A3QA7012f#]bfGPg@6Tkp(!_']#tcGl9]82e\iD)[gDdd!):r$/*c8%FClM\9E""eHO5t'c1r!6ti0`T\n!4e2M-m9J&2=?#>QrS[%gbUNrOhlt>p\Q1$='d:@]id$V9924eeS[bu/_hY;S9;7BBp,2'-Qj-XpnK3E/e/LPZ\^[$nmiu!6JiRk.*)Pt5a^[jko]n9Hr)(48#kZF32ig_MmKtf9:L?6P!K8]K#cTGmL1p,SLct;m\*B"`%nf3(&%%Abb*LsRnV*99Ne)PPQgDcqQ7(D%'>X$Q0DNCm\[B27Rpji6Z:T]H.and#g\i[B\GGK-Ci7>\_gQ-1OWS\/8c?B?(bM>F[C21IrWghbgEm?tKGL^OYUrFTQc7US_o:;>!G@8]SO./,e1iIiuRHOS5Q(mRZSU9OFAtJ;UoAULX;[7&DFQrmsW<97P#%#%=+0sU;@/~>endstream
|
||||
endobj
|
||||
16 0 obj
|
||||
<< /Count 0 /Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 17
|
||||
0000000000 65535 f
|
||||
0000000075 00000 n
|
||||
0000000129 00000 n
|
||||
0000000239 00000 n
|
||||
0000000361 00000 n
|
||||
0000000472 00000 n
|
||||
0000000671 00000 n
|
||||
0000000870 00000 n
|
||||
0000001069 00000 n
|
||||
0000001268 00000 n
|
||||
0000001357 00000 n
|
||||
0000001594 00000 n
|
||||
0000001675 00000 n
|
||||
0000004819 00000 n
|
||||
0000006106 00000 n
|
||||
0000007320 00000 n
|
||||
0000011106 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\276\204\202o<f\200\344\260!e\225\353pm\217) (\276\204\202o<f\200\344\260!e\225\353pm\217)]
|
||||
/Info 10 0 R /Root 9 0 R /Size 17 >>
|
||||
startxref
|
||||
11156
|
||||
%%EOF
|
||||
408
z3c/rml/tests/expected/rml-examples-031-japanese.pdf
Normal file
408
z3c/rml/tests/expected/rml-examples-031-japanese.pdf
Normal file
@@ -0,0 +1,408 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 4 0 R
|
||||
/F4 5 0 R
|
||||
/F5 7 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Helvetica-BoldOblique
|
||||
<< /BaseFont /Helvetica-BoldOblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F3': class PDFDictionary
|
||||
4 0 obj
|
||||
<< /BaseFont /HeiseiMin-W3
|
||||
/DescendantFonts [ << /BaseFont /HeiseiMin-W3
|
||||
/CIDSystemInfo << /Ordering (Japan1)
|
||||
/Registry (Adobe)
|
||||
/Supplement 2 >>
|
||||
/DW 1000
|
||||
/FontDescriptor << /Ascent 723
|
||||
/CapHeight 709
|
||||
/Descent -241
|
||||
/Flags 6
|
||||
/FontBBox [ -123
|
||||
-257
|
||||
1001
|
||||
910 ]
|
||||
/FontName /HeiseiMin-W3
|
||||
/ItalicAngle 0
|
||||
/StemV 69
|
||||
/Type /FontDescriptor
|
||||
/XHeight 450 >>
|
||||
/Subtype /CIDFontType0
|
||||
/Type /Font
|
||||
/W [ 1
|
||||
[ 250
|
||||
333
|
||||
408
|
||||
500 ]
|
||||
5
|
||||
[ 500
|
||||
833
|
||||
778
|
||||
180
|
||||
333 ]
|
||||
10
|
||||
[ 333
|
||||
500
|
||||
564
|
||||
250
|
||||
333
|
||||
250
|
||||
278
|
||||
500 ]
|
||||
18
|
||||
26
|
||||
500
|
||||
27
|
||||
28
|
||||
278
|
||||
29
|
||||
31
|
||||
564
|
||||
32
|
||||
[ 444
|
||||
921
|
||||
722
|
||||
667 ]
|
||||
36
|
||||
[ 667
|
||||
722
|
||||
611
|
||||
556
|
||||
722 ]
|
||||
41
|
||||
[ 722
|
||||
333
|
||||
389
|
||||
722
|
||||
611
|
||||
889
|
||||
722 ]
|
||||
48
|
||||
[ 722
|
||||
556
|
||||
722
|
||||
667
|
||||
556
|
||||
611
|
||||
722 ]
|
||||
55
|
||||
[ 722
|
||||
944
|
||||
722 ]
|
||||
58
|
||||
[ 722
|
||||
611
|
||||
333
|
||||
500
|
||||
333
|
||||
469
|
||||
500
|
||||
333
|
||||
444
|
||||
500
|
||||
444
|
||||
500
|
||||
444
|
||||
333
|
||||
500 ]
|
||||
73
|
||||
[ 500
|
||||
278 ]
|
||||
75
|
||||
[ 278
|
||||
500
|
||||
278
|
||||
778
|
||||
500 ]
|
||||
80
|
||||
82
|
||||
500
|
||||
83
|
||||
[ 333
|
||||
389
|
||||
278
|
||||
500 ]
|
||||
87
|
||||
[ 500
|
||||
722
|
||||
500 ]
|
||||
90
|
||||
[ 500
|
||||
444
|
||||
480
|
||||
200
|
||||
480
|
||||
333 ]
|
||||
97
|
||||
[ 278 ]
|
||||
99
|
||||
[ 200 ]
|
||||
101
|
||||
[ 333
|
||||
500 ]
|
||||
103
|
||||
[ 500
|
||||
167 ]
|
||||
107
|
||||
[ 500 ]
|
||||
109
|
||||
[ 500
|
||||
333 ]
|
||||
111
|
||||
[ 333
|
||||
556 ]
|
||||
113
|
||||
[ 556
|
||||
500 ]
|
||||
117
|
||||
[ 250 ]
|
||||
119
|
||||
[ 350
|
||||
333
|
||||
444 ]
|
||||
123
|
||||
[ 500 ]
|
||||
126
|
||||
[ 444
|
||||
333 ]
|
||||
128
|
||||
137
|
||||
333
|
||||
138
|
||||
[ 1000
|
||||
889
|
||||
276
|
||||
611
|
||||
722
|
||||
889
|
||||
310
|
||||
667
|
||||
278 ]
|
||||
147
|
||||
[ 278
|
||||
500
|
||||
722
|
||||
500
|
||||
564
|
||||
760
|
||||
564
|
||||
760 ]
|
||||
157
|
||||
158
|
||||
300
|
||||
159
|
||||
[ 500
|
||||
300
|
||||
750 ]
|
||||
162
|
||||
163
|
||||
750
|
||||
164
|
||||
169
|
||||
722
|
||||
170
|
||||
[ 667
|
||||
611 ]
|
||||
172
|
||||
174
|
||||
611
|
||||
175
|
||||
178
|
||||
333
|
||||
179
|
||||
185
|
||||
722
|
||||
187
|
||||
191
|
||||
722
|
||||
192
|
||||
[ 556
|
||||
444 ]
|
||||
194
|
||||
203
|
||||
444
|
||||
204
|
||||
207
|
||||
278
|
||||
208
|
||||
214
|
||||
500
|
||||
216
|
||||
222
|
||||
500
|
||||
223
|
||||
[ 556
|
||||
722
|
||||
611
|
||||
500
|
||||
389
|
||||
980
|
||||
444 ]
|
||||
231
|
||||
[ 500 ]
|
||||
323
|
||||
[ 500 ]
|
||||
325
|
||||
[ 500 ]
|
||||
327
|
||||
389
|
||||
500 ] >> ]
|
||||
/Encoding /UniJIS-UCS2-H
|
||||
/Name /F3
|
||||
/Subtype /Type0
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F4': class PDFType1Font
|
||||
5 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F4
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
6 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 12 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 11 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'F5': class PDFType1Font
|
||||
7 0 obj
|
||||
% Font Times-Bold
|
||||
<< /BaseFont /Times-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F5
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page2': class PDFPage
|
||||
8 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 13 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 11 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R9': class PDFCatalog
|
||||
9 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 14 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 11 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R10': class PDFInfo
|
||||
10 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20000101000000+00'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R11': class PDFPages
|
||||
11 0 obj
|
||||
% page tree
|
||||
<< /Count 2
|
||||
/Kids [ 6 0 R
|
||||
8 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R12': class PDFStream
|
||||
12 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 2195 >>
|
||||
stream
|
||||
Gb!#\lZ:NE&HC$LreE(Q^nHU+GBu:A98BCkVBM$h'KXbQ<U@%C/F/6?`sjio[s.QlSKG,<KOtE8REat;]>*1VgIF4Wr8F+<-NMJ?3-``"$h/qemB-ot$2j)W4SZGX5d(LP4^&N3ldfj]^ahV(@bjCh6]Wtk-dXl'Gp6Q:4U5?V"^K:26Gat*_`f&qdkI&tKNGKh3\,BirrE%^Rbbf$CV(RE\_oJO`m)1;)-F<\m0/*"5ZfX;JIjHZ=mR_%@M/Kq9`iN0!lk#@i3SsZ.<pGnD+fCppE5Z=Tp;ebj-n`/d8kRZl.IUk_8a8CES4`64'Ep[U[h!D7^Fe3g+)n:K!QEUS2PB"P)&14qVHmkkE"UB$8R!k`=dq5#&uh$_WupKqkGhQqh<77Lf;CVQ-@)J[18B[0B,1VEA7iZ=J^9ZhTEl1!dPAi"jH"9"CVbQ1IWon(/@@q>I>(&[`7@1^/UtpGo#NJ7qlUe0HHfqs5G/XUN@^/U/`a[1SQS;Zt.)Imgco;bDCm?Y0A=*Gt@!T+u,4583oWU8^0HVb`*&JrV=r^!>\d(+E8qXS0;mSki6A"*4npHVrup+XtPa:>*6?mY&E66PtoT<#n^mYfr,/hO,2iGT:@PfTT[i;@Cnp@Ja!?aCsf<%fci%TH(rhI<h&th]nXQQ@BQn%%[SqJF"$OiLl4Yf=HjnB$Md6;Oob!$/<33=^33:4-sm@!)J7qr_Bnc8=VlN/6E5o+R*3NO&gCo"\>*XR5-uk9,<S%97QJ[KPt(U@TbIpQ%,WR!BOX$A:pL<t4I/Q$;JH4,m,s04@om$^dXnu6?=P*#BhL+nCW'MsP;kjo`<c5#&5K.F2&Pc3e#jCWNtfSC'0rEEU[YL`qCG(sP*km]GA:Zi=QCicLRPj.9V;X\E%!MibnQ'KR77m#lDHgBPlfVi-#@Te>0k<.C+'>CeskhL!cWS8FRuJ<VdPS;N:n/RWDAi:EW1R`=PW.M^?KqR9Yfdsf-rosapg9OQ8iD\bJl2bE8tZ_::L&,?(/59R>4gt%B\HG1UkJIc)6OT/]-;mr\FI"CYHJ*$faEVjW*)jMOrCBAN"H7A4mZQI7:FdA!YoOAnLYa0Sid4HQDI]Ks"4DdK;DE4(=77L\)s%(1%u)0G8[_]#"_dIt#Z!i+?l5+^Q<%X>^AF\?_>cS`](#iA>#ioS3)VCFceuDqKUi7Pt\t63g(XpYQXkTFB/*rB]3uag/:hF/1E]hq=>\ZSD()T*XWgq@l\_ZdIYEI>QTi4FqeiJl3tWl00sr$dUWffr8e=p*g(%Z?LlHV@gb&gTQ_M+WI^sJg-ZVW*rMCEC_"E&!C]gU6_YiNZQm(76-`[\J#WSj:JTV"H`sA$<;H!raBFIc<kOBN)cboQO'iHEtC-o/)58U.6H,3BuF@F:j:mE.u1-@b-]]dIidt%K$FhtVrSZW0Bq2(a?JX[D0F<9FYVu@g!'5m;je=G2OhHBVK99*[=c*(Z2qc\=6aLl:[)>..nOp+k#+t\_=dU;s$oI`3IQ2G7[(7t@GSX7?O9-(0`,CJ+&bcaXYmV"[tQp&2O+_SR>Q'>R9s[-WCln$Bskq\6^:ZNY,]qE@??1a9&F235T)>@r?Af/>=ks,\\Gd-kYRj-'(TFs&o&"b@^XXN8V4@_^SQ;qKij=fJ<&h[IQb5@8[W7iQYR"3JL@sl8Qh\*cn9H`;R4h>Flh!()HbY2Oc`]]"Qio-.FW&_emEXF[3!_L6YB>Dd-9K*<8J:PH'PA_2qG?O4fW4A)=*/sU5hpYaA!"5ep<,VhUpn8NI641R&>\d,#d_5@\hK'<o@0bTEjsU@*W3@\ap8A9PtK@1cXShh6@RJ(+J=:NTb38Gg88=[J^=7ai)EfeaZ[J%0D!'fEb&NgECEK#dk`Y*<U-*CG#t'75_@f/aA[1GH2VkTJgn\X-`kd<LK8sFL<lnXnkOsLqJF*Rt5EQ7n8qV+s3,/I1GkS/)[La`BLak18V7YouhNPSn>$eCjBC$@j?oL`Ve[-'+BHb1_.d;A".0PRVBr&dl925HjR4nH"^8eoY=kf'SO$Kql5&?$au>fH'Gr-G5n"59;>""*lQ(.0:/-Pds+!@EN@aco\KEeZq;14jL>24,r="l_dt140dpeToli,lD,@llC2(DC:?+5A7:R52*H`9EBdgES`S[cG\77n29ndN5C##PYBZ,B"SHeFCp^bCm(Nf~>endstream
|
||||
endobj
|
||||
% 'R13': class PDFStream
|
||||
13 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 620 >>
|
||||
stream
|
||||
Gat=(?#SIO%"("ls$351fs%u^,YRjc2KTg5FQc4OF9DH((/C/J:9qgSp@BZSNT6h"#7NL#%Op7s#DE<E*qK).!IV7n4sD*MFpb#X"ni9eff8gC7m8;N1<p1uoKMFNoZTZ8PFN=tLgV_MgjQ^G2]!^CjgKp6DI/ZK-4,EG3E].DjgKj.?+o+FDnnPfIClC=+3AsPM&K(Q2-ujpP_E*$ls1c*'LHP>'gcRMPB`-)35b2e("/HNOh/E=EO5inpf14B<Z,^G)#N:d_OSWiH0(gbURTq6D[<*%bLqI'8)_(cje!GT9^?_?,'nU9TT/r+Jnbu6OS4lJUG-sqPeH,Zo0a7f\f'I_h&G$]pr%1^H.r,NSa/MrmbSkEKudO7hCra_<X_o]3Q(*h3OENpODW4G5,N^<prQ?Y?A<<q=bV^Sq@j'b%ec4NY?$*N&+BBA",3g'),sF1;6\J(r+IZf1<^SY$rm],et&Hg1?C-8[(J-3@"PKfq.f`u=*Ki8JYM%r5]nS0?S%YQs3CLG3O#Q1ZKNCB3@N,!AH&3Fam^!78W&aJ0&(m3IHK$t?9=1hXd'5Ae]c#t(;+rQPN*hF^=tVi$TdIM'0\g>Sac,/hWtK'UVD*08lb~>endstream
|
||||
endobj
|
||||
% 'R14': class PDFOutlines
|
||||
14 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 15
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000257 00000 n
|
||||
0000000422 00000 n
|
||||
0000000612 00000 n
|
||||
0000002586 00000 n
|
||||
0000002759 00000 n
|
||||
0000003040 00000 n
|
||||
0000003205 00000 n
|
||||
0000003484 00000 n
|
||||
0000003621 00000 n
|
||||
0000003892 00000 n
|
||||
0000004007 00000 n
|
||||
0000006345 00000 n
|
||||
0000007109 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\223\367y\354\321\362\222Ju\262\315V\3448<\372) (\223\367y\354\321\362\222Ju\262\315V\3448<\372)]
|
||||
|
||||
/Info 10 0 R
|
||||
/Root 9 0 R
|
||||
/Size 15 >>
|
||||
startxref
|
||||
7161
|
||||
%%EOF
|
||||
86
z3c/rml/tests/expected/rml-examples-032-images.pdf
Normal file
86
z3c/rml/tests/expected/rml-examples-032-images.pdf
Normal file
@@ -0,0 +1,86 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
1 0 obj
|
||||
<< /F1 2 0 R /F2 3 0 R /F3 4 0 R >>
|
||||
endobj
|
||||
2 0 obj
|
||||
<< /BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font >>
|
||||
endobj
|
||||
3 0 obj
|
||||
<< /BaseFont /Helvetica-BoldOblique /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font >>
|
||||
endobj
|
||||
4 0 obj
|
||||
<< /BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font >>
|
||||
endobj
|
||||
5 0 obj
|
||||
<< /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 178 /Length 1411 /Subtype /Image
|
||||
/Type /XObject /Width 223 >>
|
||||
stream
|
||||
Gb"0UiGP,='S'';s.qeOeY4UF"6S=OQud^VCBG(GAs5(Mq#LHqz!.Yq<s82TcJHLP^!nSlYP70?2'IOd23dfJf\^<cWS+iH4,V=#!e$:`T7.<d6Ua8da&gqCMPI/8">2geZEKZVI8P>SL,u4;@s+9g9d8,SQLhc2(:J-sJNFI])PZFEUl#\jFZ:_%H@=C9X?_UKa0Wj?1:5?HkVFOtls/RGXnij1t?P*/Ms#N@/']`,Yeu3e8.XqB`H,Ve?\nNbgF'Z7f6#n!CFcKDIh]1_dM6hN!kFaiXko%U^3tRG<E1L2T]MBnP\&VH]GM0lp2C+@.1=olW)pa^b/eiFE^\Ug\(9>\g]Z3$MB`,9i9XrJGoM]17i_6L/21+5lbA=lt\JOF7T$&q7)X"q&hVu(.<lODNT?uWaTp7FEa]?^I@oHug1W>c*@+:TS>IP#9BnDU+gN\NplSpJ`F1^nLSn&\FF46C1_\d(SG&c6YTAs6tb48Et&uPp)JSl't/>"A@SB?5\b]2@Z+"hE#Z6WkK(/00gMc5qSUl&*=]Lrm8Xdld-EQXG=A)jq(;D9e"=]..-:1`urrsp('auQElasfuDlP?B%PI(+%la!<QLQtf+e7fi!XdgoqmEr6#U)#8W"d9MVEQXFmZ.liF#o'dfg<'^<&uR9piF8;m9\R#iV^uP^3_j87>$[Z@Uk?!n.[+b1a8*kUSFgeTcFpETSKi-WQdE0N]"d@!d0$qgEh&V#fJW\D=c#0LZkN>O?uDI#X*c4!iNG'U@X['uSQj@U6hm=r&Bk'2*H<jcq`7jcouOm8XQBBWlJeV#MAJJ9UkA54]/U\)@RGWp+K'Hgl(IcDAEE/IR9pt^8RD1X.pPT7"e-=K[bcdV]qAgPZuSW]26"p0M?41CEbu-Qp&D".SKX"mAEBVnj#8mUUo1.uP`(_j's@bZ8I'C_Lm-DiK+TKu>^TIOS2>9"'6+X;lF10\,Z\:oiZq?:)r`,2M\!1NPNs,5+\o1Rq?]E,;QY'JihT>)%)g7jh*0'O_oA4pF7u`+*7Y"lT>\h`6RLWtc<$cQgr`4)fKWm^-[USDZu)AAYm]^k0[>+t_m!i&chrZaGGuq@[a)'%>PYJaT>D,g4cnF_r-P'>^5hLE[XS-*Ut'd[XsDEkSl;e[[@<2<l#%O)k/12f6.7Sn+/]Z_aOqk#9%,:4Hgn^cpYutH>I-;%eS]G5h^+#Lk]K.1:2/C,akYki+br+a3&??\%:R>h=7N5qB,B`qc;*\32R-FM$Z;ZU[*EXuqO=6"EDC5.El9u7\pM)rVeCL+EDEV"r&-^D/0Em29BO*"!tWpkK\T>P]00eV3:JLHSuGsl[F%d.B9=0JM3G<b8Qt+!/THr>3(Zc5Ua8da&gqCMPI/8">2geZEKZVI8P>QRz!!(@;#AOfr/H~>endstream
|
||||
endobj
|
||||
6 0 obj
|
||||
<< /Contents 12 0 R /MediaBox [ 0 0 595 842 ] /Parent 11 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.0ebb4782cae50a6fa41cca1aeba0254e 5 0 R >> >> /Rotate 0 /Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
7 0 obj
|
||||
<< /Contents 13 0 R /MediaBox [ 0 0 595 842 ] /Parent 11 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << /FormXob.0ebb4782cae50a6fa41cca1aeba0254e 5 0 R >> >> /Rotate 0 /Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
8 0 obj
|
||||
<< /Contents 14 0 R /MediaBox [ 0 0 595 842 ] /Parent 11 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
9 0 obj
|
||||
<< /Outlines 15 0 R /PageMode /UseNone /Pages 11 0 R /Type /Catalog >>
|
||||
endobj
|
||||
10 0 obj
|
||||
<< /Author (\(anonymous\)) /CreationDate (D:20000101000000+00'00') /Creator (\(unspecified\)) /Keywords () /Producer (ReportLab PDF Library - www.reportlab.com) /Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
11 0 obj
|
||||
<< /Count 3 /Kids [ 6 0 R 7 0 R 8 0 R ] /Type /Pages >>
|
||||
endobj
|
||||
12 0 obj
|
||||
<< /Filter [ /ASCII85Decode /FlateDecode ] /Length 945 >>
|
||||
stream
|
||||
GatU09i'M/&A:TVIi,/?L+5&eJ&S@a+r[EnPm[<5".,!18X=8,_7M$gIskt\Fo[)X$3YD9SWEMWBANn"kth(e\H+ZCi,gS:6r5F#,XDLN-%%5_U\jT&gEI1hgEI5?K8g;6cQg;0E$c\<6RXiH\c-RdrOeLbJ_%Y3WuT!33.fKGI3Vf!o<p9B1:>WSm8'CbKAr*@GVpPm0T5]j+oa+8Tg?3Y1^5A6AU-VDrFtIkS(0;Q+XBbAF<3g9.uHLQa`6sR(Jn7X"=i]0p^[5`738I2.grLWBYh%cXP"`G\:Z)"f/A#f"N>J!E0N]ehpmV.pF,YJ\,f7!#trtnlPNTiLI\#sr7,g0Z#1qd!OkPK^m6*9l,kkAb$mfsg.ifiUm%A@m0T#_L'9oep:HWf7B><*g^K^J2ETQ\Fs&uRCX_PU/0[n'\km.9dhGY@Che&7b7ZDW>FO8pJ\T3@a9JrQ36asqI44X?K;?n@^s\VtJ7=LG)RWI"'aH9BMRk41Zg82eVUS'FKr/-,P[/o`i62rbDXFs-Cu_6MMVm1BQ;UXmVFIR`eLRR:\Z;,1fag>?CF[#[4I,!J2,iep8N7/t:QE^jRcV7t0+:Ej\7\h3.;MP;6k>`DU:>9:jo$YGO&"l8g&*U`+N25CRH79p0b%^&P_ge].3pNV(o7PUKc*/)DHcn/2eAtD%-\FS9X[1R?Jh-]$g-X$loeW<NhU`.mt,nHL[;?(&6YSO*[;ok0MM=DN'@*"1jah=FEPMG3/_ft9%.taFhu1`F</YBPF'4C!IM7#KO7:+C3Wtu_a`VHLu>2bmjrCIChY>-o7138Q8Em3=r;XA"I#[J/(!K2CDjQaQH3u=[kGD>@:B.[[4;JDdM4F%&pZKFor'hGelo3>>jnSdiO3!t3)PefrUp;n.ULQZ#E-73/_1Y`O[^'_0Vi4Cab!U^.lrCSkT>'2m$d~>endstream
|
||||
endobj
|
||||
13 0 obj
|
||||
<< /Filter [ /ASCII85Decode /FlateDecode ] /Length 725 >>
|
||||
stream
|
||||
Gb!Sj9on!^&A9=Y+%GOL<iXbYq79U2W`E?']:21^BS(f:85*Mlb.k.#+crOIW)E:$@1qmcBDgnO-OBn?Ik4i_$K+8]2ff1^6bWUKM1kd:53C>9O6IqB33X*6S<:=fGlp.I@5K,FK9T9T/!rJI^#S!fkE'KFi,N*b%;uB)p[G^kCCTl`?+A>4C0S:0>KEE[Ihs<c:FA"F*/F1PA!oZYiA&^C[dpjdM`pBVdXX7A(Ms"V,*.fu%4Q9B4j,c&<*a<6"3S0O>jOV[X`bJ?Ae.Q%FAnI4L;Tl>2R$,>"1&'l]uiUQ0MS>0cI>Jpc32%rr2FK,jhi_08@i>D:Hi*YC@HQfMjnneXr:4B8*dgGC6h%s[8YYncBP`Cj@YL1lf<b5PCJ_jFf)(bF`&pQ.K7Vn-Y&C'(`0DQe,%F(edKb@Loq^Lp@-2UEB<VoqGDf;E,8`$3<924[^)VR`<F@obVG7l%ZGWg2biu$/-sdaKhPBN-ll/"YEWQdTpX797<p.9gmZ^VBq7[G>^M(J;Z<@=Ms):/@R2uga>6_:GUA3F6]%$DFnA5dM1,("`8O*pB5trH=G,*8,W^i^N)Ue`X+B:&SiYnKX$Nqio[6]^b['n&4_7,5%JJ;E2cXn_-p,//qLY's:)%6`i.+,k6&I*(p#"I_gL>gsXD5R%M"XoXp/dcplsQ?S@E(AGB.')BDZka`h@%3L1r+?#_u,"HDP_sLj>W\\`7P~>endstream
|
||||
endobj
|
||||
14 0 obj
|
||||
<< /Filter [ /ASCII85Decode /FlateDecode ] /Length 722 >>
|
||||
stream
|
||||
GasJOd;RJf&B<TXomc`^*nI#;,\beo7jb/kBgWht`(OI-jO0DUG-E"8o%3>H\kuiJC)a-rkI^3[q2uo_:DTR&#@&!g\&j`n-lQX>A;T:MT8MmoqfEHl3O3eKj]Sm8c>b$ip;tb+jF)c*R\K""qf7%IhgO:Q+Qr8K85FK:aDlds:@&7U6!%A2/X5m_EtmM.]T!s#V\>'54FEK#^KRdK#nKnQo-hndek9$aUM5\@h&gB0jK"pu>"YQd4G]SGUh)j/Hg5nfDpU"3&VPmt_T#VW/R%+"86B5fI=eZ@OWT8!P42F<+BTSZDfJFX'N\n-mEE'3lsr#a5q"_gPL,G2K;Irq7,M4O>bpV5ad@B![<H[5'KThGjW>sd.n,Pg`V$HUf6UE9C9k,8AV/FWgS"spR!!@G>;8J@E)_@1__`oK2,QhpU6Q4KW,nYW2"i["$iKrfPS`S6-nj/T;Z:K%N!+&0^CdfX8;o8,Y_Zftr_ohJi*%q8)N)HXbi$keCLsL)Gt!^RPY+hcS>50C.;[09NnBA/Ll7$0Um15ZXS=9^keK%!$\PppCX&?f)'p5jT;k4PNR[#ulqD@1P<@glamr?%77CIulT)tY,s`J05;Z*=i+*j%DpOL.V:0'@EgM*-"8N'APV_n2C.H)_B^`(MA-Vc`Xu(d6"`k*h)Jcp/c$+=%lTO6m,%3i+iD16OJjII)lpgIu>/LN=34s:jQqj4Q$&(.X~>endstream
|
||||
endobj
|
||||
15 0 obj
|
||||
<< /Count 0 /Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 16
|
||||
0000000000 65535 f
|
||||
0000000075 00000 n
|
||||
0000000129 00000 n
|
||||
0000000239 00000 n
|
||||
0000000361 00000 n
|
||||
0000000476 00000 n
|
||||
0000002084 00000 n
|
||||
0000002346 00000 n
|
||||
0000002608 00000 n
|
||||
0000002807 00000 n
|
||||
0000002896 00000 n
|
||||
0000003133 00000 n
|
||||
0000003208 00000 n
|
||||
0000004249 00000 n
|
||||
0000005070 00000 n
|
||||
0000005888 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\223\367y\354\321\362\222Ju\262\315V\3448<\372) (\223\367y\354\321\362\222Ju\262\315V\3448<\372)]
|
||||
/Info 10 0 R /Root 9 0 R /Size 16 >>
|
||||
startxref
|
||||
5938
|
||||
%%EOF
|
||||
118
z3c/rml/tests/expected/rml-examples-034-cmyk.pdf
Normal file
118
z3c/rml/tests/expected/rml-examples-034-cmyk.pdf
Normal file
@@ -0,0 +1,118 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 4 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Helvetica-BoldOblique
|
||||
<< /BaseFont /Helvetica-BoldOblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
4 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
5 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 9 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 8 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R6': class PDFCatalog
|
||||
6 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 10 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 8 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R7': class PDFInfo
|
||||
7 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20000101000000+00'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R8': class PDFPages
|
||||
8 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 5 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R9': class PDFStream
|
||||
9 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 637 >>
|
||||
stream
|
||||
Gatm8d;GF-'Rc%,IlNL'1bieT,S,7d[VF5oBjHju8UYT78[:=C)7-Jq5MHl$?")u\#TK1YO6q"LO!+er6i9%'!LF\\?4da+X8lZ06["HMfm*.14RtK>135HJJu$TC"F4/u@S&7LB:+ArZ5k9!Dm&>k%p-h?D/e*CN4;.H"521"ChJISN^kCOSW_VHqkaNLVrLXpbp-mdU;_@Fe;jlE">eeHMdh+5>F.p\/M$p\8\g]8g?bB6^8oUI(j0<`B_W:t5#WU-Fk(gb6a%bX>"u<qVM8q-`p'0(]YF:A)0JkX8t03qRTn[@mi0N86i.KSYd$He)NFTERsZe=Kn]@L:p3kDQWON08f.s,Hn)h_EP2tW)t7n4it^0nV0TI<cF#&=.3Gf/\[3Hd"*E$?7f50cPuJYk\V2Q9E`(Fj8=ja>5M<aqpD:"][?^Mu_OBd9mIT/o((Y3H7!Pl7CdTd=/TSbPPnXH0g>5UZ:-4(,_F-PRBodPm%^"JVm*&L(h.ialoNkr/rbNsSKTli$Pa9LF,\&Sp17Fi4U0]GN'%'/I=2QF)TLWUte53@J-)&MRW#us=k4$<=^e4ilYp#[EIXX,ET>u\aCIlp*A#9PmqcuD&L,=nqpp'<>2E^7O@m'Si^Ljgf~>endstream
|
||||
endobj
|
||||
% 'R10': class PDFOutlines
|
||||
10 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 11
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000233 00000 n
|
||||
0000000398 00000 n
|
||||
0000000587 00000 n
|
||||
0000000760 00000 n
|
||||
0000001037 00000 n
|
||||
0000001172 00000 n
|
||||
0000001441 00000 n
|
||||
0000001546 00000 n
|
||||
0000002326 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\223\367y\354\321\362\222Ju\262\315V\3448<\372) (\223\367y\354\321\362\222Ju\262\315V\3448<\372)]
|
||||
|
||||
/Info 7 0 R
|
||||
/Root 6 0 R
|
||||
/Size 11 >>
|
||||
startxref
|
||||
2378
|
||||
%%EOF
|
||||
150
z3c/rml/tests/expected/rml-examples-035-numbering.pdf
Normal file
150
z3c/rml/tests/expected/rml-examples-035-numbering.pdf
Normal file
File diff suppressed because one or more lines are too long
150
z3c/rml/tests/expected/rml-examples-036-numbering-contd.pdf
Normal file
150
z3c/rml/tests/expected/rml-examples-036-numbering-contd.pdf
Normal file
File diff suppressed because one or more lines are too long
150
z3c/rml/tests/expected/rml-examples-037-plugingraphic.pdf
Normal file
150
z3c/rml/tests/expected/rml-examples-037-plugingraphic.pdf
Normal file
File diff suppressed because one or more lines are too long
375
z3c/rml/tests/expected/rml-examples-038-rect-href.pdf
Normal file
375
z3c/rml/tests/expected/rml-examples-038-rect-href.pdf
Normal file
File diff suppressed because one or more lines are too long
359
z3c/rml/tests/expected/rml-examples-039-doc-programming.pdf
Normal file
359
z3c/rml/tests/expected/rml-examples-039-doc-programming.pdf
Normal file
File diff suppressed because one or more lines are too long
139
z3c/rml/tests/expected/rml-examples-040-colors.pdf
Normal file
139
z3c/rml/tests/expected/rml-examples-040-colors.pdf
Normal file
File diff suppressed because one or more lines are too long
155
z3c/rml/tests/expected/rml-examples-041-masking.pdf
Normal file
155
z3c/rml/tests/expected/rml-examples-041-masking.pdf
Normal file
File diff suppressed because one or more lines are too long
445
z3c/rml/tests/expected/rml-examples-042-longdoc.pdf
Normal file
445
z3c/rml/tests/expected/rml-examples-042-longdoc.pdf
Normal file
File diff suppressed because one or more lines are too long
161
z3c/rml/tests/expected/rml-examples-043-headings.pdf
Normal file
161
z3c/rml/tests/expected/rml-examples-043-headings.pdf
Normal file
File diff suppressed because one or more lines are too long
150
z3c/rml/tests/expected/rml-examples-044-codesnippets.pdf
Normal file
150
z3c/rml/tests/expected/rml-examples-044-codesnippets.pdf
Normal file
File diff suppressed because one or more lines are too long
150
z3c/rml/tests/expected/rml-examples-045-cmyk.pdf
Normal file
150
z3c/rml/tests/expected/rml-examples-045-cmyk.pdf
Normal file
File diff suppressed because one or more lines are too long
82
z3c/rml/tests/expected/rml-examples-046-lists.pdf
Normal file
82
z3c/rml/tests/expected/rml-examples-046-lists.pdf
Normal file
File diff suppressed because one or more lines are too long
502
z3c/rml/tests/expected/rml-examples-047-condPageBreak.pdf
Normal file
502
z3c/rml/tests/expected/rml-examples-047-condPageBreak.pdf
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
172
z3c/rml/tests/expected/rml-examples-049-pre.pdf
Normal file
172
z3c/rml/tests/expected/rml-examples-049-pre.pdf
Normal file
File diff suppressed because one or more lines are too long
96
z3c/rml/tests/expected/rml-guide-example-01.pdf
Normal file
96
z3c/rml/tests/expected/rml-guide-example-01.pdf
Normal file
@@ -0,0 +1,96 @@
|
||||
%PDF-1.3
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
3 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 7 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 6 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R4': class PDFCatalog
|
||||
4 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 8 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 6 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R5': class PDFInfo
|
||||
5 0 obj
|
||||
<< /Author (anonymous)
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (ReportLab PDF Library - www.reportlab.com)
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (unspecified)
|
||||
/Title (untitled) >>
|
||||
endobj
|
||||
% 'R6': class PDFPages
|
||||
6 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 3 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R7': class PDFStream
|
||||
7 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 115 >>
|
||||
stream
|
||||
GapQh0E=F,0U\H3T\pNYT^QKk?tc>IP,;W#U1^23ihPEM_TN+I0SHG`1,I?72-)Cc1tON^#g$)nn4:gGa]Abo0?Ql6do6Up;@(YOlVZU%!W]l;'T)~>endstream
|
||||
endobj
|
||||
% 'R8': class PDFOutlines
|
||||
8 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 9
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000209 00000 n
|
||||
0000000372 00000 n
|
||||
0000000649 00000 n
|
||||
0000000783 00000 n
|
||||
0000001065 00000 n
|
||||
0000001170 00000 n
|
||||
0000001427 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\232w\017\3421\263\325\354R\366\267\025H\343&\012) (\232w\017\3421\263\325\354R\366\267\025H\343&\012)]
|
||||
|
||||
/Info 5 0 R
|
||||
/Root 4 0 R
|
||||
/Size 9 >>
|
||||
startxref
|
||||
1478
|
||||
%%EOF
|
||||
96
z3c/rml/tests/expected/rml-guide-example-02.pdf
Normal file
96
z3c/rml/tests/expected/rml-guide-example-02.pdf
Normal file
@@ -0,0 +1,96 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
3 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 7 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 6 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R4': class PDFCatalog
|
||||
4 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 8 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 6 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R5': class PDFInfo
|
||||
5 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R6': class PDFPages
|
||||
6 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 3 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R7': class PDFStream
|
||||
7 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 276 >>
|
||||
stream
|
||||
Gat=b5tf-M&;BS,reF!=lClsslL%g-"^sPBq#dmiD(9C#P:=*ChD?`,i^knYR5]%*T1#6Ab^VPPpBmCBKP[;VODWN7*O/[WnQ$FrbI_Vq^"ju]<pQiA^+@^7r/ODNdj;$>;9^#$V<ebUMCh+^p>IPPr"Nca)#fcskJng+n!8eMj5!TUSGa)9oYISX*d'uM\qYNb]#g14\ULflGQ2-#?ps=IdGT^DXrDd7K>Bi!81gL*J_44RepZQPi$C>kM9_r+?1gM02ZCOKZM4R7HXUC~>endstream
|
||||
endobj
|
||||
% 'R8': class PDFOutlines
|
||||
8 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 9
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000209 00000 n
|
||||
0000000372 00000 n
|
||||
0000000649 00000 n
|
||||
0000000783 00000 n
|
||||
0000001052 00000 n
|
||||
0000001157 00000 n
|
||||
0000001575 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\2514PW\375b\346M\037u\307 \354\014_\254) (\2514PW\375b\346M\037u\307 \354\014_\254)]
|
||||
|
||||
/Info 5 0 R
|
||||
/Root 4 0 R
|
||||
/Size 9 >>
|
||||
startxref
|
||||
1626
|
||||
%%EOF
|
||||
96
z3c/rml/tests/expected/rml-guide-example-03.pdf
Normal file
96
z3c/rml/tests/expected/rml-guide-example-03.pdf
Normal file
@@ -0,0 +1,96 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
3 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 7 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 6 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R4': class PDFCatalog
|
||||
4 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 8 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 6 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R5': class PDFInfo
|
||||
5 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R6': class PDFPages
|
||||
6 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 3 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R7': class PDFStream
|
||||
7 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 1150 >>
|
||||
stream
|
||||
Gat=+b>K96&A5Wts"MKH,)Y72]ojREa<BI`!+UTo5DV%ZI""O'BiYRi!(E/g>H;I\[s*S7!f;CVI86+/B+t(<<IrRP\Hc]"KukX2:WB0eit:\4r"tLc/oBW$h2/<$_Aas\.]GiB*]b`YZ@ib?oB#"A#*[`t/_mGqi*pd!pb8=(_4UPs!Ns.BMN9Ie$'UQ@1n:s?d.bD.%nPnl=`@2@3+X*Y+,'?4&ZgsRPR`;]F?Ji?#fcClF*2IhR2Yf41g9Ml<g630jZo=:DWZSpIF;8u)qhb"H9@?5S5d1'fpk_oY:bu4j'/"+=fF-X:#39:[;12*h&%FtW6)Q*jm)2dfE\U-H="a'96m9Q\)3g>3VCgt1TaBg_\XM$S(>&,X_r!E^9L7K&<_%\ajo&KYn&bgoXpF-QL[L,DEg33k,PlR;t%eu?/[k-5.XGN`kM4'hb::.5#ECaD)^cfZW"A^hSO":p[c@ul&1EkRj21CR$ibT+.&6.%BBA3[qcbG](^o_[UDNoa_GQl7/5RDeQWL*=lC*%32bebm&>#^H"+g]cJd9o96K@3M&R\d;AeXZi$-W)A\O*t=q3*-lVc8p*c4_XgPUg+);X#`p8MkBT-ST-[k?4>erW^ja)tO3A0%31R<cp(V5@Zae;gOe'bMt&I;92!<Mlj3:"cCCe]0%:P]9up*E`VGHtH]*FfB.Y?Sii`R2:;80b>/LUO9dXbTEJ6f40T8hUH"(B^POl*UU'GF;B4%A&JS'#0`utbmY(H[5cf_<pb;Z0^YD7Hd`H;7n<DgVin6afl[+_W9jVW2s$"E#>Tg*7)r6G+lq"\o7D^`FWqB#`*oBn%oUl.8tTDrK8o+'$s9(_:>1;<8%CB@K<J7ZSr$G5#,"oYHC>Q[_U>S?#GdXW'JL,mF@pr2YslL'J>/',P*!L)<]qEEIJD`$Tbpdb@WWWJd7l#,k"l>'-lEdR9LMA7'FogBE%9Qf6X=#la.0+a/@c<C_.6Lj1/lV.3MgC!bYDs=<,>X6@f&2$gGc*BQr>0HWFT,40G,2!;`GMT^o:GlUdDaW;!B;AJgH\@=JDrsWLQj9HcL^)L%Xt19>rX!HQ]-8gT7#KGHVqpl6'^jh8/m/EI:=?l$qItg%Xc%OhqoBS<U\m;Khh&.c#gKkTANfcRf~>endstream
|
||||
endobj
|
||||
% 'R8': class PDFOutlines
|
||||
8 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 9
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000209 00000 n
|
||||
0000000372 00000 n
|
||||
0000000649 00000 n
|
||||
0000000783 00000 n
|
||||
0000001052 00000 n
|
||||
0000001157 00000 n
|
||||
0000002450 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\2514PW\375b\346M\037u\307 \354\014_\254) (\2514PW\375b\346M\037u\307 \354\014_\254)]
|
||||
|
||||
/Info 5 0 R
|
||||
/Root 4 0 R
|
||||
/Size 9 >>
|
||||
startxref
|
||||
2501
|
||||
%%EOF
|
||||
96
z3c/rml/tests/expected/rml-guide-example-04.pdf
Normal file
96
z3c/rml/tests/expected/rml-guide-example-04.pdf
Normal file
@@ -0,0 +1,96 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
3 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 7 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 6 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R4': class PDFCatalog
|
||||
4 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 8 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 6 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R5': class PDFInfo
|
||||
5 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R6': class PDFPages
|
||||
6 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 3 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R7': class PDFStream
|
||||
7 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 1054 >>
|
||||
stream
|
||||
GatUs9lJKG&;KY9nfRQ2-o/F#rUQWu,WJcj!QY^i#YbZ*P*Dgqr-``Nn$nCk7V\trmAmMJH$9+eiu"WaO(j)Nm?ROP<:<$hAZT'A/)r+WQ5AiHE^%+)chOU%chRu^=\!,X<$aOT+#*JNf"0!`VioVG\Q<]%[YN,@g)eb1bDYYf>2H4>]Cm/<rm#/3q(,\aI8G8Z=&I]5@u.[oPDWDM777ibUZ0o$9FprfFqM<Af@[)5;+5>+]"d"m_lklFkOROd8V=j*.ps!2d0'K6LggV?T8M3R^A_Xa)NAT+kYVR:N@!^r*^:Q97'Y7Of"Obm%i;<C3m3]P-D62'8NKMg`S*psM("ZN4&_J,qpMRP"2Q9C5R@pnQu@2iC;L"/.#.4(#?'$&q8Q-hU]iR>VDEcpkk5*S,2[M#8OTi$lSUUU<7.ROHbWB9\(egRnb2LW*g(,tO;co=HiT!k[K%Qc;(Rj^A1F);?5[:gIFoMu@h]:bEeV,g+@)(1=o^u8MC"KJ`QH.ZJb!=BB=$?`Z?3])X5fb*3g?9IMV/WGSZ"mf7A!n[N_<f,2eg!9kFF\n6Ge7K,&76DM(!Op-gmA%aU9/u?`:$Un$D]LHM+dp(pb'`O?MBbPQ?\1('Q6%;(Su64\^%Y=YS(@@n*^g+a^^L.0C9@/.,3!U0'`*H_R'!\\EJr*B/[8F["G`1tgSL,t^u?`G>ul6R@UpFC)^MV;U+a=3'rlh:JC`;-nEd0cV&7@YsF`La@*3M>0KAqKY@)CK#["#`[/>`JPc3m0+<\r+BJg4?_)ZQ:/Y(,dMl$Jj_4,QXF='@QdfoBeZrJ*fH;W;@dY?5(Z<L>6lF0>V$N<.6NZirrK.UIth]6L2*?PL,9oOQkC*&1##;&LVaba[Bm&]RBf]a<bFp-hgC]]0pVa003WSZ1(r7I:5S<c3$lH(Nq5ZoVQr)g0c"N;\gN(-(s$<^]VZ_^p#+sX+,D2JEZgMN3D2au3I2fB&D;aTh`I6g)P`F(9L0Eq9d71S1l8HDKN>#KfJ.)d=Gn?ZkMDO*UZcPXdW^H>J==g`!F4TF;#~>endstream
|
||||
endobj
|
||||
% 'R8': class PDFOutlines
|
||||
8 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 9
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000209 00000 n
|
||||
0000000372 00000 n
|
||||
0000000649 00000 n
|
||||
0000000783 00000 n
|
||||
0000001052 00000 n
|
||||
0000001157 00000 n
|
||||
0000002354 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\2514PW\375b\346M\037u\307 \354\014_\254) (\2514PW\375b\346M\037u\307 \354\014_\254)]
|
||||
|
||||
/Info 5 0 R
|
||||
/Root 4 0 R
|
||||
/Size 9 >>
|
||||
startxref
|
||||
2405
|
||||
%%EOF
|
||||
118
z3c/rml/tests/expected/rml-guide-example-05.pdf
Normal file
118
z3c/rml/tests/expected/rml-guide-example-05.pdf
Normal file
@@ -0,0 +1,118 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 4 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
4 0 obj
|
||||
% Font Helvetica-Oblique
|
||||
<< /BaseFont /Helvetica-Oblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
5 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 9 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 8 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R6': class PDFCatalog
|
||||
6 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 10 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 8 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R7': class PDFInfo
|
||||
7 0 obj
|
||||
<< /Author (Reportlab Inc \(Documentation Team\))
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (Example 5 - templates and pageTemplates) >>
|
||||
endobj
|
||||
% 'R8': class PDFPages
|
||||
8 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 5 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R9': class PDFStream
|
||||
9 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 1281 >>
|
||||
stream
|
||||
GauHJ9lJcG&A9%PIi.h=>sO:H0?\\kco)7G]1!?#5kdlD[%rEh[3QL=rUh1&[M1*p9fLaZ%9aNZ3:B!?B842A5GVTF!oQEK=+:i*%Rb(TT'\i92dAl%ahQ<Hh/lQ3@W$re5Wi/%^.jp0&j5'ZIF!&P$#S9%]Ds40qppDdG42!=3U(A?U,A=I"u;`E0JMar=91en!c`aD/J+h2iVE1V^'oBGL_?(\J#>`S)>ITjB)"nS;aAM/.[mYVs5l7r^-VBQ=GQ;RVn3b8p(%XQCk!<\DrrtJ(]F_9MZpBKNZ5?qmZ,qm7_R&dhHj"4CMAP5m9,\8$Lmpin@C%,VIY$K",YEuY(%#T+I(?.l?$kRI,5"]_]!"LN'T!ebt>*G/L7]s>DTE%/FGc[*N3DMR;Ic.0p9Q@UtP4n+eO26:b1,59\>fb>_CI/b_cU?73tYSXYNg'K`!lq:BGOs)V$;SLg%^@?gl7V#3!EE/Fc3i7N',!/B%fBF"T?X<.dHq71]W/N:.[l!6+f1R:U&iJgiS`UjrjC!1R5+pf++amSEcl6OrP4KS(5(EqmFa#-2>bKVWj=mIQ4#EE5p3Yks>Oc_5j[A3o=8]$+ZaF&<kPN%IXpVW5Lr8M4%-1+k'MbgnJQr2!8"SQ4kNEf;Q7EL(AUlgA\OB.JPQ3e&.?@R]=4%@)d(6<5MoMEe"#6@9L',NUehBTfU<<$BSd$G<3%P$)R"5fgT3Tus=fZ$jF"`*&65_A'AqN`+ePGTm-H"RS?UI62^uMWCd/8u8d=oc"c`j":609H1Y+0roCjH2`F:-;PgDV8B^:a$6fCpj0Vq;VRAVF:0hL;&UrsNI!.$+e#B:Sl%X6X&lT,lai%EC-q_B2i^q('U?lSp;Ij@+=gC<FuHG\P!Y:PG"V*5F\6VXV1jS-1thLb`s8*jj:1:@BHp9DD]eTG=Q@/>XDskl20t&"GcVeT%aGIB+7&/ea-s_4mfo6jK8a8BM(-IpeL/;IPt8@PbeOCU6*p:BC<l(=HD+3ci;Xd<H>B9qB2?KR)"_kkJoLtK$?L9<jW(8@lSW0"$cU^;8YZ@L[:Q^L*V9+OP+#=m4^R_g<MrqX.O"K\nm='jlF%pW,5)O8+)e>Hhno>YkgjjUl48F_jjU&Cn[dq53RcW7YVm3!lYsa*B8-YM8<YD=Bia4`K^f+rH/WdPlDe;Km`2-@=Xm3'%Gtoso6$(aqjHc=f.+*fUL-X?hEb-C#6_k3/bd:s-jo[]=,N/K93tJDal+0c9?7%-=+V*>(";H"80c!eFRg*Lf=md~>endstream
|
||||
endobj
|
||||
% 'R10': class PDFOutlines
|
||||
10 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 11
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000233 00000 n
|
||||
0000000398 00000 n
|
||||
0000000573 00000 n
|
||||
0000000752 00000 n
|
||||
0000001029 00000 n
|
||||
0000001164 00000 n
|
||||
0000001482 00000 n
|
||||
0000001587 00000 n
|
||||
0000003012 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\375\011\352\002\224\227v=\274\333;F\316\275\372\251) (\375\011\352\002\224\227v=\274\333;F\316\275\372\251)]
|
||||
|
||||
/Info 7 0 R
|
||||
/Root 6 0 R
|
||||
/Size 11 >>
|
||||
startxref
|
||||
3064
|
||||
%%EOF
|
||||
118
z3c/rml/tests/expected/rml-guide-example-06.pdf
Normal file
118
z3c/rml/tests/expected/rml-guide-example-06.pdf
Normal file
@@ -0,0 +1,118 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 4 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
4 0 obj
|
||||
% Font Helvetica-BoldOblique
|
||||
<< /BaseFont /Helvetica-BoldOblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
5 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 9 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 8 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R6': class PDFCatalog
|
||||
6 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 10 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 8 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R7': class PDFInfo
|
||||
7 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R8': class PDFPages
|
||||
8 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 5 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R9': class PDFStream
|
||||
9 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 807 >>
|
||||
stream
|
||||
Gb!#[?#SFN'R`L25@!_62PE$PS.DW:&(O]pdaVu8VEJSQL8KQi->'4VI^VVB3cLW,QmPWB-]ZN`k8mt_"?cK'qD_[\>UOK96\&!(EZj_#61PmW-H![;E'UjQ,75$@j`Gq&ds%kgE$4$a]B/+39=Y`?'!%iW<==e%I"7poH((\L#L(Zi69n^dCA86R'X&[jLZFF!rMmV^62Osrr="c;5b_\/"J13^ah`5A<s<2;5kOp5$./C_D_<[#$!n+co;i'XYF@Ga'NiNu2qetheH0/b,Oes[@06jHlCu3k;:S"8hhpq:7-#WeGF\1MV,pn"?GZu9`n5bP35tV*i@b(gE5.]IB"UN&iGFdjemk&kn@b)*$OtU5G*MW\joVTSkIY8V3f-`&19h'u:CJsHmkKa<C#e]K:W%,K.>LF-L9s:7o:hb-i7dTl=T]#mI77)1o6R.oQ&&R)7GK&FMJNEp&6879/^V'>K?2('n34KSTnM^F%tbue]hdD2=Cgki!c'OUlIg\J=gQ#KET#isLE.(*-cu4LY(/Lrd&V6lSfp9U4bG%#PJF&eJRfJpj!)K0-WuHY@a#@RWka[!(T7dE@'sfS10gM8P[a/r`?\3qp<!<#'"]*u41cAo%IZU'i($!qdZ6Dl?n4tW1]!5t/5HH/3M+cXIUn<t3)SHd$XMb(Vi"^=g#H\A\ESLN:&Jj`[Jtb:28Q.Ng!cg?lD0TJB(g<uSJkJ$nTe*]VXgjr_DA0ciL(EEn-uBOim\n(E`(&VZ2"SR`CK-!T-d4ZjB.bPjPT#\a-gUTb#TA-`Ss-)%)]n')8`'T~>endstream
|
||||
endobj
|
||||
% 'R10': class PDFOutlines
|
||||
10 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 11
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000233 00000 n
|
||||
0000000398 00000 n
|
||||
0000000573 00000 n
|
||||
0000000760 00000 n
|
||||
0000001037 00000 n
|
||||
0000001172 00000 n
|
||||
0000001441 00000 n
|
||||
0000001546 00000 n
|
||||
0000002496 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\2514PW\375b\346M\037u\307 \354\014_\254) (\2514PW\375b\346M\037u\307 \354\014_\254)]
|
||||
|
||||
/Info 7 0 R
|
||||
/Root 6 0 R
|
||||
/Size 11 >>
|
||||
startxref
|
||||
2548
|
||||
%%EOF
|
||||
96
z3c/rml/tests/expected/rml-guide-example-07.pdf
Normal file
96
z3c/rml/tests/expected/rml-guide-example-07.pdf
Normal file
@@ -0,0 +1,96 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
3 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 7 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 6 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R4': class PDFCatalog
|
||||
4 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 8 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 6 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R5': class PDFInfo
|
||||
5 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R6': class PDFPages
|
||||
6 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 3 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R7': class PDFStream
|
||||
7 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 204 >>
|
||||
stream
|
||||
Garo<4V#=_%#&mu^;HEX!'=oNY*FNk"dBs*!eqHsmQZdor3QQ`jF"8*T:H7rq2!(?"M092?6G,IJ])\!3b"GC*_]#q]J=>pc3L4.1`B%B3_6+kpWZ:#F@!_lr1TjC$^,H$8&_Vh<+Q(deFFJ]23m'APAT#)DABih9ptcW"=ZJsJejsZ2l:K3FIG?rVHIN[+*dl\0,ED,W;~>endstream
|
||||
endobj
|
||||
% 'R8': class PDFOutlines
|
||||
8 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 9
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000209 00000 n
|
||||
0000000372 00000 n
|
||||
0000000649 00000 n
|
||||
0000000783 00000 n
|
||||
0000001052 00000 n
|
||||
0000001157 00000 n
|
||||
0000001503 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\2514PW\375b\346M\037u\307 \354\014_\254) (\2514PW\375b\346M\037u\307 \354\014_\254)]
|
||||
|
||||
/Info 5 0 R
|
||||
/Root 4 0 R
|
||||
/Size 9 >>
|
||||
startxref
|
||||
1554
|
||||
%%EOF
|
||||
96
z3c/rml/tests/expected/rml-guide-example-08.pdf
Normal file
96
z3c/rml/tests/expected/rml-guide-example-08.pdf
Normal file
@@ -0,0 +1,96 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
3 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 7 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 6 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R4': class PDFCatalog
|
||||
4 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 8 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 6 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R5': class PDFInfo
|
||||
5 0 obj
|
||||
<< /Author (anonymous)
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (ReportLab PDF Library - www.reportlab.com)
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (unspecified)
|
||||
/Title (untitled) >>
|
||||
endobj
|
||||
% 'R6': class PDFPages
|
||||
6 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 3 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R7': class PDFStream
|
||||
7 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 186 >>
|
||||
stream
|
||||
Garp%3tB+]&-UA:db\DI$HTB"8K.tLW/tq*#q-DnmU*p!nk4Nbfh_<dCe!"\lWe(1/D(s[/1;<RfERQRp4]#**`mBQl?jk$LP1U;QkeC5[7e7IQ)s%Hrf8TH<oVHi=&tYCU4".s,^qrsql";q>KtO3K:lu0F!nU5T']:,([IK.,<'M]J_U;>7lOQ~>endstream
|
||||
endobj
|
||||
% 'R8': class PDFOutlines
|
||||
8 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 9
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000209 00000 n
|
||||
0000000372 00000 n
|
||||
0000000649 00000 n
|
||||
0000000783 00000 n
|
||||
0000001065 00000 n
|
||||
0000001170 00000 n
|
||||
0000001498 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\232w\017\3421\263\325\354R\366\267\025H\343&\012) (\232w\017\3421\263\325\354R\366\267\025H\343&\012)]
|
||||
|
||||
/Info 5 0 R
|
||||
/Root 4 0 R
|
||||
/Size 9 >>
|
||||
startxref
|
||||
1549
|
||||
%%EOF
|
||||
151
z3c/rml/tests/expected/rml-guide-example-09.pdf
Normal file
151
z3c/rml/tests/expected/rml-guide-example-09.pdf
Normal file
@@ -0,0 +1,151 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 4 0 R
|
||||
/F4 5 0 R
|
||||
/F5 6 0 R
|
||||
/F6 7 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Courier-Bold
|
||||
<< /BaseFont /Courier-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
4 0 obj
|
||||
% Font Courier-BoldOblique
|
||||
<< /BaseFont /Courier-BoldOblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F4': class PDFType1Font
|
||||
5 0 obj
|
||||
% Font Symbol
|
||||
<< /BaseFont /Symbol
|
||||
/Encoding /SymbolEncoding
|
||||
/Name /F4
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F5': class PDFType1Font
|
||||
6 0 obj
|
||||
% Font Times-Roman
|
||||
<< /BaseFont /Times-Roman
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F5
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F6': class PDFType1Font
|
||||
7 0 obj
|
||||
% Font Helvetica-Oblique
|
||||
<< /BaseFont /Helvetica-Oblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F6
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
8 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 12 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 11 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R9': class PDFCatalog
|
||||
9 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 13 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 11 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R10': class PDFInfo
|
||||
10 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20121219133528+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R11': class PDFPages
|
||||
11 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 8 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R12': class PDFStream
|
||||
12 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 1219 >>
|
||||
stream
|
||||
Gat=j95iiK&:j3Mr#b(b/dt2`+-MMULBTS%JH^ohg-^q.bh-Z@aXbJQoC"c:8=F;QGT5:sWStnV4@rIBn3cTLg&l^TiV&959qcq;apEjo.src^2r>E1mG]J;$0.1A#_W)$.&8+W>#8lJ2aS-k`t9/!0pi?3Y_$F@(h>?l.3gA[Gmjo1%-3X`/7gWab@30M)0tV.PKfY<j-_\u2V7^b4KfRA@#2ouUQ`Z)Le.^R=U^%P6su,$5Tc1,oWl"`/g`AeS8@VPS%TB)#?s[IQ!@L'7'\?KSgPcsU;-i;!7i8%A]]!ApV<T(_qVd;;Jms?Z(HIQbApYpJ6rK#5stDA'9mu6q$C3df]Af(Q1f5sbCA15S#/_r2WYR8Ls+q<`0b>okNgVgaX)!MS*m*'N@+.!$_n;8C="K07l+M]M#:_A?63(LVU;S$WpL/E7q>*XdB`%tbm)`;<;R</*FYiMPj9*$#WAW(W&Mf6[]_WjTYTc<l&IGH3`td#7@i1>*HlQ/>n71Jeb@PY5_=T+6euY-#sE,^=_Tan(6*RiW-Wr,oOnHrfQRdHcajYQ:HRBJ]ATJgCJ,`h).;er*=c9GjN!F>/TEY)/>nhuR(f31^RSeV>;\nZd=&4ke'DE]]=m6b?`NdBj()K:njbj)`H;\njJ=f\3ca(qo"jZ-q1fF(N.]=2qq.?n8..b`Vt@<506#S6(/aPcR@&-G<DTHnbaACt__Cg?9-Ggq:X71rF.0&Pe+lh-%Z0;6J!?oi.,Krkfca.pm,0dhLGS4(dg^95?J*)ulV<'a@2qPg1rj%keQ@%_Yd3YNI(Pg@#b8L*l2?c11\!*eB$t'6hSkl_/mrT&OqJpZ_9[aJ(8$jTTK/cl5iXAS?tpP^E"JBjQtE<$i[%_1B3rL=:Tj<mj<dh0O`-JUH(&1J&Su*B\f-Dfq+/8d)"SeE^T-_&7Yc&!d+[12\lAMYI:Z@,_(032&QA_e2:988s-hg>Q&'K)&s:O-ddZS./JDNKaYjX=FP-qPBbm<fREQsIRLK=-M9>/rJ2"3KFuI3K6qY5JjI+BM8:e"@aHQ5aTD-o7/.l=iEX?e)iiS7Lbr\SR4.kZGT;UjrpPNssn'oZ^#>e3lN^u<q3[45"Es2(;Es2(;G6IXCG6IYn87FY&hG0XjfS<4aLX&kk3=eT])S?lUc4k!ElDsS%Er*V)9B1LIKibBkRco@*>AM85G5]T'S&=7J?iK`+M?~>endstream
|
||||
endobj
|
||||
% 'R13': class PDFOutlines
|
||||
13 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 14
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000269 00000 n
|
||||
0000000434 00000 n
|
||||
0000000605 00000 n
|
||||
0000000790 00000 n
|
||||
0000000948 00000 n
|
||||
0000001117 00000 n
|
||||
0000001296 00000 n
|
||||
0000001575 00000 n
|
||||
0000001712 00000 n
|
||||
0000001983 00000 n
|
||||
0000002090 00000 n
|
||||
0000003454 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\344l\301\320j\307\346\376\210=\215\256\246l\2546) (\344l\301\320j\307\346\376\210=\215\256\246l\2546)]
|
||||
|
||||
/Info 10 0 R
|
||||
/Root 9 0 R
|
||||
/Size 14 >>
|
||||
startxref
|
||||
3506
|
||||
%%EOF
|
||||
129
z3c/rml/tests/expected/rml-guide-example-10.pdf
Normal file
129
z3c/rml/tests/expected/rml-guide-example-10.pdf
Normal file
@@ -0,0 +1,129 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 4 0 R
|
||||
/F4 5 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
4 0 obj
|
||||
% Font Helvetica-BoldOblique
|
||||
<< /BaseFont /Helvetica-BoldOblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F4': class PDFType1Font
|
||||
5 0 obj
|
||||
% Font Courier-Bold
|
||||
<< /BaseFont /Courier-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F4
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
6 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 10 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 9 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R7': class PDFCatalog
|
||||
7 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 11 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 9 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R8': class PDFInfo
|
||||
8 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R9': class PDFPages
|
||||
9 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 6 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R10': class PDFStream
|
||||
10 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 622 >>
|
||||
stream
|
||||
Gat%ac#28i%"RdInd[d*`M/0aI]k>ldk1h%!a2!$)k:G5HJ%7RZ4kOkXY,;.gQ;'Tr$6k`d-8F8riuWNBOJA;5_<SUBU")1)a$"Lg"UoJgthKoGQMeMK"=h8N?3SnB.3ll5ngt*!=:I@J4)Df%4W9_At)l3Hht)*rGFQE)A_g_BFi,sXS8p&4m_'%n8f-/lgO6'oEC[jd+lNJ%-P9pVt*/TcEci#]:.9m;b0jJNTsj@)B?'?kG1*fp):bL<n8tB,">!l%ZVL\hWOP]HEnlL$8+cQ"3X.a[,-hq@H\,tr"6UEAMlr4_m9k.X<qu1Hh;j1L4]rWh'j-hikI>@Fl)cPMLeI1b<^j*Z&MMrV:]+n*'51`h;bAL6%@FOS\83d)#LL/#ceLkof5[$WXp-$)bYu[W$nt5b2f;=AP//p'S8(me]PrKYJ]=AbmrSC7u<.e+*Kp/<8ph<+<dmS8W^4Wejtld+Xh;op]lBPV\5U9'G+=h#O&;<4qrTr]:d)>icRPD;i+9V8r0NE'#`.p3YF9A&/7)rqu]69;i+9W$AbaE",H'"2%m:*$VDBb?5JhcQ2$T:KX_@L.!hl)h5k:fJu^C:*S(,7V.c^ElF4s/'BZX9"lZKl~>endstream
|
||||
endobj
|
||||
% 'R11': class PDFOutlines
|
||||
11 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 12
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000245 00000 n
|
||||
0000000410 00000 n
|
||||
0000000585 00000 n
|
||||
0000000774 00000 n
|
||||
0000000943 00000 n
|
||||
0000001221 00000 n
|
||||
0000001356 00000 n
|
||||
0000001625 00000 n
|
||||
0000001731 00000 n
|
||||
0000002497 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\2514PW\375b\346M\037u\307 \354\014_\254) (\2514PW\375b\346M\037u\307 \354\014_\254)]
|
||||
|
||||
/Info 8 0 R
|
||||
/Root 7 0 R
|
||||
/Size 12 >>
|
||||
startxref
|
||||
2549
|
||||
%%EOF
|
||||
140
z3c/rml/tests/expected/rml-guide-example-11.pdf
Normal file
140
z3c/rml/tests/expected/rml-guide-example-11.pdf
Normal file
@@ -0,0 +1,140 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 4 0 R
|
||||
/F4 5 0 R
|
||||
/F5 6 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
4 0 obj
|
||||
% Font Helvetica-BoldOblique
|
||||
<< /BaseFont /Helvetica-BoldOblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F4': class PDFType1Font
|
||||
5 0 obj
|
||||
% Font Courier-Bold
|
||||
<< /BaseFont /Courier-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F4
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F5': class PDFType1Font
|
||||
6 0 obj
|
||||
% Font Helvetica-Oblique
|
||||
<< /BaseFont /Helvetica-Oblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F5
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
7 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 11 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 10 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R8': class PDFCatalog
|
||||
8 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 12 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 10 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R9': class PDFInfo
|
||||
9 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20130304200123+00'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R10': class PDFPages
|
||||
10 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 7 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R11': class PDFStream
|
||||
11 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 932 >>
|
||||
stream
|
||||
Gat=*9i'M/&A:TVIi*/4<S6[)pDu<@P#//X/_&dE97VPc:+.29rV9a&mIf1nA#2LIna(V_p\&*?&?,Ins1DJ:Hq[p'6U1jt*M=MVOuZ4"iS\u@\F<9F(n-!k`fYY5qWQ-$E8WKZ8F#DSQ]M6:/0SM+3['=@gl3Yi0UhuHY(*8u5_L@Q+#^0$=Di"bR6KDEeuR%74D`qmH(D*E%j?4Oj9$C@r(Ph`2JL6hP$E<]ohfK2c'39K`))I8;U[juEBrf%J<g*Y>DPZbD%X;:`(9/fNY\DOnU*Aj(5Igqe]Dh%mJGnIPh\sJ)%iC]AqD'B6Uio=Fpm]QnIE-e<Y3Lr^*WRFr9X#-`KQ_B2%p=a0gmF`)H5!o>UX'\P][n)Z.#tq$XrAr:TH;Uek+k+jX+3c$F_$<B8.YY)YLgV@N(80N2Jod7B<Y@3Z-D$3Jdmd@'uM3cVI@"e'9UJ%\&'Z38Ag8'qgl\(mo`ben@&*qg*+,[bkl/Lu.G5k35"_\pLtW6b&7j?e7"Aa.c5->E7KMN+\^VY`:;<I61H>&nIEL4akgn30ntVC3\<d%mF1&qL$@I%ELlHl;K;Ca^)\)=mj`'DiHF'j)I%$>.R%Xd/8B=Q3#itK8n'uD39$Jr<tngplV=b4A>'\g;6A$SQWLr"JqDA<#H&lk3`4V'dH\6<@Fa8aqCJl=?rRWq3d1<+]b;l?0lcZN%/<<,uq3o,#j@5W5-Pf,.oaF!j/O#9X5X<^,/^'F+t#TFd-*@VPuE*#IA!-@@;J?\giCjhB<onC=I,!%&[2b/$2Z\Cc2(EkeUB0_t33K[s%a30C'jmNW3XZra*FsdgPra5FKUp1qHGSDLS1AX]Ts+[V98Us0i>:c?j),q3J6dK9A)$*ITB[qbgR4DFX%\R25OZf5YqrFe:Uqh09)eB"g"]ofFhY!5lW;TC?,t~>endstream
|
||||
endobj
|
||||
% 'R12': class PDFOutlines
|
||||
12 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 13
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000257 00000 n
|
||||
0000000422 00000 n
|
||||
0000000597 00000 n
|
||||
0000000786 00000 n
|
||||
0000000957 00000 n
|
||||
0000001136 00000 n
|
||||
0000001415 00000 n
|
||||
0000001551 00000 n
|
||||
0000001821 00000 n
|
||||
0000001928 00000 n
|
||||
0000003004 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\275\375"\226\004\012\247\311\024I9\2513L\031\365) (\275\375"\226\004\012\247\311\024I9\2513L\031\365)]
|
||||
|
||||
/Info 9 0 R
|
||||
/Root 8 0 R
|
||||
/Size 13 >>
|
||||
startxref
|
||||
3056
|
||||
%%EOF
|
||||
134
z3c/rml/tests/expected/rml-guide-example-12.pdf
Normal file
134
z3c/rml/tests/expected/rml-guide-example-12.pdf
Normal file
@@ -0,0 +1,134 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 4 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
4 0 obj
|
||||
% Font Helvetica-BoldOblique
|
||||
<< /BaseFont /Helvetica-BoldOblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'FormXob.a9475650de663a97fd49920ba129d955': class PDFImageXObject
|
||||
5 0 obj
|
||||
<< /BitsPerComponent 8
|
||||
/ColorSpace /DeviceRGB
|
||||
/Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Height 86
|
||||
/Length 3441
|
||||
/Subtype /Image
|
||||
/Type /XObject
|
||||
/Width 130 >>
|
||||
stream
|
||||
Gb"/kc\l$s&BFP1_2Dt)$d:1-71_WG5t""8d$&bf&I]R7/-[n]Ci0j46p]$_"<iAJ+AkPK+^dQ3d#.o2*fP=T(/u'4+Zm=%BD/CfZ`;oPEV<+N41dqfbeEiJFoCU*lDj9][C$6dYQlI_F*$sEYC8T\iGp73lgK<Pc&r,^]Wlq7SO]%?&*dkB7;8pc#'@%.gKhGaJ_,AMooIO[aU7Kbr(V1>a0tHAPLlrJ9CjJP]Q3:qi]L#Fa-T"Ac's+Mn;AA&B6[X-o?:8=&#D:N"#.Sd_Jd&9nAMZ$Rc?Cq]/Y@kGCugmI;S1MEQ=hE#?fu]AM8aaT1Fe#Q@"WD]Ve6J*7aNZ3-FN9]5r]/8)?iJrSUU\&9qs,l-cZ%,@Ga:aj1tI*.E%7]"0q@K7*%X`Af\njiWkC+51"lqO*V0*PI'PBJf1OT02\,Erh63ZEf)S^]!jfHpmVVo1#\nh"B/Yc3VT5AJc=Ij'4BjV:+2kk<HNQmc.&9l_BFJLuek3.Ad))F6:]Za5,D#N8Y=/5er+re/W@^$.6s9Z2?lR&Yg&ub=e2am1b$EC%]6D*Maj'NO^7!+3n3&S;^A.9dq9H6VhO::=>67ig(ZqPk)\b0r:qcXj)4V):BjW1aG9sr[">($q&@&2IVjUXKB`Q6S_#QPVQ<*!=7!gZ)uuaUP>9uEFQc49!Pn$gdSY2"9^dV)^&'O6ZPLEmUUKj=0GrtOFg]EA_)rZ&;rVG*uIo`F7LH(Ktl%Gc6>hI=B"D!/K;VVAbkh_dMaT?"DMF),S/hm>a3)l<UR%IC1E'f?>7K"=C+Ak"]sJfAU=.%EUKQU+N.i;Q//H.6[FEoi_BsN%kVaghJClIbg7+J<T=!_VUr+X)=m/T+^*S<k:Te:9;Ar'52'u/<95_^d?#Cm(3a^).k<+u>B.Che#fJj1ZLr,IdH\qC])p?cEfgQim'seq:@jhddafm@3jBfh:gMK;$:u_Tu`Ef5+:,^BULR&2*)B/@nCjXR21K+<SWuHTFlLt'<kA]iR!TA,d'<J@\QP+[-ZLpcb;?E/.b*;EG)_(p'X^[cm)$98at<>c_NWo*aNDp9X1"d!$,2'E=2JJn8C4$[G>uV@nc,FbWK.kk;5bN[lL.ac+H'4?u]gpgIb!9C[Nt'diDUboZDk3Q6bqekZfLKir0p'T.OkEb0"GQhe^7P5tiPEKg9`>*6*8=eoGBkm.`S8P!!VW:p8uuM*7C(XQ669?@q5$Q4JD5R:NNg&#\*=Lcs_Ys-4ti8M=plM2=X[jDgXP`d5!5=A/'/D7IZWLoh%R/5#uJD-R#!Ct4c/.JK\;hPKdHbZ*&omX+;2N/bA=BSmAO_!:.d7kKp`k(#fe%"%)Bc>TQpKJ^XW)gN/-g9n9KpU)/\f1$QU>slYX%2rG"CReW\5cHb`#!.+i12ka"f!N[]nrqE:aVl<oHK4,j"jG%?3Cb=u&;9tiK2F>=hB+OEDSh8`2^pdo%QR65*#mk%-#X[",Ofs=\_!N!>3!HV)troQI\?^9^#=7,?QpZadoGqfh>,"Q3`/l#;<4!6LL(3mqm;>D2;<UEjnYmQi$QH[bRr<&=3GIsCCj=<_V0PcDkU$"9l&JPCY+=oLba697H/1ZR`NfcF5&A.joeb.C8.W:i1(h_i6bd_aHnq6=W6t'pT(*AptT.+A40#_3BB$q2USI,_t)1079S[5@U[D21aYDqc_RZt6(0)FVb>-DSjMNd2a'#ggd(q3&M5_iUbYsb]ja""]dcA\fuB?iiO&!^PLOi35WqkHR'-KR*aWf^n<f,a/dt28BJ.s-PNP4Q9Hm,H`\H<)h5FLD=?mQ@m@J]hlc9gB.u[)TD,CYOcAYMU/3XRdi)LC-/OnZ`!hnh-%<)cui@I6Ok#?>:jJn&Tb3('.eah]JEM[&j5^)dgEdO)BF`>l**+9SmWp06Tn\hjj8O#guco7C$_cFSN8udG_'JXgj(:e9P*nnOK[6iK?kn>.LPi?]flJeri[+^]1DMBV`UbNOnV<q8>1U'HA3WA`_,Z[[YiY\F\l<kE+8Ck)sKqZmfr]6Z\LlFkKB0G5u2n99UGV8r#ViL])`/I_o3?7-POuCd71kl4tc#&87YZ#7&_njIh5>."XWK>CNV82<:lUW2MZ6]R1"(Qr"9LlJ0]N3]b>>DbL9h[9,de1[W?HDg'Ht=lel/IrgDER(cMeqYC#aZQTG"aM>=r:+og:N9?@rW_D09;hA-aAd$\gEY138bbi'P@0Q6YOP7nqSA49.ffNT8-`cPF!35;&.X&;Js0qoSkiQG5a9P8WsU9K*A$nP[U&kMU"o>YqIs9[^M%D9[uVM0$DR/kl(\cZXB55OdZGEad#;2dKHA#SogbAU\HC\3:Ss4hN7P.K,`5-`og&N[dDq)aI.f@Q[uXZq(#J"84k7RM9GI6Eu=ob5#K["qZi86D#mOt?F/UJLHEq@EFtnV[YYJGC0N2k#UGs_O)`e)0)d_`U4<:#BZoVfh*cco3&^>XC>$l0:NDf3PVCPLkT+K[Gj[;*Mi.`B:<?a;%!=r>GfhIC(l@kjVkHl1:7`XP[)fE9FEV_$!\TETGUITa(dFf,"t3A+]Y"B=CIq/8;/4FH0h2\_-'@F`\hoa*j-]Y^3`L_r8h1=p=Yqo:=<sJP;IO&iQ+08d-CNG$>/;_DBHiBuE=[u4d*$B&Ie"+Raq&W57a\Ba#YK`!"66+NaMM5$&r>Bgbs;^cVM_sYUWoa3HQEjJX@)NI.r?q0!VETqhE@j3RfpT"pBK,="rZ_6UM,J9AsiZ&.PVuI"=kH,W`(^\H^L/0Pl;f($GEt/HKdKa-Z[#mb4Qck:NdTka@p4=AMKW!n2kO%iX4a+%PsVJqh'Mg+P*jW\U+Mhj#iUt8&bn)#YWO)\+6#NT0,TqCkQIFZS_tQfq9j]iEWVSG/#.HH;1Ks+:^BgHYq798DlD2M\)Jj:bFB^hgC\o;H:%"`HcWs\CTB1n`h!$E@9Mgk%VV"54r_tmMGA@":V56%)>K12KnD(SlW7A\OSmlGX,:m0V8WqK![YP?b0[4SD:rC-*s.&GJA78Y!'=J*A3?!5Hnp!m]cU73i^-fm[`,^NS554-[-=Z5\`Bk;o;Z;nQGDC::$=t0T\E-1Y=<p'OND5SD5QO=RT)Xadnf/*:3%Q::607\6%\h>kP3K%I"HS5IogSDcLLBO3hleVhS@CWc(mO8<;,DEi0!5GO>7RPopn9ZYXJ#O"H@C(tsj/.PI+-Y"pJ@=gj.uGFR3Z+[*^=BVXt$Cc*W1/+-B5+alZI1hBZo-/BldS`68Ql\;k-:(?g%7u7$pCe%rKe94K)B.N>\f_[4(&VtcnFh/?.eBk5GO<,P\GA;#]]3$>VTQBYBGrpH')5Y:[OJ_i^9Kd5i5KbtHR>X\kU)%s5S\FmonqYG2qrh)*9t?/cqb!YMa/8Ub@.B+9K".)ZAlu_*NdqGMqYu*b<qL`8"8iHr`IR=~>endstream
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
6 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 10 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 9 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ]
|
||||
/XObject << /FormXob.a9475650de663a97fd49920ba129d955 5 0 R >> >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R7': class PDFCatalog
|
||||
7 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 11 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 9 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R8': class PDFInfo
|
||||
8 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20130304200123+00'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R9': class PDFPages
|
||||
9 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 6 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R10': class PDFStream
|
||||
10 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 879 >>
|
||||
stream
|
||||
Gb!;c9i'M/&A:TVJ!a`'`+EZU_qlmn<2qnln:@WmP7SYQ1o-j1^\cutS]H?`U6685hRq[tR2s%fp)n>O6[ud"!R<Hf?6C@V[K)Oc6?W[ufm*.)4M()bX=Y':7&JPVUYMX!j`k<[^h-M\?J5hp0Qe<I\a:Xt,IF#d$CI@`aih`tgj)#9<LGN':QTK%Gg)(T[9:@]"1rrhSj.XSliFC*3:30HaKG@`6c$,Bb(mGjX#-KbG*XG3N'oY<]<c=TKh;Y^.c;#KL@#rr-e8K#.8U'Zgn_Tr7iR:GfML:h]])DVl'pK?d9GG"O`,H-*dZLdg=$E1a?<n/_j6[.9L'rC<+LlUP$uf.RWmf>oV1'*\(-H!7OC_X?Hfem\OdQj1ktcV7l#cq$GKR?M/mr"Bt.^i>^m]R"?bFH6Y%JG#OCS&!2`&@K6Rjppt,PXl/<:&3:nF$;F<YMfbuS-`kSE,k[hc6("TZ%LtElJs)")VRB<O%T9o/gmROB4c`>lMPSV)[PU4*4XP3'AZ<l5J%joNOh/W6VS_-JUN&:ApLm`iMm[&r6/R+hjJqr5Z4*W35G&;.7_NsL<$005naaZn7okJd0Rk`1S@6^?g"A&.C;UYpTg"4Z&X31gf^lLbKmA<*J+:sqp?+st%j!!)I2-"cu*lo\h*V)J6.$e'f%t-1>$]f&?/%PMd2PBn[V@q7%\9n^W%7@9H-OQgmnd3B;d`[o1ZM.)KC;p48K_.EZi91o"SntFZ1psG`BE"h@]JDjU5^`,]_KU3L#lJ(&.bgJ<hOs$@KFY-V/W(LLi?l@Q#5LI$];rerO0S$/!piAcm(0P(]28[B7P)>meA/6?$EtJWX5b8NCk9/E]=iFJ&3_D:^Gg+&%?*f,!KukO8,~>endstream
|
||||
endobj
|
||||
% 'R11': class PDFOutlines
|
||||
11 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 12
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000233 00000 n
|
||||
0000000398 00000 n
|
||||
0000000573 00000 n
|
||||
0000000803 00000 n
|
||||
0000004479 00000 n
|
||||
0000004822 00000 n
|
||||
0000004957 00000 n
|
||||
0000005226 00000 n
|
||||
0000005332 00000 n
|
||||
0000006355 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\275\375"\226\004\012\247\311\024I9\2513L\031\365) (\275\375"\226\004\012\247\311\024I9\2513L\031\365)]
|
||||
|
||||
/Info 8 0 R
|
||||
/Root 7 0 R
|
||||
/Size 12 >>
|
||||
startxref
|
||||
6407
|
||||
%%EOF
|
||||
891
z3c/rml/tests/expected/sample-shipment-chinese.pdf
Normal file
891
z3c/rml/tests/expected/sample-shipment-chinese.pdf
Normal file
File diff suppressed because one or more lines are too long
107
z3c/rml/tests/expected/simple-layout.pdf
Normal file
107
z3c/rml/tests/expected/simple-layout.pdf
Normal file
@@ -0,0 +1,107 @@
|
||||
%PDF-1.3
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
4 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 8 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
822.0472 ]
|
||||
/Parent 7 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 180
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R5': class PDFCatalog
|
||||
5 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 9 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 7 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R6': class PDFInfo
|
||||
6 0 obj
|
||||
<< /Author (Stephan Richter)
|
||||
/CreationDate (D:20130304205054+00'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (Test Template Document) >>
|
||||
endobj
|
||||
% 'R7': class PDFPages
|
||||
7 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 4 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R8': class PDFStream
|
||||
8 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 207 >>
|
||||
stream
|
||||
Gaqcp9a\a&%#+EXF,/q]$B@jCVk'r_\EHBjGQ;RaBeB&X$\tDk8jX:H?h+grR=]I-%)>_Z3"q)k*QT*'BlF]e5&b=#`=NWV@H%8_V-t;[JZT7&Qs/:PqJ&Ijen(XLBPh$G*Z7L,ZoIM)CJ#O_"W=UePAdDu?gVHMHD.jUI6V0KGpeDL:iRSTr].I=o>N'"ZHL!fF$coLN?0o.~>endstream
|
||||
endobj
|
||||
% 'R9': class PDFOutlines
|
||||
9 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 10
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000221 00000 n
|
||||
0000000386 00000 n
|
||||
0000000559 00000 n
|
||||
0000000838 00000 n
|
||||
0000000972 00000 n
|
||||
0000001252 00000 n
|
||||
0000001357 00000 n
|
||||
0000001706 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(1\301\(\211\016s\276^\256\005jv\035\353\227i) (1\301\(\211\016s\276^\256\005jv\035\353\227i)]
|
||||
|
||||
/Info 6 0 R
|
||||
/Root 5 0 R
|
||||
/Size 10 >>
|
||||
startxref
|
||||
1757
|
||||
%%EOF
|
||||
127
z3c/rml/tests/expected/special-text.pdf
Normal file
127
z3c/rml/tests/expected/special-text.pdf
Normal file
@@ -0,0 +1,127 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
3 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 8 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 7 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'Page2': class PDFPage
|
||||
4 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 9 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 7 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R5': class PDFCatalog
|
||||
5 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 10 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 7 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R6': class PDFInfo
|
||||
6 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20130305225909+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R7': class PDFPages
|
||||
7 0 obj
|
||||
% page tree
|
||||
<< /Count 2
|
||||
/Kids [ 3 0 R
|
||||
4 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R8': class PDFStream
|
||||
8 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 545 >>
|
||||
stream
|
||||
Gatn#h+lua&;BR'oc9(&lEXD.Vb,TA>pPMTY>>C;?GOK+n_uSUG!PrufIkOcXf,E6abe"^TC7`Z-4&u]IP)DO9od%3!YQZ+"GqaJq(7'Yh9L)NA(SeKH5m(pajLTmE#bZ&Z"XU<=@6HYV@fh]WJ#TG'AUuu6a_gWhFp32aD4-hQ8WIoUHYguis_e;\Z&iVn-AO!a=k6h]pIR(9SZc4V;oJqmrF,<*/VSJ>o<s>OjK/d7.6-ooDkC_md23I7)&fZAfZqaR)DjR1a6_d%h+N3VH_HZI5[Uk8:4-E2%2&oFLtf/NNimY@4A1H%@^bj3+q*bi2Vj;`LG6YLL@kL<.3_8r.W;DZ!7n="IT`X,(4E/"Ij"ps5R`tqf'1@>F'G-@Fnr6:a&,iZg]0GGS!c?IjcdQ4M@*]:d%&9PAG>qIO-ffJ#'2'crJmok!#t=8ro1"gMU'(Sh%XRk,9"WM%khCNmo*Z:UdH26PuuNd7$gPGGmr#Wl8VX'KJVC:sSQhhO:oB_6n\G5&[+BK%]>+rj1-\gF#G!o*.F/8#l~>endstream
|
||||
endobj
|
||||
% 'R9': class PDFStream
|
||||
9 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 262 >>
|
||||
stream
|
||||
GasbS_2a+$'LhaAr52g7R:'7($9Lt(2%,EB!CeQ3Jk/Q4rHUN]bfj\IVTF0JaZW]ld#n6t)IR&/gIXp>F,!BJ"QgA%'*aLOTKi7l',<02W`(If.b7c9efZI=r-@p_h3RP1h-OBAI9p*a6h=md%-drWmdhAYg,bhW7:?T!HYImc,09uM!]/r^"3:D_eFPLlokHe0$j[(6nqWoh)P+Bsi%f&K&t,bCTR.QH8'WFqO)AnOL5rq6C\MlKAb-ue@Lrb$P4MUX~>endstream
|
||||
endobj
|
||||
% 'R10': class PDFOutlines
|
||||
10 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 11
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000209 00000 n
|
||||
0000000372 00000 n
|
||||
0000000649 00000 n
|
||||
0000000926 00000 n
|
||||
0000001061 00000 n
|
||||
0000001330 00000 n
|
||||
0000001443 00000 n
|
||||
0000002128 00000 n
|
||||
0000002533 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\266\223\013\225\230\266Y\231\206\3278`\331\265G&) (\266\223\013\225\230\266Y\231\206\3278`\331\265G&)]
|
||||
|
||||
/Info 6 0 R
|
||||
/Root 5 0 R
|
||||
/Size 11 >>
|
||||
startxref
|
||||
2585
|
||||
%%EOF
|
||||
118
z3c/rml/tests/expected/symbols-set.pdf
Normal file
118
z3c/rml/tests/expected/symbols-set.pdf
Normal file
@@ -0,0 +1,118 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 4 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
4 0 obj
|
||||
% Font ZapfDingbats
|
||||
<< /BaseFont /ZapfDingbats
|
||||
/Encoding /StandardEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
5 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 9 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 8 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R6': class PDFCatalog
|
||||
6 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 10 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 8 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R7': class PDFInfo
|
||||
7 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R8': class PDFPages
|
||||
8 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 5 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R9': class PDFStream
|
||||
9 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 2097 >>
|
||||
stream
|
||||
GatV"lZ3b/'ZIhb.f[E]_LSrVgG;"KX_"IoiX8UoIGt$)a9.Ml#XQG]hsTk!FE]KadsX!\T_O[kc^qbmbh<!GL+:aPU#j$"%]emK[+aB1MKC`3YGdjGeaumbF1SpPCib5TX_B/bf:FI-Bk!?Jh;hJ,Q@e.Lc&L#'U3#L;fX^:)gqm(WKkG0J%9_l*T20[3XaBZ;q_oQ:*Sd9Z4Ki@$o:t,Vs7k!udI-VZjm)][q=4C!akh#[GOOU5218_(Y>eTL3\3&C=oLRLFHOm-WiauuU6TkERIj1sjgJp7XU_t79&GUH4)p/f[Vii>$nje@eUBi,9">4TNmt%b3\A&Bo'lW=ddFMY4'B:E>IDbkF;.aXh=aUWk'rR"W^@nH:jRc8Xs2HmLqW/?OT?nIa:/IWNUJLP<Q$4'0aV2-(XdPTc?Le4m4Qac7$EZKKs-JpBZ#kcTG5hArYhcjI)m^`I:Pk^[c@XhOL5D(N6R-:_Dar=XM^@ZTG3R5.\b*Vlt)OGLJQeJ)3Vk&lV.^P)rH<Qa(M.oiLAkZ2L`("9H1Q^9&'!)9;D&,UN!Y!18YM-Y&Pl/1j+;a1rC%50r&]2H"9S^(Zc.'R!%4l1/5K)P46W8P]bWB)jEZe]o&11SKN8pA3^J@Ee?]og?\`)C%A*aKPunZ=o8&cnPVcU_ekSjSKtj/1854>Ee@7\6fFoaQVJ/g7YWa.95[Q5=];hAnthP'gET):@7tK7$JE,l11It>Jo(3-70?H?O;el8C9PK+P:rCNjAc57>T@)$O-_%oeR'OJh_[naI"n@-D:jsiPX7:B^ID=j%RNYDn0s6L1gs$p:^X1MJ";sSb9Z'93JrR@@7tK7$E<qQ@_QEJCh,dGhhm<r,j5$)`8k,L$&;;R0I/Z.c?LdIlbY6;Dj_jj5"!_RD:jsiPX7:ephTFPPD$iO-lTAt>B5?o80*`+-JpRM3.-a\+a)G#)jE[heIgHp>:.GJ)&Z8)%CnbJTF9piP:r?&)gV!pp71@[:'jGJ2W$2cGNm5kaG=\8ENM\"1t,eUD<Wb'leWTV)*I9-k=\V>E:duT%24fD#@lX_*L9rG;5+)lOSOo>M;B=G!VuuGN'CMK9Qeg4]JS>BD0I`K"4K0c8P/]naQqH2B.5bfKoEgSc*pR`IOHMCg]/V#D8)3cm$a0?EW_]1[KY;!L"BmHQ&ign[4T2&.(g]LX5!\%X)5S8P45?5XE"E1XP/%X-/jlKXE"E)XP/%N"kcCDWlbcYU1t'X/IF_.&QM")j&B6UCJjk`PbrI'(oH#7b9Z&E;O5H7@$GEt/X(j[8Pprr!)]c@[nMn>P+kon!2ELtTPIF"\I>>*E>YP+!aU`$gJX9Y%:GE8o.?/Z?V"$D2h4c*bI:.XIOR^bg]0aA0&JEMG"7Ef\H.Xe?/b,`KjVqu.NaFCW[lH(.(h'!WS@JCW@m'`8N<!0<,M]2<0qNk,lCi';Rlga;I."JK'XF*9'$728p(<K(5:Yg:b!QB;5u.n[4(rJMGgtcN)ErqAWlP0.8&\+0M;$6Q:\r?;O#<55a:R*/JDYZ85Uiq5Z+Q-QV>oRAg3PPAfQN(^@:6kT_hSW;Y`G4;17[Ge*DGq@T5OP@T6]JQ_=4YaAD[p"AjO*95.&H0/A&=X4<W-E?.D`\rU^B-I_dZM,Moc@&SpKGnd@)ARLLY_dL`a?u>[-f*d3gD?,;HO+ObE;R".M@'E*--#:+jZGm>=Z:50gCO8sd`XQ=_7LE^Bq_GV"a'lDG$AE7#;Rj^U@(8Z5V/$U<FH%6TFH$ulf,dNR)E.Zd)C^WK4dPXrD?0:9m^"#AfRB(d2EhTQ2Gtr3HQjbPg]/[;Uenufr1/uY,;sE>,;pa1YoQCR)`Ia7)\E;-IZm)VD?*$^,*]ArPu0G'%T>80'XKrd@Q&*(@l>NqZOME#lGB'N)o.u'#R,(kV4`eeJ=ql-,AeeQ'1UEi%:IURKVGmk1=X=a@FRc"ZF8YeXGn17XGmL>D1>)b)`N:U)ekPFr@+R[g]4-eUbUZu;Ms5=!K,W&K=pS)&T6XX-uC1<ijQUU\;eh0\;`>dg\qfU2Em2m2UW^eqc='YpcJ]780c(?58eH&1ELO?[CPfl5m=Oj~>endstream
|
||||
endobj
|
||||
% 'R10': class PDFOutlines
|
||||
10 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 11
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000233 00000 n
|
||||
0000000398 00000 n
|
||||
0000000573 00000 n
|
||||
0000000743 00000 n
|
||||
0000001020 00000 n
|
||||
0000001155 00000 n
|
||||
0000001424 00000 n
|
||||
0000001529 00000 n
|
||||
0000003770 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\2514PW\375b\346M\037u\307 \354\014_\254) (\2514PW\375b\346M\037u\307 \354\014_\254)]
|
||||
|
||||
/Info 7 0 R
|
||||
/Root 6 0 R
|
||||
/Size 11 >>
|
||||
startxref
|
||||
3822
|
||||
%%EOF
|
||||
107
z3c/rml/tests/expected/tag-addMapping.pdf
Normal file
107
z3c/rml/tests/expected/tag-addMapping.pdf
Normal file
@@ -0,0 +1,107 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
4 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 8 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 7 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R5': class PDFCatalog
|
||||
5 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 9 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 7 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R6': class PDFInfo
|
||||
6 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R7': class PDFPages
|
||||
7 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 4 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R8': class PDFStream
|
||||
8 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 350 >>
|
||||
stream
|
||||
GatUl_+oY;'LhaAr57>FRL.EZ0ZN3"]$c;;d<1-Je,Voc63#fMc57qS@M7.eMt^ORmjUV5(\;:e!BYk53sN\J.^1JL+RX5"_VdQcfRB,na(^iP3OYHskpB'j9g=a7J[#[eMd\h\DBYRko#+rsGL4n.'.$Y!DTs(4V(UnjH@nYo/`qmt)FC9;,r2Kq.9^4q<7*s*Y&sd8#'#Kb+46@Ufu@P/e/&f@g+N5shkpVJ/cUUAM_Y_c=dBS=(fXj4=9tH;I.C@pQ8\`p\SQTp(k")"NZUF5.&.VTg*(2d*mrGl6*#=C3R]>0S7V:D_iJA^q`a`kVFJli]6,;X6M:*gnS\tl_&"miOcf~>endstream
|
||||
endobj
|
||||
% 'R9': class PDFOutlines
|
||||
9 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 10
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000221 00000 n
|
||||
0000000386 00000 n
|
||||
0000000559 00000 n
|
||||
0000000836 00000 n
|
||||
0000000970 00000 n
|
||||
0000001239 00000 n
|
||||
0000001344 00000 n
|
||||
0000001836 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\2514PW\375b\346M\037u\307 \354\014_\254) (\2514PW\375b\346M\037u\307 \354\014_\254)]
|
||||
|
||||
/Info 6 0 R
|
||||
/Root 5 0 R
|
||||
/Size 10 >>
|
||||
startxref
|
||||
1887
|
||||
%%EOF
|
||||
118
z3c/rml/tests/expected/tag-alias.pdf
Normal file
118
z3c/rml/tests/expected/tag-alias.pdf
Normal file
@@ -0,0 +1,118 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 4 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Courier-Bold
|
||||
<< /BaseFont /Courier-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
4 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
5 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 9 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 8 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R6': class PDFCatalog
|
||||
6 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 10 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 8 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R7': class PDFInfo
|
||||
7 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R8': class PDFPages
|
||||
8 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 5 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R9': class PDFStream
|
||||
9 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 221 >>
|
||||
stream
|
||||
GarW2h$Sa!&;BQVhr.gX60_.,"q_Oq?$$b($S6"$,`tC=hmiYR&[Uij%VO)_#a#n5qcj5-6'r7?+W!rp`/l5;id23nUL'EDOuQIPS*C3;-7Z3ANIo-4od`%i>DFnB:tg4bY*ou821]"@m&dS>m^\)<@5dSn7Vmoe;;^27VO2dW[p1;)Icra0k_?TsS=c;]dMrU`(QAc.Q,R@rdbIV2I.%M_L-XM~>endstream
|
||||
endobj
|
||||
% 'R10': class PDFOutlines
|
||||
10 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 11
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000233 00000 n
|
||||
0000000398 00000 n
|
||||
0000000569 00000 n
|
||||
0000000742 00000 n
|
||||
0000001019 00000 n
|
||||
0000001154 00000 n
|
||||
0000001423 00000 n
|
||||
0000001528 00000 n
|
||||
0000001892 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\2514PW\375b\346M\037u\307 \354\014_\254) (\2514PW\375b\346M\037u\307 \354\014_\254)]
|
||||
|
||||
/Info 7 0 R
|
||||
/Root 6 0 R
|
||||
/Size 11 >>
|
||||
startxref
|
||||
1944
|
||||
%%EOF
|
||||
118
z3c/rml/tests/expected/tag-barChart.pdf
Normal file
118
z3c/rml/tests/expected/tag-barChart.pdf
Normal file
@@ -0,0 +1,118 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 4 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
4 0 obj
|
||||
% Font Times-Roman
|
||||
<< /BaseFont /Times-Roman
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
5 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 9 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 8 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R6': class PDFCatalog
|
||||
6 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 10 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 8 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R7': class PDFInfo
|
||||
7 0 obj
|
||||
<< /Author (anonymous)
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (ReportLab PDF Library - www.reportlab.com)
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (unspecified)
|
||||
/Title (untitled) >>
|
||||
endobj
|
||||
% 'R8': class PDFPages
|
||||
8 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 5 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R9': class PDFStream
|
||||
9 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 1089 >>
|
||||
stream
|
||||
Gb!;d95i<6&AG?Ts'^paW@$Y,ltad36<o&S+V%L$74X[]<@,Sua5][YDA+DC-4?d>g2#mK^8X9UbS[$o5Nk>8G5rEuGju[Q3GcD28g\!<%UO#'.mLiN[@a[^[jEelE$:XJ,h1Dimbld;eK-?X?1%+>jj!5]3Gc..3V/o9lW""[Pb9#[HKU&JI<MAmU7M@d]O%@fn8#_;4S6O\#EiIYc"qa#!O]\=hV1OI,kNfYa_mu=Kc%5+l$5&:9E/s</CTb$<<JTU;9iD_-1#R.ibZ;S5D`8Gc`)J23>3]J9q3!/0lp4C(at*mRQRG(D"R&K0NPtgKi[4WY<Z_$l6.sA3/o+W40+o#X<ZiWck_n/>!\r:3kIro*VOp=7,GIaoPN>+f[s$:cM`k7hr/'O@PluQE_W8I$WJl(?!@ZTaoj8<MSY`OYj7O*C#(mre,lKjHG3.,na,E;guFGkm\dr5a'n9:5IWL+*6sO.^FueYDf5%;^B*)%pCk0/&I+R\Je&`M67m,0(pq04jfOV?X]R'KKs"T6G^N%`Zq+cU;0.e?9ehm<$c5eG%&QiH0X^"MpVui5f+s"VU5-^+JOaPGq-a[OVEmA_h;61TmB!3uSbH,ef+5JLUUGODl:,"=`T-YEV69FTd6Epp[fbp3_.HY*9ZT[DH!W\Gk[O+_6b`0d^`@)krhl3ZaeQBb5!nKUlo7kJ=<#&!)B)>#;`b0/l[YmV$GLp4:;M.fbf4/'@4&j>\"#ap67ObcDE3?s9L]6D/S@=JN2JQ*r<XHAG43:E:4THCl#]_q<G8Tt>7M*]6kZR84,/N2\3T+VBfZj0'+pSVD>K+CQ!HVF<.Rcq=f]Q);7c,IC-@2`S4>Jifqfe2-8;]eVuN#[p)hA&+&;1n]XN#gQ`%!gZhe43X7P_HF'$JZ;GA>iZC%Je3/nsSHC!RT1j7q1>)L8IfQ"csp@6>lpt20[9bh^V]#*]'.IsrQ+ebQUY+C"b$]isDh;.]K'D]8CQqG_Z7pdU*-]h2Se5!C==/u)^/30H;:"qM"3$NF)7.l*42f8.ancKVEEg*?\#>3dkbN@=+9UhhB<9-M5>tf]hOULL*+#[seYl~>endstream
|
||||
endobj
|
||||
% 'R10': class PDFOutlines
|
||||
10 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 11
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000233 00000 n
|
||||
0000000398 00000 n
|
||||
0000000573 00000 n
|
||||
0000000740 00000 n
|
||||
0000001017 00000 n
|
||||
0000001152 00000 n
|
||||
0000001434 00000 n
|
||||
0000001539 00000 n
|
||||
0000002772 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\232w\017\3421\263\325\354R\366\267\025H\343&\012) (\232w\017\3421\263\325\354R\366\267\025H\343&\012)]
|
||||
|
||||
/Info 7 0 R
|
||||
/Root 6 0 R
|
||||
/Size 11 >>
|
||||
startxref
|
||||
2824
|
||||
%%EOF
|
||||
118
z3c/rml/tests/expected/tag-barChart3d.pdf
Normal file
118
z3c/rml/tests/expected/tag-barChart3d.pdf
Normal file
@@ -0,0 +1,118 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 4 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
4 0 obj
|
||||
% Font Times-Roman
|
||||
<< /BaseFont /Times-Roman
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
5 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 9 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 8 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R6': class PDFCatalog
|
||||
6 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 10 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 8 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R7': class PDFInfo
|
||||
7 0 obj
|
||||
<< /Author (anonymous)
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (ReportLab PDF Library - www.reportlab.com)
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (unspecified)
|
||||
/Title (untitled) >>
|
||||
endobj
|
||||
% 'R8': class PDFPages
|
||||
8 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 5 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R9': class PDFStream
|
||||
9 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 2040 >>
|
||||
stream
|
||||
Gb!;e9<[,-']+m-s1q@,FH)@AkI)rb+Z>&-+VkfW<Y\!@<@,Sua6t"oS]$OEEri[m-Lp/Ehg'WAC]e,6+,%sIc@ihmOfuJ"!h>d0,9Wp-VshaZVrJru^^6t/K;BRd!""=jENksHpNJZ^0;aNVjQ5,do'4-Ia3Wi>]CVpRalt$1]a0@B*Y6p8KHQEak<Tsal";sOCZ:iiYeXBYJc'XQY[I=F[kgP`_>j(Gd55#i^@t.T<A%hJ4[[n@.^On0b.n5<-R^SPnimBr_Hk<8K&B+\1Z=KolOUP';M1@Xn+2oSe6OE/*t*geE/,N?X=oTh2bOWo^#hV43P.\)&dOG"Ftl@:(5H2YTjm8]>E')crHJV[HHB71s0:6g?TJBl6&c2>4"+/HQSE>TG&58q),m(%+UDT76qZaj(B]MCpgSr<[O2-/UA@m6]=`^Agc^+^I&,7s+VDDXCdZ.-,Yr10/OO+)V-;1CW'sCMJQ[_Qb_fO3_9eR=aO%br11HPTbUj^lYj4DN/>A&?2)^,r>D?0=.'#K\j"WX2-CXlcA"[M$AhX6tBi;h8A6;)or=JQqDu+#^nki;+KgbQR[Ub1=^*FS_U%O!ADLMOf?Wrre?SG'?6p?Y<;p$*i"i#m(4Us(ik1R`0;IUAdQ&;#"oF\7HLB7.LOY\Y,OM2_pUmi)i?#ioa1n-oGCt*P33G))m7DujbRsmApKTtP&Tb4u>9gR&Z59Um[j9.d&B$+sNnU)]?2@HgLq:f.(GVZYk2M/:CQP/oVj),2:7:)mdV@e60lg\E!h1F_3^J?ZMgOZDi,CguZ1<)bF5dUQ?HU/ED>XclLbF<rHk(MgV>bMbCX=Z`4R%KJYo"H!/=CUQR:@b;qpW#S-.D#$jI#XI2Elh.8BIT9\>YCs09XOHtRuJ.Y`bP=S[Uear(6#j<R"tV43Y1A\PD_;RL#I;+!j/+X\2Of]^V]ihX1+_Y^&Ra"2Z^R/o#*3EKRs"^_-9[Ef<kF%0f?WupASBSVdA.OdZ\-2KDQt>I$1q;6h=^M^,DJWPs''O^Gd*Y.C/G@W<S=;9J[Ntn'/j,kqW"T\>-hM2q7o+g3N.jFkt)=><c0OL>6[lV$ct(:7fUT06XbKT).JRm'a_O)si=GL/+JI"(.s%/UB@%H%l7_s,2'iC&'uqkEjeC/mGe]pW2N;A^4!oh&G2?n8s\uL12A95f3$r6U5%B6S*T&#*HDj82_^G6)8Pe1^V8G$mF0Cc?S)@\=k5Nq:4I-'b@d+8PS4X0en9[";VNWK,I*H"9Y$iaN9=[gYi,XjU"_%atm?d*l&HB].e06<lij]8=Znbo<SfCjU:&0Kt]qnW8D%mT#Y>s@AJeq?!MuQB;Y!:g_M0eUCqR*&4.IC+I`JHJ4D579KC_aWF2(LG:;(#Bs[(`0UNjcVWY8'',.u8?D^qUe&b_3gKgIF%i"pBZ8*`plT#Yo`K<=;?BR;a"Ll%@ZedtjZ*+K@,b8n1T#^.^d>gB0"sqn'jZ'fh1de&jR3]cdUdRPK)6dc.lZ*S=KtL&0(5p.@Z%Nc0p-cee7ao>!_LAaXf1gW*`JPq$!P/cOe3.KM?8)h/CS3Xe9GhqP3F!]1\O=S3-PM0]VsF,hf0,01AeU8uZ:[eF5hLIk0VfR#CQ1RU2"51pnK?%=>2]["Kc?hQGiCbDKFfcB]W(K4[7&UK<pkUW1.9fhR(E##;G9N3>T5(e'c2TF<Qm9CY:"l8P>4Mj%?+B!ci&a+[QliB->/JB_Y2.i;@JHUOo]nenj6Br<$C^-cD6SC-B47R:)K&`O`4TN''toZoKHZJL+"lgU`JHogJB-b<&D\,m8^/2_m"@?SbWdIjeejZ4(+Kn)uTI(e_%OKTEgEG=(?rsol@.,_VIZPg0!P;N8GFs*^A5bBK1Jo5Lqc--?q.-SoL5HY*T"/40N@pbO8&leMVm-[4T.9]CtOG=O$EkOmA42p!kS-LDLFZ",KA&<=-$DaDSb8+?F[^Eg^f9%RAhrM7p0,PKS>,qSoC,DNfFp2g0%1Qedg3;.VM4CYpK3l.tR8pMJ"An.-3J=u6~>endstream
|
||||
endobj
|
||||
% 'R10': class PDFOutlines
|
||||
10 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 11
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000233 00000 n
|
||||
0000000398 00000 n
|
||||
0000000573 00000 n
|
||||
0000000740 00000 n
|
||||
0000001017 00000 n
|
||||
0000001152 00000 n
|
||||
0000001434 00000 n
|
||||
0000001539 00000 n
|
||||
0000003723 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\232w\017\3421\263\325\354R\366\267\025H\343&\012) (\232w\017\3421\263\325\354R\366\267\025H\343&\012)]
|
||||
|
||||
/Info 7 0 R
|
||||
/Root 6 0 R
|
||||
/Size 11 >>
|
||||
startxref
|
||||
3775
|
||||
%%EOF
|
||||
149
z3c/rml/tests/expected/tag-barCodeFlowable.pdf
Normal file
149
z3c/rml/tests/expected/tag-barCodeFlowable.pdf
Normal file
File diff suppressed because one or more lines are too long
107
z3c/rml/tests/expected/tag-barcode.pdf
Normal file
107
z3c/rml/tests/expected/tag-barcode.pdf
Normal file
@@ -0,0 +1,107 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Times-Roman
|
||||
<< /BaseFont /Times-Roman
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
4 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 8 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 7 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R5': class PDFCatalog
|
||||
5 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 9 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 7 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R6': class PDFInfo
|
||||
6 0 obj
|
||||
<< /Author (anonymous)
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (ReportLab PDF Library - www.reportlab.com)
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (unspecified)
|
||||
/Title (untitled) >>
|
||||
endobj
|
||||
% 'R7': class PDFPages
|
||||
7 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 4 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R8': class PDFStream
|
||||
8 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 1221 >>
|
||||
stream
|
||||
Gb!;f9lC_#%)&jOrujlt_ShJ*O"6h8iW>PfikS&gWDZ%S_V`D%R;KEH>NidDKY$HW46u(Jo4%Sk_BJadcbD\OK^a'j:L8'L$.ETr,n8=mn7(*hquX(Z'if"g23_&g`mV_G&KZ>rGkp^\Q]j+O4:BJ20"sIWds7<%c,SYMS"28a;b<-=Y)s?dH_%@Ts596Yb^Q.rPe_8[JF)'4pp&Yn)<9PRCU@[*rQ=r<VMj!d=o[g\NNqiO%tCr*O\[^7ma"snYKOCDW+k`d>b6VPgWeIlB(:2cMskFk[r?-B>$'b58,'9+<2:b#kqVnKUm;&Yj<I`:#3,RNqfDZ@11^X5/#<XW0L^jN,6:>/<M0o#6tS[iPEA*]S<lDP`9M%:@%g%fKENdC9ooWo+qVP[`]sg;:b#!A)f^O5BT[$2=D1#*/L48m0b?[p'H%1M'e0Qpcl-U!!goAu$>-JL81hqU)6"oB;o39@Y/Ej_ac.ch!t.2CTgW&s8HV:]N$;:q8u@3iP#;TXA)7Ft;Fr?:92HD'M)%t%W_mLr!,Ea4Q>s$%@N^=UOs-*d#pl[91o6"-P%IZ9%^b4@7RG`uO@mAE\sNIgaAF?1[D[Cm3p;(nF\'WB#@E@TJcAfo[B?Kh<H?."]+L5",gsmql#4Vp$WTk(2FN1/@_fPd_K6TER/BlNH$R_oGji$I0NW0p!HZSMLj:45YB[A]"Psl#!j%T0WdqX&6U^2_`Pn)`ZIUToCY_us6q!a^P%Mt#`U3d>d[-QcJ]QqDOLAS2Z"KssU?rZ;'eTq-k7(S\,smOG7A2?YBKT<.,+X9869um!CN;fPQG["hrNtXj>tsEbP/ZmY=EVej>Q#@4XA;l[aU1?d=7`N0gn1gJ'`Oo7NJG+!g`K9Bh9MR>/anJ"s4aHYLGM/lgqc+drH?tM_n2fd"0b\d[hE<Vo6q)JZ["L)UFeh9iOY8W1S"2b9i*g0o3TD7ag1Y+cGX;&?#HB]8hH(8(S"(:h$Os#3c8c:QNl<&/tY`W#A8H<@Mi8pj+21+I4k2/`7jBsdp`TMco?WeZq:GrQLarUF4aB5m:A&5^g8tscGd$HW=.1+SC9T=:CbPo=t,M"F$X@uYirU6l45Pgi>KUS<3\4I:^htlP^-4Yi<j?`MJsDK4V(J;$Wh8:L,nnr[C<j0167b3K7!FX#A&/[ABZ_\M5o0k.jpM0Eqqeg4O:Q'\8kSRoTnYV=8T2*h>@Cj-,6M~>endstream
|
||||
endobj
|
||||
% 'R9': class PDFOutlines
|
||||
9 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 10
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000221 00000 n
|
||||
0000000386 00000 n
|
||||
0000000553 00000 n
|
||||
0000000830 00000 n
|
||||
0000000964 00000 n
|
||||
0000001246 00000 n
|
||||
0000001351 00000 n
|
||||
0000002715 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\232w\017\3421\263\325\354R\366\267\025H\343&\012) (\232w\017\3421\263\325\354R\366\267\025H\343&\012)]
|
||||
|
||||
/Info 6 0 R
|
||||
/Root 5 0 R
|
||||
/Size 10 >>
|
||||
startxref
|
||||
2766
|
||||
%%EOF
|
||||
118
z3c/rml/tests/expected/tag-blockTable-1.pdf
Normal file
118
z3c/rml/tests/expected/tag-blockTable-1.pdf
Normal file
@@ -0,0 +1,118 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 4 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Courier-Bold
|
||||
<< /BaseFont /Courier-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
4 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
5 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 9 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 8 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R6': class PDFCatalog
|
||||
6 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 10 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 8 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R7': class PDFInfo
|
||||
7 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R8': class PDFPages
|
||||
8 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 5 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R9': class PDFStream
|
||||
9 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 266 >>
|
||||
stream
|
||||
Gas2Dh$V"Q%#+-TH\ZZ&"hUVu\d@AMkcVQ1ncDbQrt+l%_(IckJs+QFnDtpnKZ",;]rHVi,;'7t_&JJ9(-KWr_r).3oOKb;biTt5WpcUILrX:mmrLk`;dMiW7NjB@-uUpUM<br)W!>L/>+X$?,F?SPouP182_N=\,N<a%BiUe%c@$*^".J<eEk3d44B3`M8G6ktb.;%9&VI[&pYj!*(hKeTXt^U[DLZFLJ!&HH9"X^kefbd$r2]KuhI!!@kt>e+@;lI7@9h1~>endstream
|
||||
endobj
|
||||
% 'R10': class PDFOutlines
|
||||
10 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 11
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000233 00000 n
|
||||
0000000398 00000 n
|
||||
0000000569 00000 n
|
||||
0000000742 00000 n
|
||||
0000001019 00000 n
|
||||
0000001154 00000 n
|
||||
0000001423 00000 n
|
||||
0000001528 00000 n
|
||||
0000001937 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\2514PW\375b\346M\037u\307 \354\014_\254) (\2514PW\375b\346M\037u\307 \354\014_\254)]
|
||||
|
||||
/Info 7 0 R
|
||||
/Root 6 0 R
|
||||
/Size 11 >>
|
||||
startxref
|
||||
1989
|
||||
%%EOF
|
||||
183
z3c/rml/tests/expected/tag-blockTable-10.pdf
Normal file
183
z3c/rml/tests/expected/tag-blockTable-10.pdf
Normal file
@@ -0,0 +1,183 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 4 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Courier-Bold
|
||||
<< /BaseFont /Courier-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
4 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
5 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 12 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 11 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'Annot.NUMBER1': class PDFDictionary
|
||||
6 0 obj
|
||||
<< /A << /S /URI
|
||||
/Type /Action
|
||||
/URI (http://google.com) >>
|
||||
/Border [ 0
|
||||
0
|
||||
0 ]
|
||||
/Rect [ 72
|
||||
741.6535
|
||||
297.5
|
||||
770 ]
|
||||
/Subtype /Link
|
||||
/Type /Annot >>
|
||||
endobj
|
||||
% 'Annot.NUMBER2': class LinkAnnotation
|
||||
7 0 obj
|
||||
<< /Border [ 0
|
||||
0
|
||||
0 ]
|
||||
/Contents ()
|
||||
/Dest [ 5 0 R
|
||||
/Fit ]
|
||||
/Rect [ 297.5
|
||||
741.6535
|
||||
523
|
||||
770 ]
|
||||
/Subtype /Link
|
||||
/Type /Annot >>
|
||||
endobj
|
||||
% 'Page2': class PDFPage
|
||||
8 0 obj
|
||||
% Page dictionary
|
||||
<< /Annots [ 6 0 R
|
||||
7 0 R ]
|
||||
/Contents 13 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 11 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R9': class PDFCatalog
|
||||
9 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 14 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 11 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R10': class PDFInfo
|
||||
10 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20121220121136+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R11': class PDFPages
|
||||
11 0 obj
|
||||
% page tree
|
||||
<< /Count 2
|
||||
/Kids [ 5 0 R
|
||||
8 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R12': class PDFStream
|
||||
12 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 252 >>
|
||||
stream
|
||||
Gar?,b79+X&4Q==r52g7M*MF\(<2&*<btIl#667s0-;J9q3DWBBVoK"dlZ$"/)]\(]Oq\X+ZPU7OJ!hODu61E4#2eRBo#V*8-FC?j]p=Vi]T]Q)_=?\KK>e/U`B6%84$DM7$lr&_ck;M-Wk*=AJHM*X^:fAHodBKG$(!ifW(gd^$H-FAR!tm6?=]l?5a[T]REEuPQ"p6mUTb#qCs3"1]/1Ers!hT(`$D8^//LnUW5C:Ps$jM3+*Y#G-=SJ~>endstream
|
||||
endobj
|
||||
% 'R13': class PDFStream
|
||||
13 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 159 >>
|
||||
stream
|
||||
Gar'"_$YfK&4Gspq[[bT4f$buke3Wq$>j5OTN"2kdJlEJJcUuSjtOFQ/$SOhokt&+MFT0.#ON\kGj#Np19F5jYdHjc`DiN>d:'=phZfrogLRq_`]:XG!d$oZ/^#jHDpT)B^I#(;'+RjrT/.5>pniRU#NV="Vu~>endstream
|
||||
endobj
|
||||
% 'R14': class PDFOutlines
|
||||
14 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 15
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000233 00000 n
|
||||
0000000398 00000 n
|
||||
0000000569 00000 n
|
||||
0000000742 00000 n
|
||||
0000001035 00000 n
|
||||
0000001257 00000 n
|
||||
0000001443 00000 n
|
||||
0000001750 00000 n
|
||||
0000001887 00000 n
|
||||
0000002158 00000 n
|
||||
0000002273 00000 n
|
||||
0000002667 00000 n
|
||||
0000002970 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(-<j\(\341V\)\016\302\364v\265?8\321\365) (-<j\(\341V\)\016\302\364v\265?8\321\365)]
|
||||
|
||||
/Info 10 0 R
|
||||
/Root 9 0 R
|
||||
/Size 15 >>
|
||||
startxref
|
||||
3022
|
||||
%%EOF
|
||||
140
z3c/rml/tests/expected/tag-blockTable-2.pdf
Normal file
140
z3c/rml/tests/expected/tag-blockTable-2.pdf
Normal file
@@ -0,0 +1,140 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 4 0 R
|
||||
/F4 5 0 R
|
||||
/F5 6 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Courier-Bold
|
||||
<< /BaseFont /Courier-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
4 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F4': class PDFType1Font
|
||||
5 0 obj
|
||||
% Font Helvetica-Oblique
|
||||
<< /BaseFont /Helvetica-Oblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F4
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F5': class PDFType1Font
|
||||
6 0 obj
|
||||
% Font Symbol
|
||||
<< /BaseFont /Symbol
|
||||
/Encoding /SymbolEncoding
|
||||
/Name /F5
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
7 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 11 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 10 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R8': class PDFCatalog
|
||||
8 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 12 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 10 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R9': class PDFInfo
|
||||
9 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R10': class PDFPages
|
||||
10 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 7 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R11': class PDFStream
|
||||
11 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 386 >>
|
||||
stream
|
||||
Gatn!b>*^E(kq]0]YdmHM1r_35Y6nBUTE7<oEBc]nH)!H(I#R0:i8&.7+6n=k.dGT["QL/ZJVqgXu4(T5TKV$,aj>"_l`XG2rCAR2W73&1?%rVAC+GsKJt$;(T6&)ocBWI'uGo^<*(l]j*3h.Gm=5+TW$W97H[*Fp%p8l29a"#&a9.CS#U2i\N\'QU-U0phThNW;NdFrN]81O6DRYalYT'pbfF8a%EKAQ0e#MTCk>P\3l&9u':aN!HA@paN5gST9m`r]acm[-D=^q4T7&\YFf[YHUH;BVk%\`(;p'dIWW.QPMO'a+B/#P7T4Jq)SZp)hX<k%<l@cH?ch+)`CX\pR)=Vh[5Q>?:[XW^tY0mV$U\-]NG:M1':(d4bn@^J"Ic=3~>endstream
|
||||
endobj
|
||||
% 'R12': class PDFOutlines
|
||||
12 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 13
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000257 00000 n
|
||||
0000000422 00000 n
|
||||
0000000593 00000 n
|
||||
0000000768 00000 n
|
||||
0000000949 00000 n
|
||||
0000001105 00000 n
|
||||
0000001384 00000 n
|
||||
0000001520 00000 n
|
||||
0000001790 00000 n
|
||||
0000001897 00000 n
|
||||
0000002427 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\2514PW\375b\346M\037u\307 \354\014_\254) (\2514PW\375b\346M\037u\307 \354\014_\254)]
|
||||
|
||||
/Info 9 0 R
|
||||
/Root 8 0 R
|
||||
/Size 13 >>
|
||||
startxref
|
||||
2479
|
||||
%%EOF
|
||||
140
z3c/rml/tests/expected/tag-blockTable-3.pdf
Normal file
140
z3c/rml/tests/expected/tag-blockTable-3.pdf
Normal file
@@ -0,0 +1,140 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 4 0 R
|
||||
/F4 5 0 R
|
||||
/F5 6 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Courier-Bold
|
||||
<< /BaseFont /Courier-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
4 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F4': class PDFType1Font
|
||||
5 0 obj
|
||||
% Font Helvetica-Oblique
|
||||
<< /BaseFont /Helvetica-Oblique
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F4
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F5': class PDFType1Font
|
||||
6 0 obj
|
||||
% Font Symbol
|
||||
<< /BaseFont /Symbol
|
||||
/Encoding /SymbolEncoding
|
||||
/Name /F5
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
7 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 11 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 10 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R8': class PDFCatalog
|
||||
8 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 12 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 10 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R9': class PDFInfo
|
||||
9 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R10': class PDFPages
|
||||
10 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 7 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R11': class PDFStream
|
||||
11 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 386 >>
|
||||
stream
|
||||
Gatn!b>*^E(kq]0]YdmHM1r_35Y6nBUTE7<oEBc]nH)!H(I#R0:i8&.7+6n=k.dGT["QL/ZJVqgXu4(T5TKV$,aj>"_l`XG2rCAR2W73&1?%rVAC+GsKJt$;(T6&)ocBWI'uGo^<*(l]j*3h.Gm=5+TW$W97H[*Fp%p8l29a"#&a9.CS#U2i\N\'QU-U0phThNW;NdFrN]81O6DRYalYT'pbfF8a%EKAQ0e#MTCk>P\3l&9u':aN!HA@paN5gST9m`r]acm[-D=^q4T7&\YFf[YHUH;BVk%\`(;p'dIWW.QPMO'a+B/#P7T4Jq)SZp)hX<k%<l@cH?ch+)`CX\pR)=Vh[5Q>?:[XW^tY0mV$U\-]NG:M1':(d4bn@^J"Ic=3~>endstream
|
||||
endobj
|
||||
% 'R12': class PDFOutlines
|
||||
12 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 13
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000257 00000 n
|
||||
0000000422 00000 n
|
||||
0000000593 00000 n
|
||||
0000000768 00000 n
|
||||
0000000949 00000 n
|
||||
0000001105 00000 n
|
||||
0000001384 00000 n
|
||||
0000001520 00000 n
|
||||
0000001790 00000 n
|
||||
0000001897 00000 n
|
||||
0000002427 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\2514PW\375b\346M\037u\307 \354\014_\254) (\2514PW\375b\346M\037u\307 \354\014_\254)]
|
||||
|
||||
/Info 9 0 R
|
||||
/Root 8 0 R
|
||||
/Size 13 >>
|
||||
startxref
|
||||
2479
|
||||
%%EOF
|
||||
118
z3c/rml/tests/expected/tag-blockTable-4.pdf
Normal file
118
z3c/rml/tests/expected/tag-blockTable-4.pdf
Normal file
@@ -0,0 +1,118 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 4 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Courier-Bold
|
||||
<< /BaseFont /Courier-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
4 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
5 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 9 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 8 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R6': class PDFCatalog
|
||||
6 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 10 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 8 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R7': class PDFInfo
|
||||
7 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R8': class PDFPages
|
||||
8 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 5 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R9': class PDFStream
|
||||
9 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 399 >>
|
||||
stream
|
||||
GasbWbAP0N&4Q>Undfr4,%3SIa2([(7Fe^/VNQFZ7mLg_#l]<NB>U<<Pn<%'43'-uS-d$/KB0a1!3[!@"b@M1$Za61Ic*BOfdY82_Ua\"bnD_9Ba%dp,l@X7l[7VIN#OI[&S;CTc.eUdNq3b"o+U+"MUh^9rf51P^?NWjOQUFW?<.b[\\hWm36HW=@!\$0/acQ_?AVnk;o@3fWjFIFV;Op#kLiXWDj"Ski.EIAVWg-#fM47i9BfJZfa?;ikkTO(TbT2]e_:!6*$ijaU-</cM3P3rYe0IR-Ycqp74VBpTu,T\YG@EK;tOF7%nFLbY`2OjD3Q-N;/4`QWA-;9$Hp=F8r^5UIb7,h@2l&_fMmHg%iVR&7e^&@5A7A5HI-4DF<bhSrt9VN$SjEoM?~>endstream
|
||||
endobj
|
||||
% 'R10': class PDFOutlines
|
||||
10 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 11
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000233 00000 n
|
||||
0000000398 00000 n
|
||||
0000000569 00000 n
|
||||
0000000742 00000 n
|
||||
0000001019 00000 n
|
||||
0000001154 00000 n
|
||||
0000001423 00000 n
|
||||
0000001528 00000 n
|
||||
0000002070 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\2514PW\375b\346M\037u\307 \354\014_\254) (\2514PW\375b\346M\037u\307 \354\014_\254)]
|
||||
|
||||
/Info 7 0 R
|
||||
/Root 6 0 R
|
||||
/Size 11 >>
|
||||
startxref
|
||||
2122
|
||||
%%EOF
|
||||
118
z3c/rml/tests/expected/tag-blockTable-5.pdf
Normal file
118
z3c/rml/tests/expected/tag-blockTable-5.pdf
Normal file
@@ -0,0 +1,118 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 4 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Courier-Bold
|
||||
<< /BaseFont /Courier-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
4 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
5 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 9 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 8 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R6': class PDFCatalog
|
||||
6 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 10 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 8 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R7': class PDFInfo
|
||||
7 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R8': class PDFPages
|
||||
8 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 5 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R9': class PDFStream
|
||||
9 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 520 >>
|
||||
stream
|
||||
GasbX9i&Y\%#459qB()987[RHVMg*e+;baN!p#(qm#+GF@tG)<+"+&bL"]:m<p0.>`,F^+JYYeis7Hu^f"l0r5U!WJ:g.OO:N5dNj?$(8`Kge+SeE/ER\B"8#X<p8H,_$;h$+Gh$F9nfRensRG^agt?!i-:6af%Get6ij3c*jO#/Y_qaK$2H>OLEeHTVJf?,BTS"(0i)ppE`4gkl_<.79@tqq6[4K0:+=+e*7m0Mkki,*S2ao)tE9@F5EcK6c#0>?$.TF\Ufp<>Hcsp<Emk3u<#09^."[WaDG#XTGOaDUbm0k/Z:32=?3uI.APX0BUUNKm@(r>[P^9qdO<q(K9Mn@_V"u'N/)/rm.<&#SV5=:e&u[&Xqpq#Yh[3KI48_66-`uPC#ue2aZDYh>$N3&*)ap9`u7$RjMK!/2[.FTb,5!#C)4`mE[PA[7hZ,b7mu4k2*VD9T80bW\W:Q[ltJ#-=a-dkVFr.1)@PVT8?F/OZqppgTmn\fbJ'+A"^S%]VZfGrW'Q/'d<~>endstream
|
||||
endobj
|
||||
% 'R10': class PDFOutlines
|
||||
10 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 11
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000233 00000 n
|
||||
0000000398 00000 n
|
||||
0000000569 00000 n
|
||||
0000000742 00000 n
|
||||
0000001019 00000 n
|
||||
0000001154 00000 n
|
||||
0000001423 00000 n
|
||||
0000001528 00000 n
|
||||
0000002191 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\2514PW\375b\346M\037u\307 \354\014_\254) (\2514PW\375b\346M\037u\307 \354\014_\254)]
|
||||
|
||||
/Info 7 0 R
|
||||
/Root 6 0 R
|
||||
/Size 11 >>
|
||||
startxref
|
||||
2243
|
||||
%%EOF
|
||||
118
z3c/rml/tests/expected/tag-blockTable-6.pdf
Normal file
118
z3c/rml/tests/expected/tag-blockTable-6.pdf
Normal file
@@ -0,0 +1,118 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 4 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Courier-Bold
|
||||
<< /BaseFont /Courier-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
4 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
5 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 9 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 8 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R6': class PDFCatalog
|
||||
6 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 10 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 8 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R7': class PDFInfo
|
||||
7 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20130304200123+00'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R8': class PDFPages
|
||||
8 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 5 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R9': class PDFStream
|
||||
9 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 665 >>
|
||||
stream
|
||||
Gau1,cYhJk%*%`?r!ki$"fb,!/6bBe_m#t&d7ZF35hi+=\n&d+g$=\C:&.S"j]!L])=f0?dq?c\T^cOUpZVtQ28XNL^fZE=@%;6Kn)/PoX1rdg#.Ckb\K5b5iWta;+FXHGj*\*+2uWko;hsbcK'?309qV.rfN`iUp^3M2_qWZ/q!`O\oD`U!lZUkg,<#)N"hsAbDj6;!E&jC1M7]\S7&"OMlG.V4<#SS=CP,:3i-!Z3r,qZ;8R.-i'X%/8naO8JkDQoL6(?epc.?8\3#doe]QL.4OS#^)D4pPJep1gI+E>8U$Y1=sY/tW5G#)B9J1]1"NRm+)K!9e_%?t"h>+="IAQPh5<R!L5ZU0@Pi=6FAX\^(cnjJkNEhUXuKdnShWiTI(Flg%T_NpGp<E:_O=h.@?j[-("D[C+&C_hcNlkP9#C__]MlkG1dU?T2EVOppPFR=&"(=sWeW<WCnED;L\<r!FNi$YFFcK][Q:G;f5C4O?-dMV+'Y"mC^jto8f,`UcEjs-JOF#:>gVa.8$1feup#,V_t@jTdg>,lNe'qL?3A;t#1nj?"DE>;_&a]r"AVG_:cRt!2.foW;odV')nO%++KNoC4?M*i`^5"TOpZb*mB8l$EXguUE"Fe7a%p(;6;PFM,o;5^TBf!T67^YYWdrWA/6KZ3~>endstream
|
||||
endobj
|
||||
% 'R10': class PDFOutlines
|
||||
10 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 11
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000233 00000 n
|
||||
0000000398 00000 n
|
||||
0000000569 00000 n
|
||||
0000000742 00000 n
|
||||
0000001019 00000 n
|
||||
0000001154 00000 n
|
||||
0000001423 00000 n
|
||||
0000001528 00000 n
|
||||
0000002336 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\275\375"\226\004\012\247\311\024I9\2513L\031\365) (\275\375"\226\004\012\247\311\024I9\2513L\031\365)]
|
||||
|
||||
/Info 7 0 R
|
||||
/Root 6 0 R
|
||||
/Size 11 >>
|
||||
startxref
|
||||
2388
|
||||
%%EOF
|
||||
118
z3c/rml/tests/expected/tag-blockTable-7.pdf
Normal file
118
z3c/rml/tests/expected/tag-blockTable-7.pdf
Normal file
@@ -0,0 +1,118 @@
|
||||
%PDF-1.4
|
||||
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document http://www.reportlab.com
|
||||
% 'BasicFonts': class PDFDictionary
|
||||
1 0 obj
|
||||
% The standard fonts dictionary
|
||||
<< /F1 2 0 R
|
||||
/F2 3 0 R
|
||||
/F3 4 0 R >>
|
||||
endobj
|
||||
% 'F1': class PDFType1Font
|
||||
2 0 obj
|
||||
% Font Helvetica
|
||||
<< /BaseFont /Helvetica
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F1
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F2': class PDFType1Font
|
||||
3 0 obj
|
||||
% Font Courier-Bold
|
||||
<< /BaseFont /Courier-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F2
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'F3': class PDFType1Font
|
||||
4 0 obj
|
||||
% Font Helvetica-Bold
|
||||
<< /BaseFont /Helvetica-Bold
|
||||
/Encoding /WinAnsiEncoding
|
||||
/Name /F3
|
||||
/Subtype /Type1
|
||||
/Type /Font >>
|
||||
endobj
|
||||
% 'Page1': class PDFPage
|
||||
5 0 obj
|
||||
% Page dictionary
|
||||
<< /Contents 9 0 R
|
||||
/MediaBox [ 0
|
||||
0
|
||||
595.2756
|
||||
841.8898 ]
|
||||
/Parent 8 0 R
|
||||
/Resources << /Font 1 0 R
|
||||
/ProcSet [ /PDF
|
||||
/Text
|
||||
/ImageB
|
||||
/ImageC
|
||||
/ImageI ] >>
|
||||
/Rotate 0
|
||||
/Trans << >>
|
||||
/Type /Page >>
|
||||
endobj
|
||||
% 'R6': class PDFCatalog
|
||||
6 0 obj
|
||||
% Document Root
|
||||
<< /Outlines 10 0 R
|
||||
/PageMode /UseNone
|
||||
/Pages 8 0 R
|
||||
/Type /Catalog >>
|
||||
endobj
|
||||
% 'R7': class PDFInfo
|
||||
7 0 obj
|
||||
<< /Author (\(anonymous\))
|
||||
/CreationDate (D:20121217140300+05'00')
|
||||
/Creator (\(unspecified\))
|
||||
/Keywords ()
|
||||
/Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\))
|
||||
/Title (\(anonymous\)) >>
|
||||
endobj
|
||||
% 'R8': class PDFPages
|
||||
8 0 obj
|
||||
% page tree
|
||||
<< /Count 1
|
||||
/Kids [ 5 0 R ]
|
||||
/Type /Pages >>
|
||||
endobj
|
||||
% 'R9': class PDFStream
|
||||
9 0 obj
|
||||
% page stream
|
||||
<< /Filter [ /ASCII85Decode
|
||||
/FlateDecode ]
|
||||
/Length 552 >>
|
||||
stream
|
||||
Gas2H9i&Y\%#459qB())PEmM/RPkf<0Yrjt/r\QsLOF8uYu6r9nb9;PVX'UQ[;$]EM>bFc.Y-P(gilZtbUcHN!e^]g"/2(`]7:,*7mCu=)E*e@W>op@`>PBZJp7G#k@l0GCUYE47@;@HLn%pppDcgCh;3\<_e=Is2kP9$4qt_\#HjWCP@hhUY"H2WWnR:9(a^%*8DLOu3tc+6=9^hH:*iPmk#i2<j=1`K6N:0-d22A`+JkK*0M+)@$eUFf'$F0e'X_4M)hnp<=#7_9>Y/04\LXB_-1"T'6^giN7^i:+bIU"o2^+)gGNrU78K(Le3%fQV/1&Dh8pVnL1YgJFWPOOQ1,5:R:r=.QeX'.nAi`9L*^Ud"71PP!<$%uHjW\cqX?N3?C:L8R>^hq+I<uZqA6=9_%BFE?$h<Z75K2##U2S+jWP>>uc\9bkI/gUt7iI$;p?9tZ9pm@"!&*3R>;*a5ndZFclN$p%UoGG%ZOMOe$Z7e*2dZ3X\Qrl,DOF=<.##.U'7:-*n^]_2O29Rak7Js'^q'C"$q($o!HI`:nG<Be~>endstream
|
||||
endobj
|
||||
% 'R10': class PDFOutlines
|
||||
10 0 obj
|
||||
<< /Count 0
|
||||
/Type /Outlines >>
|
||||
endobj
|
||||
xref
|
||||
0 11
|
||||
0000000000 65535 f
|
||||
0000000113 00000 n
|
||||
0000000233 00000 n
|
||||
0000000398 00000 n
|
||||
0000000569 00000 n
|
||||
0000000742 00000 n
|
||||
0000001019 00000 n
|
||||
0000001154 00000 n
|
||||
0000001423 00000 n
|
||||
0000001528 00000 n
|
||||
0000002223 00000 n
|
||||
trailer
|
||||
<< /ID
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
[(\2514PW\375b\346M\037u\307 \354\014_\254) (\2514PW\375b\346M\037u\307 \354\014_\254)]
|
||||
|
||||
/Info 7 0 R
|
||||
/Root 6 0 R
|
||||
/Size 11 >>
|
||||
startxref
|
||||
2275
|
||||
%%EOF
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user