Пример #1
0
def parseRaw(data, node):
    """Parse and process a simple DSL to handle creation of flowables.

    Supported (can add others on request):

    * PageBreak
    * EvenPageBreak
    * OddPageBreak
    * FrameBreak
    * Spacer width, height
    * Transition
    * SetPageCounter
    * TextAnnotation "text of annotation" x_begin=-1 y_begin=-1 x_end=-1 y_end=-1

    """
    elements = []
    lines = data.splitlines()
    for line in lines:
        lexer = shlex.shlex(line)
        lexer.whitespace += ','
        tokens = list(lexer)
        if not tokens:
            continue  # Empty line
        command = tokens[0]
        if command == 'PageBreak':
            if len(tokens) == 1:
                elements.append(MyPageBreak())
            else:
                elements.append(MyPageBreak(tokens[1]))
        elif command == 'EvenPageBreak':
            if len(tokens) == 1:
                elements.append(MyPageBreak(breakTo='even'))
            else:
                elements.append(MyPageBreak(tokens[1], breakTo='even'))
        elif command == 'OddPageBreak':
            if len(tokens) == 1:
                elements.append(MyPageBreak(breakTo='odd'))
            else:
                elements.append(MyPageBreak(tokens[1], breakTo='odd'))
        elif command == 'FrameBreak':
            if len(tokens) == 1:
                elements.append(CondPageBreak(99999))
            else:
                elements.append(CondPageBreak(float(tokens[1])))
        elif command == 'Spacer':
            elements.append(
                MySpacer(adjustUnits(tokens[1]), adjustUnits(tokens[2])))
        elif command == 'Transition':
            elements.append(Transition(*tokens[1:]))
        elif command == 'SetPageCounter':
            elements.append(flowables.PageCounter(*tokens[1:]))
        elif command == 'TextAnnotation':
            elements.append(TextAnnotation(*tokens[1:]))
        else:
            log.error('Unknown command %s in raw pdf directive [%s]' %
                      (command, nodeid(node)))
    return elements
Пример #2
0
def parseRaw(data, node):
    """Parse and process a simple DSL to handle creation of flowables.

    Supported (can add others on request):

    * PageBreak

    * Spacer width, height

    """
    elements = []
    lines = data.splitlines()
    for line in lines:
        lexer = shlex.shlex(line)
        lexer.whitespace += ','
        tokens = list(lexer)
        if not tokens:
            continue # Empty line
        command = tokens[0]
        if command == 'PageBreak':
            if len(tokens) == 1:
                elements.append(MyPageBreak())
            else:
                elements.append(MyPageBreak(tokens[1]))
        elif command == 'EvenPageBreak':
            if len(tokens) == 1:
                elements.append(MyPageBreak(breakTo='even'))
            else:
                elements.append(MyPageBreak(tokens[1],breakTo='even'))
        elif command == 'OddPageBreak':
            if len(tokens) == 1:
                elements.append(MyPageBreak(breakTo='odd'))
            else:
                elements.append(MyPageBreak(tokens[1],breakTo='odd'))
        elif command == 'FrameBreak':
            if len(tokens) == 1:
                elements.append(CondPageBreak(99999))
            else:
                elements.append(CondPageBreak(float(tokens[1])))
        elif command == 'Spacer':
            elements.append(MySpacer(adjustUnits(tokens[1]),
                adjustUnits(tokens[2])))
        elif command == 'Transition':
            elements.append(Transition(*tokens[1:]))
        elif command == 'SetPageCounter':
            elements.append(flowables.PageCounter(*tokens[1:]))
        else:
            log.error('Unknown command %s in raw pdf directive [%s]'%(command,nodeid(node)))
    return elements
Пример #3
0
 def wrap(self, availWidth, availHeight):
     """If we need more width than we have, complain, keep a scale"""
     if self.style:
         bp = self.style.__dict__.get("borderPadding", 0)
         bw = self.style.__dict__.get("borderWidth", 0)
         if isinstance(bp,list):
             self.pad = [bp[0] + bw + .1,
                         bp[1] + bw + .1,
                         bp[2] + bw + .1,
                         bp[3] + bw + .1]
         else:
             self.pad = [bp + bw + .1,
                         bp + bw + .1,
                         bp + bw + .1,
                         bp + bw + .1]
     else:
         self.pad = [0,0,0,0]
     maxWidth = float(min(
         styles.adjustUnits(self.maxWidth, availWidth) or availWidth,
                            availWidth))
     self.maxWidth = maxWidth
     maxWidth -= (self.pad[1]+self.pad[3])
     self.width, self.height = _listWrapOn(self.content, maxWidth, None)
     self.scale = 1.0
     if self.width > maxWidth:
         if self.mode <> 'shrink':
             log.warning("BoundByWidth too wide to fit in frame (%s > %s): %s",
                 self.width,maxWidth,self.identity())
         if self.mode == 'shrink':
             self.scale = (maxWidth + self.pad[1]+self.pad[3])/\
                 (self.width + self.pad[1]+self.pad[3])
             self.height *= self.scale
     return self.width, self.height + (self.pad[0]+self.pad[2])*self.scale
