def allModesKIF(just, ifb=True, width=170):
     if ifb: fbreak()
     story.append(
         KeepInFrame(width - offset,
                     284 - offset,
                     subStory(texts=(text0, )),
                     mode=mode,
                     hAlign=just))
     fbreak()
     story.append(
         KeepInFrame(width - offset,
                     284 - offset,
                     subStory(texts=(text0, text1)),
                     mode=mode,
                     hAlign=just))
     fbreak()
     story.append(
         KeepInFrame(width - offset,
                     284 - offset,
                     subStory(texts=(text0, text1, text2)),
                     mode=mode,
                     hAlign=just))
     fbreak()
     story.append(
         KeepInFrame(width - offset,
                     284 - offset,
                     subStory(texts=(text0, text1, text2), fbg=1),
                     mode=mode,
                     hAlign=just))
Пример #2
0
def _KeepInFrameTestCase(self, mode, offset=12):
    story = []

    def fbreak(story=story):
        story.append(FrameBreak())

    styleSheet = getSampleStyleSheet()
    H1 = styleSheet['Heading1']
    H1.pageBreakBefore = 0
    H1.keepWithNext = 0
    bt = styleSheet['BodyText']
    story.append(
        KeepInFrame(170 - offset,
                    284 - offset, [Paragraph(text0, bt)],
                    mode=mode))
    fbreak()
    story.append(
        KeepInFrame(
            170 - offset,
            284 - offset,
            [Paragraph(text0, bt), Paragraph(text1, bt)],
            mode=mode))
    fbreak()
    story.append(
        KeepInFrame(
            170 - offset,
            284 - offset,
            [Paragraph(text0, bt),
             Paragraph(text1, bt),
             Paragraph(text2, bt)],
            mode=mode))
    _showDoc('test_platypus_KeepInFrame%s.pdf' % mode, story)
Пример #3
0
    def draw(self):
        self.canv.saveState()

        XP, YP = self.xp, self.yp
        self.resize_images(self.text)
        story = self.text
        W, H = (self.width - self.lm - self.rm), self.yp - self.y0 - self.bm
        # possible modes: shrink, truncate, overflow, error
        frame = KeepInFrame(W, H, story, mode="shrink")
        w, h = frame.wrapOn(self.canv, W, H)
        frame.drawOn(self.canv, self.xp, self.yp - h)
        self.addSpace(0, -h - 5 * mm)
        self.canv.restoreState()
Пример #4
0
    def test(self):
        outPDF = "test_compare.pdf"
        pageSize = pagesizes.portrait(pagesizes.A4)
        canv = Canvas(outPDF, pagesize=pageSize)

        # common variables
        W, H = 5 * cm, 20 * cm
        kifMode = "shrink"  # overflow/truncate/shrink/error

        # hyphenated column
        p = HyParagraph(testdata, sth)
        story = [p]
        frame = KeepInFrame(W, H, story, mode=kifMode)
        w, h = frame.wrapOn(canv, W, H)
        x, y = 100, 100
        frame.drawOn(canv, x, y + (H - h))
        canv.setLineWidth(2)
        canv.setStrokeColor(black)
        canv.circle(x, y, 10)
        canv.setStrokeColor(red)
        canv.rect(x, y, W, H)
        canv.setLineWidth(1)
        canv.setStrokeColor(blue)
        canv.rect(x, y + (H - h), w, h)

        # non-hyphenated column
        p = Paragraph(testdata, st)
        story = [p]
        frame = KeepInFrame(W, H, story, mode=kifMode)
        w, h = frame.wrapOn(canv, W, H)
        x, y = 300, 100
        frame.drawOn(canv, x, y + (H - h))
        canv.setLineWidth(2)
        canv.setStrokeColor(black)
        canv.circle(x, y, 10)
        canv.setStrokeColor(red)
        canv.rect(x, y, W, H)
        canv.setLineWidth(1)
        canv.setStrokeColor(blue)
        canv.rect(x, y + (H - h), w, h)

        canv.showPage()
        canv.save()
Пример #5
0
    def end(self, c):
        tdata = c.tableData

        c.addPara()
        cell = c.story

        # Handle empty cells, they otherwise collapse
        if not cell:
            cell = ' '

        c.swapStory(self.story)

        # zellen hinzufügen
        if 0:  # tdata.keepinframe["maxWidth"] and tdata.keepinframe["maxHeight"]:
            # print tdata.keepinframe
            tdata.keepinframe["content"] = cell
            cell = KeepInFrame(**tdata.keepinframe)

        tdata.add_cell(cell)
