示例#1
0
    def __init__(self, source_size, target_size, arguments):
        # pylint: disable=too-many-arguments
        if arguments.gap[0] is None:
            self.gap = papersize.parse_length("0")
        else:
            self.gap = arguments.gap[0]
        if arguments.margin[0] is None:
            self.margin = papersize.parse_length("0")
        else:
            self.margin = arguments.margin[0]

        if arguments.orientation == "landscape":
            self.grid = self._grid(
                source_size, papersize.rotate(target_size,
                                              papersize.LANDSCAPE))
        elif arguments.orientation == "portrait":
            self.grid = self._grid(
                source_size, papersize.rotate(target_size, papersize.PORTRAIT))
        else:
            self.grid = max(
                self._grid(source_size, target_size),
                self._grid(source_size, (target_size[1], target_size[0])),
                key=operator.attrgetter("pagenumber"),
            )

        if self.pages_per_page == 0:
            raise errors.PdfautonupError(
                "Error: Format constraints too tight: Cannot fit any"
                "source page into destination page.")

        super().__init__(self.grid.target, arguments)
示例#2
0
    def testExceptions(self):
        """Test module exceptions"""
        try:
            papersize.parse_length("cm")
        except papersize.CouldNotParse as error:
            self.assertEqual(str(error), "Could not parse string 'cm'.")

        try:
            papersize.rotate((1, 2), "portrait")
        except papersize.UnknownOrientation as error:
            self.assertEqual(
                str(error),
                "'portrait' is not one of `papersize.PORTRAIT` or `papersize.LANDSCAPE`",
            )
示例#3
0
def parse_lc_paper(string):
    """Parse LC_PAPER locale variable

    We assume units are milimeters.
    """
    dimensions = {}
    for line in string.split("\n"):
        if line.startswith("width="):
            dimensions["width"] = papersize.parse_length("{}mm".format(
                line[6:]))
        if line.startswith("height="):
            dimensions["height"] = papersize.parse_length("{}mm".format(
                line[7:]))
    if len(dimensions) == 2:
        return (dimensions["width"], dimensions["height"])
    raise errors.CouldNotParse(string)
示例#4
0
    def testParseLength(self):
        """Test :func:`papersize.parse_length`."""
        for (args, result) in [(("10cm", "mm"), 100), (("10in", ), 722.7)]:
            self.assertAlmostEqual(papersize.parse_length(*args),
                                   Decimal(result))

        self.assertRaises(papersize.CouldNotParse, papersize.parse_length,
                          "cm")
示例#5
0
def length_type(text):
    """Check type of length (number plus optional unit).

    Wrapper to :func:`papersize.parse_length`.
    """
    try:
        return papersize.parse_length(text)
    except papersize.CouldNotParse as error:
        raise argparse.ArgumentTypeError(str(error))
示例#6
0
dimorder = (1, 0, 2)

d1neighbours = [getneighbours(col, dimorder[0]) for col in colors]
d2neighbours = [[getneighbours(col, dimorder[1]) for col in sublist] for sublist in d1neighbours]
d3neighbours = [[[getneighbours(col, dimorder[2]) for col in sublist] for sublist in mainlist] for mainlist in d2neighbours]

# boxes along the x axis = 1st dimension * (2nd dimension + 1 for spacing) - 1
nx = (len(d3neighbours[0][0]) + 1) * len(d3neighbours[0][0][0]) - 1
# boxes along the y axis = ncolors * (3rd dimension + 1 for spacing) - 1
ny = (len(d3neighbours[0]) + 1) * len(colors) - 1

# all in pt
size = papersize.parse_papersize(args.paper)
if args.landscape:
  size = papersize.rotate(size, papersize.LANDSCAPE)
margin = papersize.parse_length(args.margin)

printsize = [s - 2*margin for s in size]
boxwidth = printsize[0] / nx
boxheight = printsize[1] / ny
print(f'{nx}x{ny} fits {boxwidth}x{boxheight}')

boxwidth = min(boxwidth, boxheight)
boxheight = min(boxwidth, boxheight)
print('box size: ' + str(boxheight/3) + ' mm')
#boxsize = min(boxwidth, boxheight)

# parse rectangle/square specs
#def parserectanglespec(spec):
#  try:
#    return papersize.parse_papersize(spec)
示例#7
0
def getpt(length):
    return mmtopt(float(papersize.parse_length(length, 'mm')))