Пример #4
0
 def wrap(self, availWidth, availHeight):
     """If we need more width than we have, complain, keep a scale"""
     self.pad = self.border_padding(True, 0.1)
     maxWidth = float(
         min(
             styles.adjustUnits(self.maxWidth, availWidth) or availWidth,
             availWidth))
     self.maxWidth = maxWidth
     maxWidth -= (self.pad[1] + self.pad[3])
     self.width, self.height = _listWrapOn(self.content, maxWidth, None)
     if self.width > maxWidth:
         if self.mode <> 'shrink':
             self.scale = 1.0
             log.warning(
                 "BoundByWidth too wide to fit in frame (%s > %s): %s",
                 self.width, maxWidth, self.identity())
         if self.mode == 'shrink' and not self.scale:
             self.scale = (maxWidth + self.pad[1]+self.pad[3])/\
                 (self.width + self.pad[1]+self.pad[3])
     else:
         self.scale = 1.0
     self.height *= self.scale
     self.width *= self.scale
     return self.width, self.height + (self.pad[0] +
                                       self.pad[2]) * self.scale
Пример #5
0
def parseRaw(data):
    """Parse and process a simple DSL to handle creation of flowables.

    Supported (can add others on request):

    * PageBreak

    * Spacer width, height

    """
    elements = []
    lines = data.splitlines()
    for line in lines:
        lexer = shlex.shlex(line)
        lexer.whitespace += ','
        tokens = list(lexer)
        command = tokens[0]
        if command == 'PageBreak':
            if len(tokens) == 1:
                elements.append(MyPageBreak())
            else:
                elements.append(MyPageBreak(tokens[1]))
        elif command == 'EvenPageBreak':
            if len(tokens) == 1:
                elements.append(MyPageBreak(breakTo='even'))
            else:
                elements.append(MyPageBreak(tokens[1], breakTo='even'))
        elif command == 'OddPageBreak':
            if len(tokens) == 1:
                elements.append(MyPageBreak(breakTo='odd'))
            else:
                elements.append(MyPageBreak(tokens[1], breakTo='odd'))
        elif command == 'Spacer':
            elements.append(
                Spacer(adjustUnits(tokens[1]), adjustUnits(tokens[2])))
        elif command == 'Transition':
            elements.append(Transition(*tokens[1:]))
        elif command == 'SetPageCounter':
            elements.append(flowables.PageCounter(*tokens[1:]))
        else:
            log.error('Unknown command %s in raw pdf directive' % command)
    return elements
Пример #6
0
 def wrap(self, availWidth, availHeight):
     """If we need more width than we have, complain, keep a scale"""
     self.pad = self.border_padding(True, 0.1)
     maxWidth = float(min(
         styles.adjustUnits(self.maxWidth, availWidth) or availWidth,
                            availWidth))
     self.maxWidth = maxWidth
     maxWidth -= (self.pad[1]+self.pad[3])
     self.width, self.height = _listWrapOn(self.content, maxWidth, None)
     if self.width > maxWidth:
         if self.mode <> 'shrink':
             self.scale = 1.0
             log.warning("BoundByWidth too wide to fit in frame (%s > %s): %s",
                 self.width,maxWidth,self.identity())
         if self.mode == 'shrink' and not self.scale:
             self.scale = (maxWidth + self.pad[1]+self.pad[3])/\
                 (self.width + self.pad[1]+self.pad[3])
     else:
         self.scale = 1.0
     self.height *= self.scale
     self.width *= self.scale
     return self.width, self.height + (self.pad[0]+self.pad[2])*self.scale
Пример #7
0
 def adjust(*args, **kwargs):
     kwargs['total']=w
     return styles.adjustUnits(*args, **kwargs)
Пример #8
0
 def adjust(*args, **kwargs):
     kwargs['total']=w
     return styles.adjustUnits(*args, **kwargs)