Ejemplo n.º 1
0
    def pair_pages(self):
        """
        construct an empty pdf file object and append as many blank pages to
        the end to pair the pages.
        """
        paired_pages = PdfFileWriter()

        for page in PdfFileReader(file(self.job.pdf_file, "rb")).pages:
            paired_pages.addPage(page)

#       while paired_pages.getNumPages() % 4 != 0:
#           paired_pages.addBlankPage()

        return paired_pages
Ejemplo n.º 2
0
 def get_pdf(self, text, use_design=False):
     """
     Given the text, produces an A4 blank PDF with the text put in the
     position given by the tranlsation box.
     :param text: Text to put inside a translation box
     :param use_design: Set to true to use a design in the background
     :return: Rendered PDF
     :rtype: pypdf.PdfFileReader if use_design is False or PdfFileWriter
     """
     self.ensure_one()
     packet = StringIO.StringIO()
     can = Canvas(packet, bottomup=0)
     text_wrap = self._wrap_text(text, can._fontname, can._fontsize)
     top = self.top * inch
     left = self.left * inch
     for line in text_wrap[:self.nb_lines + 1]:
         can.drawString(left, top, line)
         top += can._leading
     can.save()
     # Move to the beginning of the StringIO buffer
     packet.seek(0)
     remaining = ''
     if len(text_wrap) > self.nb_lines:
         remaining = ' '.join(text_wrap[self.nb_lines + 1:])
     out_pdf = PdfFileReader(packet)
     if use_design:
         design_pdf_path = self.env['ir.config_parameter'].get_param(
             'sbc_compassion.composition_design')
         if design_pdf_path:
             design_pdf = PdfFileReader(file(design_pdf_path, 'rb'))
             page = design_pdf.getPage(0)
             page.mergePage(out_pdf.getPage(0))
             out_pdf = PdfFileWriter()
             out_pdf.addPage(page)
     return out_pdf, remaining
Ejemplo n.º 3
0
def processFile(pdfFileNameIn, pdfFileNameOut):
    pdfFile = readTheFile(pdfFileNameIn)
    columns = verticalColumns(pdfFile, 2)
    writer = PdfFileWriter()
    outputStream = file(pdfFileNameOut, "wb")
    splitWithColumns(pdfFile.pages, columns, writer, outputStream)
    outputStream.close()
    def preview(self):
        """ Generate a picture for preview.
        """
        pdf = self._get_pdf(self.sponsorship_ids[0], preview=True)
        if self.s2b_template_id.layout == 'CH-A-3S01-1':
            # Read page 2
            in_pdf = PdfFileReader(BytesIO(pdf))
            output_pdf = PdfFileWriter()
            out_data = BytesIO()
            output_pdf.addPage(in_pdf.getPage(1))
            output_pdf.write(out_data)
            out_data.seek(0)
            pdf = out_data.read()

        with Image(blob=pdf) as pdf_image:
            preview = base64.b64encode(pdf_image.make_blob(format='jpeg'))

        return self.write({'state': 'preview', 'preview_image': preview})
Ejemplo n.º 5
0
    def create(self, vals):
        """ Create a message for sending the CommKit after be translated on
             the local translate plaform.
        """
        if vals.get('direction') == "Beneficiary To Supporter":
            correspondence = super(Correspondence, self).create(vals)
        else:
            sponsorship = self.env['recurring.contract'].browse(
                vals['sponsorship_id'])

            original_lang = self.env['res.lang.compassion'].browse(
                vals.get('original_language_id'))

            # TODO Remove this fix when HAITI case is resolved
            # For now, we switch French to Creole for avoiding translation
            if 'HA' in sponsorship.child_id.local_id:
                french = self.env.ref(
                    'child_compassion.lang_compassion_french')
                creole = self.env.ref(
                    'child_compassion.lang_compassion_haitien_creole')
                if original_lang == french:
                    vals['original_language_id'] = creole.id

            if original_lang.translatable and original_lang not in sponsorship\
                    .child_id.project_id.field_office_id.spoken_language_ids:
                correspondence = super(
                    Correspondence,
                    self.with_context(no_comm_kit=True)).create(vals)
                correspondence.send_local_translate()
            else:
                correspondence = super(Correspondence, self).create(vals)

        # Swap pages for L3 layouts as we scan in wrong order
        if correspondence.template_id.layout == 'CH-A-3S01-1' and \
                correspondence.source != 'compassion':
            input_pdf = PdfFileReader(
                BytesIO(base64.b64decode(correspondence.letter_image)))
            output_pdf = PdfFileWriter()
            nb_pages = input_pdf.numPages
            if nb_pages >= 2:
                output_pdf.addPage(input_pdf.getPage(1))
                output_pdf.addPage(input_pdf.getPage(0))
                if nb_pages > 2:
                    for i in range(2, nb_pages):
                        output_pdf.addPage(input_pdf.getPage(i))
                letter_data = BytesIO()
                output_pdf.write(letter_data)
                letter_data.seek(0)
                correspondence.write(
                    {'letter_image': base64.b64encode(letter_data.read())})

        return correspondence