Пример #6
0
def pisaLoop(node, context, path=None, **kw):
    if path is None:
        path = []

    # Initialize KW
    if not kw:
        kw = {
            "margin-top": 0,
            "margin-bottom": 0,
            "margin-left": 0,
            "margin-right": 0,
        }
    else:
        kw = copy.copy(kw)

    # indent = len(path) * "  " # only used for debug print statements

    # TEXT
    if node.nodeType == Node.TEXT_NODE:
        # print indent, "#", repr(node.data) #, context.frag
        context.addFrag(node.data)

        # context.text.append(node.value)

    # ELEMENT
    elif node.nodeType == Node.ELEMENT_NODE:

        node.tagName = node.tagName.replace(":", "").lower()

        if node.tagName in ("style", "script"):
            return

        path = copy.copy(path) + [node.tagName]

        # Prepare attributes
        attr = pisaGetAttributes(context, node.tagName, node.attributes)
        # log.debug(indent + "<%s %s>" % (node.tagName, attr) +
        # repr(node.attributes.items())) #, path

        # Calculate styles
        context.cssAttr = CSSCollect(node, context)
        context.cssAttr = mapNonStandardAttrs(context.cssAttr, node, attr)
        context.node = node

        # Block?
        PAGE_BREAK = 1
        PAGE_BREAK_RIGHT = 2
        PAGE_BREAK_LEFT = 3

        pageBreakAfter = False
        frameBreakAfter = False
        display = lower(context.cssAttr.get("display", "inline"))
        # print indent, node.tagName, display,
        # context.cssAttr.get("background-color", None), attr
        isBlock = (display == "block")

        if isBlock:
            context.addPara()

            # Page break by CSS
            if "-pdf-next-page" in context.cssAttr:
                context.addStory(
                    NextPageTemplate(str(context.cssAttr["-pdf-next-page"])))
            if "-pdf-page-break" in context.cssAttr:
                if str(context.cssAttr["-pdf-page-break"]).lower() == "before":
                    context.addStory(PageBreak())
            if "-pdf-frame-break" in context.cssAttr:
                if str(context.cssAttr["-pdf-frame-break"]).lower() == "before":
                    context.addStory(FrameBreak())
                if str(context.cssAttr["-pdf-frame-break"]).lower() == "after":
                    frameBreakAfter = True
            if "page-break-before" in context.cssAttr:
                if str(context.cssAttr["page-break-before"]).lower() == "always":
                    context.addStory(PageBreak())
                if str(context.cssAttr["page-break-before"]).lower() == "right":
                    context.addStory(PageBreak())
                    context.addStory(PmlRightPageBreak())
                if str(context.cssAttr["page-break-before"]).lower() == "left":
                    context.addStory(PageBreak())
                    context.addStory(PmlLeftPageBreak())
            if "page-break-after" in context.cssAttr:
                if str(context.cssAttr["page-break-after"]).lower() == "always":
                    pageBreakAfter = PAGE_BREAK
                if str(context.cssAttr["page-break-after"]).lower() == "right":
                    pageBreakAfter = PAGE_BREAK_RIGHT
                if str(context.cssAttr["page-break-after"]).lower() == "left":
                    pageBreakAfter = PAGE_BREAK_LEFT

        if display == "none":
            # print "none!"
            return

        # Translate CSS to frags

        # Save previous frag styles
        context.pushFrag()

        # Map styles to Reportlab fragment properties
        CSS2Frag(context, kw, isBlock)

        # EXTRAS
        transform_attrs(context.frag,
                        (
                            ("keepWithNext", "-pdf-keep-with-next"),
                            ("outline", "-pdf-outline"),
                            ("borderLeftColor", "-pdf-outline-open"),
                        ),
                        context.cssAttr,
                        getBool
                        )

        if "-pdf-outline-level" in context.cssAttr:
            context.frag.outlineLevel = int(
                context.cssAttr["-pdf-outline-level"])

        if "-pdf-word-wrap" in context.cssAttr:
            context.frag.wordWrap = context.cssAttr["-pdf-word-wrap"]

        # handle keep-in-frame
        keepInFrameMode = None
        keepInFrameMaxWidth = 0
        keepInFrameMaxHeight = 0
        if "-pdf-keep-in-frame-mode" in context.cssAttr:
            value = str(
                context.cssAttr["-pdf-keep-in-frame-mode"]).strip().lower()
            if value in ("shrink", "error", "overflow", "truncate"):
                keepInFrameMode = value
            else:
                keepInFrameMode = "shrink"
            # Added because we need a default value.

        if "-pdf-keep-in-frame-max-width" in context.cssAttr:
            keepInFrameMaxWidth = getSize(
                "".join(context.cssAttr["-pdf-keep-in-frame-max-width"]))
        if "-pdf-keep-in-frame-max-height" in context.cssAttr:
            keepInFrameMaxHeight = getSize(
                "".join(context.cssAttr["-pdf-keep-in-frame-max-height"]))

        # ignore nested keep-in-frames, tables have their own KIF handling
        keepInFrame = keepInFrameMode is not None and context.keepInFrameIndex is None
        if keepInFrame:
            # keep track of current story index, so we can wrap everythink
            # added after this point in a KeepInFrame
            context.keepInFrameIndex = len(context.story)

        # BEGIN tag
        klass = globals().get("pisaTag%s" %
                              node.tagName.replace(":", "").upper(), None)
        obj = None

        # Static block
        elementId = attr.get("id", None)
        staticFrame = context.frameStatic.get(elementId, None)
        if staticFrame:
            context.frag.insideStaticFrame += 1
            oldStory = context.swapStory()

        # Tag specific operations
        if klass is not None:
            obj = klass(node, attr)
            obj.start(context)

        # Visit child nodes
        context.fragBlock = fragBlock = copy.copy(context.frag)
        for nnode in node.childNodes:
            pisaLoop(nnode, context, path, **kw)
        context.fragBlock = fragBlock

        # END tag
        if obj:
            obj.end(context)

        # Block?
        if isBlock:
            context.addPara()

            # XXX Buggy!

            # Page break by CSS
            if pageBreakAfter:
                context.addStory(PageBreak())
                if pageBreakAfter == PAGE_BREAK_RIGHT:
                    context.addStory(PmlRightPageBreak())
                if pageBreakAfter == PAGE_BREAK_LEFT:
                    context.addStory(PmlLeftPageBreak())
            if frameBreakAfter:
                context.addStory(FrameBreak())

        if keepInFrame:
            # get all content added after start of -pdf-keep-in-frame and wrap
            # it in a KeepInFrame
            substory = context.story[context.keepInFrameIndex:]
            context.story = context.story[:context.keepInFrameIndex]
            context.story.append(
                KeepInFrame(
                    content=substory,
                    maxWidth=keepInFrameMaxWidth,
                    maxHeight=keepInFrameMaxHeight,
                    mode=keepInFrameMode))
            # mode wasn't being used; it is necessary for tables or images at
            # end of page.
            context.keepInFrameIndex = None

        # Static block, END
        if staticFrame:
            context.addPara()
            for frame in staticFrame:
                frame.pisaStaticStory = context.story
            context.swapStory(oldStory)
            context.frag.insideStaticFrame -= 1

        # context.debug(1, indent, "</%s>" % (node.tagName))

        # Reset frag style
        context.pullFrag()

    # Unknown or not handled
    else:
        # context.debug(1, indent, "???", node, node.nodeType, repr(node))
        # Loop over children
        for node in node.childNodes:
            pisaLoop(node, context, path, **kw)
Пример #7
0
 def wrap(self, availWidth, availHeight):
     availWidth = max(availWidth, 1.0)
     self.maxWidth = availWidth
     self.maxHeight = self.setMaxHeight(availHeight)
     return KeepInFrame.wrap(self, availWidth, availHeight)
Пример #8
0
 def wrap(self, availWidth, availHeight):
     availWidth = max(availWidth, 1.0)
     self.maxWidth = availWidth
     self.maxHeight = self.setMaxHeight(availHeight)
     return KeepInFrame.wrap(self, availWidth, availHeight)
Пример #9
0
 def drawAt(self, x, y):
     KeepInFrame.drawOn(self, self.ctx.canvas, x, self.ctx.page_height - y)
Пример #10
0
 def __init__(self, ctx, *args, **kwargs):
     self.ctx = ctx
     self.canv = None  # bug?
     KeepInFrame.__init__(self, *args, **kwargs)