예제 #1
0
파일: pdfdice.py 프로젝트: ffshr/prsannots
def copy_page(page):
    newpage = PageObject(page.pdf)
    newpage.update(page)
    # Copy Rectangles to be manipulatable
    for attr in PAGE_BOXES:
        if page.has_key(attr):
            newpage[NameObject(attr)] = RectangleObject(list(page[attr]))
    return newpage
예제 #2
0
def copy_page(page):
    newpage = PageObject(page.pdf)
    newpage.update(page)
    # Copy Rectangles to be manipulatable
    for attr in PAGE_BOXES:
        if page.has_key(attr):
            newpage[NameObject(attr)] = RectangleObject(list(page[attr]))
    return newpage
예제 #3
0
    def slice(self, ifile, ofile=None, marginv=0, marginh=0, columnwidth=0, centerwidth=0, scale=0.9):
        output = PdfFileWriter()
        input = PdfFileReader(file(ifile, "rb"))
        # print the title of document1.pdf
        print "title = %s" % (input.getDocumentInfo().title)
        print "Processing page: "
        for i in xrange(input.getNumPages()):
            print i+1
            # add left column as page
            page = PageObject.createBlankPage(input)
            page.mergePage(input.getPage(i))
            if columnwidth != 0 and centerwidth != 0:
                page.mediaBox.upperRight = (
                    page.mediaBox.getUpperLeft_x() + marginh + columnwidth,
                    page.mediaBox.getUpperRight_y() - marginv
                )
            else:
                page.mediaBox.upperRight = (
                    page.mediaBox.getUpperRight_x() / 2,
                    page.mediaBox.getUpperRight_y() - marginv
                )
            page.mediaBox.lowerLeft = (
                page.mediaBox.getLowerLeft_x() + marginh,
                page.mediaBox.getLowerLeft_y() + marginv,
            )
            page.scale(scale, scale)
            output.addPage(page)

            # add right column as page
            page = PageObject.createBlankPage(input)
            page.mergePage(input.getPage(i))
            if columnwidth != 0 and centerwidth != 0:
                page.mediaBox.lowerLeft = (
                    page.mediaBox.getLowerLeft_x() + marginh + columnwidth + centerwidth,
                    page.mediaBox.getLowerLeft_y() + marginv,
                )
            else:
                page.mediaBox.lowerLeft = (
                    page.mediaBox.getUpperRight_x() / 2,
                    page.mediaBox.getLowerLeft_y() + marginv,
                )
            page.mediaBox.upperRight = (
                page.mediaBox.getUpperRight_x() - marginh,
                page.mediaBox.getUpperRight_y() - marginv
            )
            page.scale(scale, scale)
            output.addPage(page)

        # finally, write "output"
        if ofile is not None:
            outputStream = file(ofile, "wb")
        else:
            outputStream = file(PdfSlicer.getOutName(ifile), "wb")
        output.write(outputStream)
        outputStream.close()
예제 #4
0
    def generate_files(self, pages, front_side_pages, back_side_pages):
        """
        scale each two pages to fit into one sheet, construct the document
        and write out two files: the front side and the back side files.
        """
        front_output = PdfFileWriter()
        back_output = PdfFileWriter()
        size = 841 / 2
        num_pages = pages.getNumPages()

        for index, page in enumerate(front_side_pages):
            #(w, h) = page_model.mediaBox.upperRight
            page_model = PageObject.createBlankPage(width=841, height=595)
            page_model.mergeScaledTranslatedPage(pages.getPage(page[0]), tx=0, ty=0, scale=0.7)
            page_model.mergeScaledTranslatedPage(pages.getPage(page[1]), tx=size, ty=0, scale=0.7)
            front_output.addPage(page_model)

            ProgressStatus.message = "Processing front  pages ... (%s of %s)" % (index, num_pages / 4)
            ProgressStatus.percentage = float(index) / float(pages.getNumPages() / 4) * 50
            if self.exiting: return

        for index, page in enumerate(back_side_pages):
            page_model = PageObject.createBlankPage(width=841, height=595)
            page_model.mergeScaledTranslatedPage(pages.getPage(page[0]), tx=0, ty=0, scale=0.7)
            page_model.mergeScaledTranslatedPage(pages.getPage(page[1]), tx=size, ty=0, scale=0.7)
            back_output.addPage(page_model)

            ProgressStatus.message = "Processing back pages ... (%s of %s)" % (index, num_pages / 4)
            ProgressStatus.percentage = float(index) / float(pages.getNumPages() / 4) * 50 + 50
            if self.exiting: return

        with file(path.join(self.job.directory, "(front_side_pages) " + path.basename(self.job.pdf_file)), "wb") as stream:
            ProgressStatus.message = "Writing files..."
            front_output.write(stream)

        with file(path.join(self.job.directory, "(back_side_pages) " + path.basename(self.job.pdf_file)), "wb") as stream:
            ProgressStatus.message = "Writing files..."
            back_output.write(stream)

        ProgressStatus.message = "Finished"
        ProgressStatus.percentage = 100