Ejemplo n.º 6
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
    def create(self, vals):
        """ Create a message for sending the CommKit after be translated on
             the local translate plaform.
        """
        if vals.get('direction') == "Beneficiary To Supporter":
            correspondence = super(Correspondence, self).create(vals)
        else:
            sponsorship = self.env['recurring.contract'].browse(
                vals['sponsorship_id'])

            original_lang = self.env['res.lang.compassion'].browse(
                vals.get('original_language_id'))

            # TODO Remove this fix when HAITI case is resolved
            # For now, we switch French to Creole for avoiding translation
            if 'HA' in sponsorship.child_id.local_id:
                french = self.env.ref(
                    'child_compassion.lang_compassion_french')
                creole = self.env.ref(
                    'child_compassion.lang_compassion_haitien_creole')
                if original_lang == french:
                    vals['original_language_id'] = creole.id

            if original_lang.translatable and original_lang not in sponsorship\
                    .child_id.project_id.field_office_id.spoken_language_ids:
                correspondence = super(Correspondence, self.with_context(
                    no_comm_kit=True)).create(vals)
                correspondence.send_local_translate()
            else:
                correspondence = super(Correspondence, self).create(vals)

        # Swap pages for L3 layouts as we scan in wrong order
        if correspondence.template_id.layout == 'CH-A-3S01-1' and \
                correspondence.source != 'compassion':
            input_pdf = PdfFileReader(BytesIO(base64.b64decode(
                correspondence.letter_image)))
            output_pdf = PdfFileWriter()
            nb_pages = input_pdf.numPages
            if nb_pages >= 2:
                output_pdf.addPage(input_pdf.getPage(1))
                output_pdf.addPage(input_pdf.getPage(0))
                if nb_pages > 2:
                    for i in range(2, nb_pages):
                        output_pdf.addPage(input_pdf.getPage(i))
                letter_data = BytesIO()
                output_pdf.write(letter_data)
                letter_data.seek(0)
                correspondence.write({
                    'letter_image': base64.b64encode(letter_data.read())
                })

        return correspondence
Ejemplo n.º 8
0
def dice(inpdf, ncols, nrows, crop=0, overlap=0.05):
    """Dice each page in the PDF file into a number of sub-pages.
    
    Inputs: inpdf       The pyPdf.PdfFileReader to be diced.
            
            ncols       Each page will be diced into ncols columns and
            nrows       nrows rows.
            
            crop        The amount to crop from the edges of page in
                        Postscript points (1/72 in).  Either a number or
                        as list of 1, 2 (horizontal, vertical), or 4
                        (left, bottom, right, top) numbers.
            
            overlap     The amount of overlap for the sub-pages, as a
                        percentage of the cropped page size.  Either a
                        float or a list of two floats for the horizontal
                        and vertical overlaps.
    
    Output: outpdf      A pyPdf.PdfFileWriter for the diced PDF.
            
            dice_map    A list of tuples, one for each page in outpdf.
                        Each tuple is of the form (page, bbox), where
                        page is the page in inpdf and bbox a tuple of
                        length 4 giving the bounding box that specifies
                        the diced page on the original page.
    
    """
    if isinstance(crop, (float, int)):
        crop = (crop, )
    if len(crop) == 1:
        crop = (crop[0], crop[0], crop[0], crop[0])
    elif len(crop) == 2:
        crop = (crop[0], crop[1], crop[0], crop[1])
    elif len(crop) != 4:
        raise ValueError, "crop must be length 1, 2, or 4."

    if isinstance(overlap, (float, int)):
        overlap = (overlap, overlap)
    if len(overlap) == 1:
        overlap = (overlap[0], overlap[0])

    outpdf = PdfFileWriter()
    dice_map = []
    for i, page in enumerate(inpdf.pages):
        bboxes = dice_page(outpdf, page, ncols, nrows, crop, overlap)
        for bbox in bboxes:
            dice_map.append((i, bbox))
    return outpdf, dice_map
