# Copyright 2010 Dirk Holtwick, holtwick.it # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from reportlab.lib.pagesizes import ( A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, B0, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, ELEVENSEVENTEEN, GOV_LEGAL, GOV_LETTER, HALF_LETTER, JUNIOR_LEGAL, LEDGER, LEGAL, LETTER, TABLOID, ) BOOL: int MUST: int TAGS: dict DEFAULT_CSS: str PML_WARNING: str = "warning" PML_ERROR: str = "error" PML_EXCEPTION: str = "PML Exception" PML_PREFIX: str = "pdf:" # CLASS = 1 BOOL = 2 FONT: int = 3 COLOR: int = 4 FILE: int = 5 SIZE: int = 6 INT: int = 7 STRING: int = 8 BOX: int = 9 POS: int = 10 # STYLE = 11 MUST = 23 #: Definition of all known tags. Also used for building the reference TAGS = { # FORMAT # "document": (1, { # "format": (["a0", "a1", "a2", "a3", "a4", "a5", "a6", # "b0", "b1", "b2", "b3", "b4", "b5", "b6", # "letter", "legal", "elevenseventeen"], "a4"), # "orientation": ["portrait", "landscape"], # "fullscreen": (BOOL, "0"), # "author": (STRING, ""), # "subject": (STRING, ""), # "title": (STRING, ""), # "duration": INT, # "showoutline": (BOOL, "0"), # "outline": INT, # }), "pdftemplate": ( 1, { "name": (STRING, "body"), "format": ( [ "a0", "a1", "a2", "a3", "a4", "a5", "a6", "b0", "b1", "b2", "b3", "b4", "b5", "b6", "letter", "legal", "elevenseventeen", ], "a4", ), "orientation": ["portrait", "landscape"], "background": FILE, }, ), "pdfframe": ( 0, { "name": (STRING, ""), "box": (BOX, MUST), "border": (BOOL, "0"), "static": (BOOL, "0"), }, ), # "static": (1, { # "name": STRING, # "box": (BOX, MUST), # "border": (BOOL, "0"), # }), "pdfnexttemplate": (0, {"name": (STRING, "body")}), "pdfnextpage": ( 0, { "name": (STRING, ""), # "background": FILE, }, ), "pdfnextframe": (0, {}), "pdffont": ( 0, { "src": (FILE, MUST), "name": (STRING, MUST), # "print": (BOOL, "0"), "encoding": (STRING, "WinAnsiEncoding"), }, ), "pdflanguage": (0, {"name": (STRING, "")}), "pdfdrawline": ( 0, { "from": (POS, MUST), "to": (POS, MUST), "color": (COLOR, "#000000"), "width": (SIZE, 1), }, ), "drawpoint": ( 0, {"pos": (POS, MUST), "color": (COLOR, "#000000"), "width": (SIZE, 1)}, ), "pdfdrawlines": ( 0, {"coords": (STRING, MUST), "color": (COLOR, "#000000"), "width": (SIZE, 1)}, ), "pdfdrawstring": ( 0, { "pos": (POS, MUST), "text": (STRING, MUST), "color": (COLOR, "#000000"), "align": (["left", "center", "right"], "right"), "valign": (["top", "middle", "bottom"], "bottom"), # "class": CLASS, "rotate": (INT, "0"), }, ), "pdfdrawimg": ( 0, { "pos": (POS, MUST), "src": (FILE, MUST), "width": SIZE, "height": SIZE, "align": (["left", "center", "right"], "right"), "valign": (["top", "middle", "bottom"], "bottom"), }, ), "pdfspacer": (0, {"height": (SIZE, MUST)}), "pdfpagenumber": (0, {"example": (STRING, "0")}), "pdfpagecount": (0, {}), "pdftoc": (0, {}), "pdfversion": (0, {}), "pdfkeeptogether": (1, {}), "pdfkeepinframe": ( 1, { "maxwidth": SIZE, "maxheight": SIZE, "mergespace": (INT, 1), "mode": (["error", "overflow", "shrink", "truncate"], "shrink"), "name": (STRING, ""), }, ), # The chart example, see pml_charts "pdfchart": ( 1, { "type": (["spider", "bar"], "bar"), "strokecolor": (COLOR, "#000000"), "width": (SIZE, MUST), "height": (SIZE, MUST), }, ), "pdfchartdata": ( 0, { "set": (STRING, MUST), "value": STRING, # "label": (STRING), "strokecolor": COLOR, "fillcolor": COLOR, "strokewidth": SIZE, }, ), "pdfchartlabel": (0, {"value": (STRING, MUST)}), "pdfbarcode": ( 0, { "value": (STRING, MUST), "type": ( [ "i2of5", "itf", "code39", "extendedcode39", "code93", "extendedcode93", "msi", "codabar", "nw7", "code11", "fim", "postnet", "usps4s", "code128", "ean13", "ean8", "qr", ], "code128", ), "humanreadable": (STRING, "0"), "vertical": (STRING, "0"), "checksum": (STRING, "1"), "barwidth": SIZE, "barheight": SIZE, "fontsize": SIZE, "align": (["baseline", "top", "middle", "bottom"], "baseline"), }, ), # ======================================================== "link": ( 0, { "href": (STRING, MUST), "rel": (STRING, ""), "type": (STRING, ""), "media": (STRING, "all"), "charset": (STRING, "latin1"), # XXX Must be something else... }, ), "meta": (0, {"name": (STRING, ""), "content": (STRING, "")}), "style": (0, {"type": (STRING, ""), "media": (STRING, "all")}), "img": ( 0, { "src": (FILE, MUST), "width": SIZE, "height": SIZE, "align": [ "top", "middle", "bottom", "left", "right", "texttop", "absmiddle", "absbottom", "baseline", ], }, ), "table": ( 1, { "align": (["left", "center", "right"], "left"), "valign": (["top", "bottom", "middle"], "middle"), "border": (SIZE, "0"), "bordercolor": (COLOR, "#000000"), "bgcolor": COLOR, "cellpadding": (SIZE, "0"), "cellspacing": (SIZE, "0"), "repeat": (INT, "0"), # XXX Remove this! Set to 0 "width": STRING, # "keepmaxwidth": SIZE, # "keepmaxheight": SIZE, # "keepmergespace": (INT, 1), # "keepmode": (["error", "overflow", "shrink", "truncate"], "shrink"), }, ), "tr": ( 1, { "bgcolor": COLOR, "valign": ["top", "bottom", "middle"], "border": SIZE, "bordercolor": (COLOR, "#000000"), }, ), "td": ( 1, { "align": ["left", "center", "right", "justify"], "valign": ["top", "bottom", "middle"], "width": STRING, "bgcolor": COLOR, "border": SIZE, "bordercolor": (COLOR, "#000000"), "colspan": INT, "rowspan": INT, }, ), "th": ( 1, { "align": ["left", "center", "right", "justify"], "valign": ["top", "bottom", "middle"], "width": STRING, "bgcolor": COLOR, "border": SIZE, "bordercolor": (COLOR, "#000000"), "colspan": INT, "rowspan": INT, }, ), "dl": (1, {}), "dd": (1, {}), "dt": (1, {}), "ol": (1, {"type": (["1", "a", "A", "i", "I"], "1"), "start": INT}), "ul": (1, {"type": (["circle", "disk", "square"], "disk")}), "li": (1, {}), "hr": ( 0, { "color": (COLOR, "#000000"), "size": (SIZE, "1"), "width": STRING, "align": ["left", "center", "right", "justify"], }, ), "div": ( 1, {"align": ["left", "center", "right", "justify"], "dir": ["ltr", "rtl"]}, ), "p": (1, {"align": ["left", "center", "right", "justify"], "dir": ["ltr", "rtl"]}), "body": (1, {"dir": ["ltr", "rtl"]}), "br": (0, {}), "h1": ( 1, { "outline": STRING, "closed": (INT, 0), "align": ["left", "center", "right", "justify"], }, ), "h2": ( 1, { "outline": STRING, "closed": (INT, 0), "align": ["left", "center", "right", "justify"], }, ), "h3": ( 1, { "outline": STRING, "closed": (INT, 0), "align": ["left", "center", "right", "justify"], }, ), "h4": ( 1, { "outline": STRING, "closed": (INT, 0), "align": ["left", "center", "right", "justify"], }, ), "h5": ( 1, { "outline": STRING, "closed": (INT, 0), "align": ["left", "center", "right", "justify"], }, ), "h6": ( 1, { "outline": STRING, "closed": (INT, 0), "align": ["left", "center", "right", "justify"], }, ), "font": (1, {"face": FONT, "color": COLOR, "size": STRING}), "a": (1, {"href": STRING, "name": STRING}), "input": ( 0, { "name": STRING, "value": STRING, "type": (["text", "hidden", "checkbox"], "text"), }, ), "textarea": (1, {"name": STRING, "cols": (SIZE, 40), "rows": (SIZE, 1)}), "select": (1, {"name": STRING, "value": STRING}), "option": (0, {"value": STRING}), } # XXX use "html" not "*" as default! DEFAULT_CSS = """ html { font-family: Helvetica; font-size: 10px; font-weight: normal; color: #000000; margin: 0; padding: 0; line-height: 150%; border: 1px none; display: inline; width: auto; height: auto; white-space: normal; } b, strong { font-weight: bold; } i, em { font-style: italic; } u { text-decoration: underline; } s, strike { text-decoration: line-through; } a { text-decoration: underline; color: blue; } ins { color: green; text-decoration: underline; } del { color: red; text-decoration: line-through; } pre, code, kbd, samp, tt { font-family: "Courier New"; } h1, h2, h3, h4, h5, h6 { font-weight:bold; -pdf-outline: true; -pdf-outline-open: false; } h1 { /*18px via YUI Fonts CSS foundation*/ font-size:138.5%; -pdf-outline-level: 0; } h2 { /*16px via YUI Fonts CSS foundation*/ font-size:123.1%; -pdf-outline-level: 1; } h3 { /*14px via YUI Fonts CSS foundation*/ font-size:108%; -pdf-outline-level: 2; } h4 { -pdf-outline-level: 3; } h5 { -pdf-outline-level: 4; } h6 { -pdf-outline-level: 5; } h1, h2, h3, h4, h5, h6, p, pre, hr { margin:1em 0; } address, blockquote, body, center, dl, dir, div, fieldset, form, h1, h2, h3, h4, h5, h6, hr, isindex, menu, noframes, noscript, ol, p, pre, table, th, tr, td, ul, li, dd, dt, pdftoc { display: block; } table { } tr, th, td { vertical-align: middle; width: auto; } th { text-align: center; font-weight: bold; } center { text-align: center; } big { font-size: 125%; } small { font-size: 75%; } ul { margin-left: 1.5em; list-style-type: disc; } ul ul { list-style-type: circle; } ul ul ul { list-style-type: square; } ol { list-style-type: decimal; margin-left: 1.5em; } ul li div:first-child { display: inline-block; } pre { white-space: pre; } blockquote { margin-left: 1.5em; margin-right: 1.5em; } noscript { display: none; } """ DEFAULT_LANGUAGE_LIST = { "arabic": "arabic", "hebrew": "hebrew", "persian": "persian", "urdu": "urdu", "pashto": "pashto", "sindhi": "sindhi", } DEFAULT_FONT = { "courier": "Courier", "courier-bold": "Courier-Bold", "courier-boldoblique": "Courier-BoldOblique", "courier-oblique": "Courier-Oblique", "helvetica": "Helvetica", "helvetica-bold": "Helvetica-Bold", "helvetica-boldoblique": "Helvetica-BoldOblique", "helvetica-oblique": "Helvetica-Oblique", "times": "Times-Roman", "times-roman": "Times-Roman", "times-bold": "Times-Bold", "times-boldoblique": "Times-BoldOblique", "times-oblique": "Times-Oblique", "symbol": "Symbol", "zapfdingbats": "ZapfDingbats", "zapf-dingbats": "ZapfDingbats", # Alias "arial": "Helvetica", "times new roman": "Times-Roman", "georgia": "Times-Roman", "serif": "Times-Roman", "sansserif": "Helvetica", "sans": "Helvetica", "monospaced": "Courier", "monospace": "Courier", "mono": "Courier", "courier new": "Courier", "verdana": "Helvetica", "geneva": "Helvetica", } PML_PAGESIZES = { "a0": A0, "a1": A1, "a2": A2, "a3": A3, "a4": A4, "a5": A5, "a6": A6, "a7": A7, "a8": A8, "a9": A9, "a10": A10, "b0": B0, "b1": B1, "b2": B2, "b3": B3, "b4": B4, "b5": B5, "b6": B6, "b7": B7, "b8": B8, "b9": B9, "b10": B10, "c0": C0, "c1": C1, "c2": C2, "c3": C3, "c4": C4, "c5": C5, "c6": C6, "c7": C7, "c8": C8, "c9": C9, "c10": C10, "letter": LETTER, "legal": LEGAL, "ledger": LEDGER, "elevenseventeen": ELEVENSEVENTEEN, "juniorlegal": JUNIOR_LEGAL, "halfletter": HALF_LETTER, "govletter": GOV_LETTER, "govlegal": GOV_LEGAL, "tabloid": TABLOID, }