예제 #5
0
파일: tests.py 프로젝트: pombreda/pdfserver
 def replace_text(cls, page, text, replace):
     # HACK
     from pyPdf.pdf import ContentStream, PageObject
     from pyPdf.generic import TextStringObject, NameObject
     content = ContentStream(page["/Contents"].getObject(), page.pdf)
     for idx in range(len(content.operations)):
         operands, operator = content.operations[idx]
         if operator == 'Tj':
             operands[0] = TextStringObject(operands[0].replace(
                 text, replace))
     new_page = PageObject.createBlankPage(page.pdf)
     new_page.mergePage(page)
     new_page[NameObject('/Contents')] = content
     return new_page
예제 #6
0
파일: tests.py 프로젝트: cburgmer/pdfserver
 def replace_text(cls, page, text, replace):
     # HACK
     from pyPdf.pdf import ContentStream, PageObject
     from pyPdf.generic import TextStringObject, NameObject
     content = ContentStream(page["/Contents"].getObject(), page.pdf)
     for idx in range(len(content.operations)):
         operands, operator = content.operations[idx]
         if operator == 'Tj':
             operands[0] = TextStringObject(operands[0].replace(text,
                                                                replace))
     new_page = PageObject.createBlankPage(page.pdf)
     new_page.mergePage(page)
     new_page[NameObject('/Contents')] = content
     return new_page
예제 #7
0
def n_pages_on_one(pages, pages_sheet):
    width = float(pages[0].mediaBox.getWidth())
    height = float(pages[0].mediaBox.getHeight())

    # Calculate placement parameters
    rotation, scaling, cell_x_count, cell_y_count = _get_optimal_placement(
        width, height, pages_sheet)

    # Get placement matrix, ajust to rotation
    if rotation:
        # From down to up, left to right
        # Also ajust to "one-off issue"
        placement = list(product(range(1, cell_x_count+1),
                                 range(cell_y_count-1, -1, -1)))
    else:
        # From left to right, up to down
        placement = map(lambda (x, y): (y, x),
                        list(product(range(cell_y_count),
                                     range(cell_x_count))))

    new_pages = []

    # Merge pages
    for new_page_idx in range(int(math.ceil(1. * len(pages) / pages_sheet))):
        offset = new_page_idx * pages_sheet
        # Start from blank page
        new_page = PageObject.createBlankPage(None, width, height)

        # Get `pages_sheet` number of pages and merge together
        for idx, page in enumerate(pages[offset:offset+pages_sheet]):
            x, y = placement[idx]

            # Get coordinates
            w = width * x / cell_x_count
            h = height * (y+1) / cell_y_count
            # TODO align page so that it takes the center of its cell
            new_page.mergeRotatedScaledTranslatedPage(page,
                                                      rotation, scaling,
                                                      w, height-h)

        new_pages.append(new_page)

    return new_pages
    def analyze_webletter(self, pdf_letter):
        """
        Look if the web letter has a minimum of 2 page.
        If not add one blank page.
        """
        pdf = PdfFileReader(BytesIO(pdf_letter))

        if pdf.numPages < 2:
            final_pdf = PdfFileWriter()
            final_pdf.addPage(pdf.getPage(0))

            width = float(pdf.getPage(0).mediaBox.getWidth())
            height = float(pdf.getPage(0).mediaBox.getHeight())

            new_page = PageObject.createBlankPage(None, width, height)
            final_pdf.addPage(new_page)

            output_stream = BytesIO()
            final_pdf.write(output_stream)
            output_stream.seek(0)
            pdf_letter = output_stream.read()
            output_stream.close()
        return pdf_letter
    def analyze_webletter(self, pdf_letter):
        """
        Look if the web letter has a minimum of 2 page.
        If not add one blank page.
        """
        pdf = PdfFileReader(BytesIO(pdf_letter))

        if pdf.numPages < 2:
            final_pdf = PdfFileWriter()
            final_pdf.addPage(pdf.getPage(0))

            width = float(pdf.getPage(0).mediaBox.getWidth())
            height = float(pdf.getPage(0).mediaBox.getHeight())

            new_page = PageObject.createBlankPage(None, width, height)
            final_pdf.addPage(new_page)

            output_stream = BytesIO()
            final_pdf.write(output_stream)
            output_stream.seek(0)
            pdf_letter = output_stream.read()
            output_stream.close()
        return pdf_letter