Ejemplo n.º 9
0
    def pair_pages(self):
        """
        construct an empty pdf file object and append as many blank pages to
        the end to pair the pages.
        """
        paired_pages = PdfFileWriter()

        for page in PdfFileReader(file(self.job.pdf_file, "rb")).pages:
            paired_pages.addPage(page)

        while paired_pages.getNumPages() % 4 != 0:
            paired_pages.addBlankPage()

        return  paired_pages
Ejemplo n.º 10
0
    def preview(self):
        """ Generate a picture for preview.
        """
        pdf = self._get_pdf(self.sponsorship_ids[0], preview=True)
        if self.s2b_template_id.layout == 'CH-A-3S01-1':
            # Read page 2
            in_pdf = PdfFileReader(BytesIO(pdf))
            output_pdf = PdfFileWriter()
            out_data = BytesIO()
            output_pdf.addPage(in_pdf.getPage(1))
            output_pdf.write(out_data)
            out_data.seek(0)
            pdf = out_data.read()

        with Image(blob=pdf) as pdf_image:
            preview = base64.b64encode(pdf_image.make_blob(format='jpeg'))

        return self.write({'state': 'preview', 'preview_image': preview})
Ejemplo n.º 11
0
    def mergePdf(self):
    #        self.threadPdfWritingStatus.emit(
    #            '<font size=4><b>Method "%s": </b></font><b>Setting Title for</b> %s<b>. Please Wait...</b><br />' % (
    #                self.groupType, self.url))
        self.threadPdfWritingStatus.emit(
            '<b>Setting Title for</b> %s<b>. Please Wait...</b><br />' % self.url)

        packet = StringIO()
        # create a new PDF with Reportlab
        pdfCanvas = canvas.Canvas(packet, pagesize=A4)
        pdfCanvas.setFont('Helvetica', 8)
        if len(self.title) is 0:
            self.title = str(self.url).split('/')[-1]
            self.title = self.regex.getSearchedData('(?i)([a-zA-Z0-9-_ ]*?)\.[a-zA-Z0-9_]*$', self.title)
            self.title = self.regex.replaceData('(?i)_', ' ', self.title)
        title = unicode(self.title[:57] + '...') if  (len(self.title) > 60) else unicode(self.title)
        url = self.url[:57] + '...' if (len(self.title) > 60) else self.url
        pdfCanvas.drawString(5, 830, title + '                      ' + str(url).lower())
        d = datetime.datetime.now()
        strDate = str(d.strftime("%Y-%m-%d %H-%M-%S %p"))
        pdfCanvas.drawString(420, 5, 'Created Date Time: ' + strDate)
        pdfCanvas.save()
        packet.seek(0)
        newPdf = PdfFileReader(packet)

        if not os.path.exists(self.tempPdfFile):
            return self.printWebHtmlToPdf(self.url, self.filePath, self.fileName)

        writer = PdfFileWriter()
        tmpPdfFile = file(self.tempPdfFile, 'rb')
        reader = PdfFileReader(tmpPdfFile)
        for i in range(0, (reader.getNumPages())):
            page = reader.getPage(i)
            page.mergePage(newPdf.getPage(0))
            #            page = newPdf.getPage(0)
            #            page.mergePage(reader.getPage(i))
            writer.addPage(page)
        print 'Filename: ' + self.fileName
        outputStream = file(self.filePath + self.fileName, "wb")
        writer.write(outputStream)
        outputStream.close()
        tmpPdfFile.close()
        os.remove(str(self.tempPdfFile))
Ejemplo n.º 12
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
Ejemplo n.º 13
0
def save_page(page, file_path):
  output = PdfFileWriter()
  output.addPage(page)
  f = open(file_path, "wb")
  output.write(f)
  f.close()
Ejemplo n.º 14
0
from pyPdf.pdf import PdfFileWriter, PdfFileReader
from



if __name__ == '__main__':

    output = PdfFileWriter()
    input1 = PdfFileReader('D:\Anaconda\workspace\\vtk_bucket\\1.pdf')
    print('ok')