예제 #10
0
    def generate_files(self, pages, front_side_pages, back_side_pages):
        """
        scale each two pages to fit into one sheet, construct the document
        and write out two files: the front side and the back side files.
        """
        front_output = PdfFileWriter()
        back_output = PdfFileWriter()
        size = 841 / 2
        num_pages = pages.getNumPages()

        for index, page in enumerate(front_side_pages):
            #(w, h) = page_model.mediaBox.upperRight
            page_model = PageObject.createBlankPage(width=841, height=595)
            page_model.mergeScaledTranslatedPage(pages.getPage(page[0]),
                                                 tx=0,
                                                 ty=0,
                                                 scale=0.7)
            page_model.mergeScaledTranslatedPage(pages.getPage(page[1]),
                                                 tx=size,
                                                 ty=0,
                                                 scale=0.7)
            front_output.addPage(page_model)

            ProgressStatus.message = "Processing front  pages ... (%s of %s)" % (
                index, num_pages / 4)
            ProgressStatus.percentage = float(index) / float(
                pages.getNumPages() / 4) * 50
            if self.exiting: return

        for index, page in enumerate(back_side_pages):
            page_model = PageObject.createBlankPage(width=841, height=595)
            page_model.mergeScaledTranslatedPage(pages.getPage(page[0]),
                                                 tx=0,
                                                 ty=0,
                                                 scale=0.7)
            page_model.mergeScaledTranslatedPage(pages.getPage(page[1]),
                                                 tx=size,
                                                 ty=0,
                                                 scale=0.7)
            back_output.addPage(page_model)

            ProgressStatus.message = "Processing back pages ... (%s of %s)" % (
                index, num_pages / 4)
            ProgressStatus.percentage = float(index) / float(
                pages.getNumPages() / 4) * 50 + 50
            if self.exiting: return

        with file(
                path.join(
                    self.job.directory,
                    "(front_side_pages) " + path.basename(self.job.pdf_file)),
                "wb") as stream:
            ProgressStatus.message = "Writing files..."
            front_output.write(stream)

        with file(
                path.join(
                    self.job.directory,
                    "(back_side_pages) " + path.basename(self.job.pdf_file)),
                "wb") as stream:
            ProgressStatus.message = "Writing files..."
            back_output.write(stream)

        ProgressStatus.message = "Finished"
        ProgressStatus.percentage = 100
예제 #11
0
def copyPage(page):
    newpage = PageObject(page.pdf)
    newpage.update(page)
    newpage[NameObject("/CropBox")] = RectangleObject(page.cropBox)
    return newpage
예제 #12
0
파일: merge.py 프로젝트: matrixise/printus
#!/usr/bin/env python

from pyPdf import PdfFileWriter, PdfFileReader
from pyPdf.pdf import PageObject

input1 = PdfFileReader(open('page1.pdf', 'rb'))

page1 = input1.getPage(0)

width, height = (page1.mediaBox.getWidth(), page1.mediaBox.getHeight())

output = PdfFileWriter()

for i in range(10):
    page = PageObject.createBlankPage(None, width, height)
    page.mergeScaledTranslatedPage(page1, 0.5, 0, 0)
    page.mergeScaledTranslatedPage(page1, 0.5, width/2, height/2)
    page.mergeScaledTranslatedPage(page1, 0.5, 0, height/2)
    page.mergeScaledTranslatedPage(page1, 0.5, width/2, 0)

    output.addPage(page)

outputStream = open('output.pdf', 'wb')
output.write(outputStream)
outputStream.close()
예제 #13
0
def copyPage(page):
	newpage = PageObject(page.pdf)
	newpage.update(page)
	newpage[NameObject("/CropBox")] = RectangleObject(page.cropBox)
	return newpage