Ejemplo n.º 1
0
    def splitting(*varargs,filenameOut ="out"):

        if(len(varargs)<=1):
            raise IndexError("Errore: inserire almeno due file.")

        for file in varargs:
            if False == (isinstance(file,str)):
                raise ValueError("Errore: i file devono essere pdf")

        if False == (isinstance(filenameOut,str)):
                raise ValueError("Errore: il nome del file deve essere di tipo str")

        all = PdfWriter()
        numpage=float("inf")

        for file in varargs:
            reader = PdfReader(file)
            i=0
            for page in reader.pages:
                i=i+1
            if (numpage > i):
                 numpage=i

        for i in range(numpage):
            for filename in varargs:
                reader = PdfReader(filename)
                all.addPage(reader.getPage(i))
        if(filenameOut.endswith('.pdf') == False):
            filenameOut = filenameOut+'.pdf'

        all.write(filenameOut)
Ejemplo n.º 2
0
def splitting(filenameOut ="out",*varargs):

    for file in varargs:
        if False == (isinstance(file,str)):
            raise ValueError("Errore: i file devono essere pdf")

    if False == (isinstance(filenameOut,str)):
            raise ValueError("Errore: il nome del file deve essere di tipo str")


    all = PdfWriter()
    numpage=float("inf")

    for file in varargs:
        reader = PdfReader(file)
        i=0
        for page in reader.pages:
            i=i+1
        if (numpage > i):
             numpage=i

    for i in range(numpage):
        for filename in varargs:
            reader = PdfReader(filename)
            all.addPage(reader.getPage(i))


    all.write(filenameOut+".pdf")
Ejemplo n.º 3
0
def merge_pdf(service, group, files):
    w = PdfWriter()
    for fileId in files:
        r = PdfReader(fileId)
        for page in range(len(r.pages)):
            w.addPage(r.pages[page])
        os.remove(fileId)
    with open('tmp.pdf', 'wb') as p:
        w.write(p)
Ejemplo n.º 4
0
    def merge_attachment(self):
        filename = 'Print Packing List.pdf'
        picking_obj = self.env['stock.picking']
        picking = picking_obj.browse(self._context.get('active_ids'))
        lst = []
        writer = PdfWriter()
        for pick in picking:
            if pick.packing_list_bool:
                pick.packing_list_print_bool = True
            ship_name = 'Packing List' "%s" % pick.name
            attachments = self.env['ir.attachment'].search([
                ('res_id', '=', pick.id), ('name', '=', ship_name)
            ])
            for att in attachments:
                lst.append(att)

        def get4_fedex(srcpages):
            scale = 0.88
            srcpages = PageMerge() + srcpages
            x_increment, y_increment = (scale * i
                                        for i in srcpages.xobj_box[2:])
            for i, page in enumerate(srcpages):
                page.scale(scale)
            return srcpages.render()

        for pdf in lst:
            pages = PdfReader(BytesIO(base64.decodestring(pdf.datas))).pages
            pick1 = picking_obj.browse(pdf.res_id)
            for index in range(0, len(pages), 1):
                writer.addpage(get4_fedex(pages[index:index + 1]))

        s = BytesIO()
        writer.write(s)
        reader = PdfFileReader(s)
        writer = PdfFileWriter()
        for page in range(0, reader.getNumPages()):
            p = reader.getPage(page)
            writer.addPage(p)
        s = BytesIO()
        writer.write(s)
        out = base64.b64encode(s.getvalue())
        view_report_status_id = self.env['view.report'].create({
            'file_name':
            out,
            'datas_fname':
            filename
        })
        return {
            'res_id': view_report_status_id.id,
            'name': 'Print Packing List',
            'view_type': 'form',
            'view_mode': 'form',
            'res_model': 'view.report',
            'view_id': False,
            'type': 'ir.actions.act_window',
        }
Ejemplo n.º 5
0
def makeOnePagers(filename='GPO-CONAN-REV-2014.pdf' ,path='pdf/'):
    infile = PdfReader(filename)
    pages = len(infile.pages)
    print(pages)
    for i in range(pages):
       p = infile.pages[i]
       if(p and len(p)>0):
           outfile = PdfWriter()
           outfile.addPage(p)
           try:
               outfile.write('pdf/pageindex-%s.pdf' % str(i))
           except:
               pass
           print(i)
Ejemplo n.º 6
0
 def crop_pdf_page(self, options):
     output = PdfWriter(options["output_file_path"])
     page = PdfReader(
         options["input_file_path"]).pages[options["page_number"]]
     cropped = page
     cropped['/MediaBox'][
         0] = options["bounding_box"]["upper_left"] - options["padding"]
     cropped['/MediaBox'][
         1] = options["bounding_box"]["upper_right"] - options["padding"]
     cropped['/MediaBox'][
         2] = options["bounding_box"]["lower_left"] + options["padding"]
     cropped['/MediaBox'][
         3] = options["bounding_box"]["lower_right"] + options["padding"]
     output.addPage(cropped)
     output.write()
Ejemplo n.º 7
0
def processFile(file):
    inpfn = file
    outfn = 'out\\' + os.path.basename(inpfn)
    reader = PdfReader(inpfn)
    writer = PdfWriter(outfn)

    pagesNum = len(reader.pages)
    print(os.path.basename(inpfn) + ": page 1 - " + str(pagesNum))
    print("Please specify page with space (Ex. 2 4 11).")
    delPages = list(map(int, input().split()))

    for idx, page in enumerate(reader.pages):
        if (idx + 1) not in delPages:
            writer.addPage(page)
    writer.write()
Ejemplo n.º 8
0
def export_pdf(pages, out_file):
    if len(pages) > 400:
        split_pages = [
            pages[i * 400:(i + 1) * 400]
            for i in range((len(pages) + 400 - 1) // 400)
        ]
        for i in range(len(split_pages)):
            pdf_writer = PdfWriter()
            for page in split_pages[i]:
                pdf_reader = PdfReader(page)
                pdf_writer.addPage(pdf_reader.getPage(0))
                os.remove(page)
            out = out_file.split(".pdf")[0]
            with open(f"{out}_{i}.pdf", "wb") as file:
                pdf_writer.write(file)
    else:
        pdf_writer = PdfWriter()
        for page in pages:
            pdf_reader = PdfReader(page)
            pdf_writer.addPage(pdf_reader.getPage(0))
            os.remove(page)
        with open(out_file, "wb") as file:
            pdf_writer.write(file)
Ejemplo n.º 9
0
        page.scale(scale)
        page.x = x_increment if i & 2 else 1
        page.y = 0 if i & 1 else y_increment

    return srcpages.render()


pages = PdfReader('document-output.pdf').pages
writer = PdfWriter('out.pdf')

for index in range(0, len(pages), len(pages)):
    print(len(pages))
    writer.addpage(get4(pages[index:index + len(pages)]))

writer.write()

reader = PdfFileReader(open("out.pdf",'rb'))
invoice_page = reader.getPage(0)
sup_reader = PdfFileReader(open("download.pdf",'rb'))
sup_page = sup_reader.getPage(0)  # We pick the second page here

translated_page = PageObject.createBlankPage(None, sup_page.mediaBox.getWidth(), sup_page.mediaBox.getHeight())
translated_page.mergeScaledTranslatedPage(sup_page, 1, 0, 0)  # -400 is approximate mid-page

translated_page.mergePage(invoice_page)

writer = PdfFileWriter()
writer.addPage(translated_page)

with open('output1.pdf', 'wb') as f:
    writer.write(f)
Ejemplo n.º 10
0
    def interleave(self,
                   pdf: PDF,
                   first: bool = True,
                   out_path: str = None) -> None:
        '''
        Interleave the pages from another PDF with this one. 
        
        Use case is a two-sided paper doc scanned to separate PDFs for
        the front and back. Notes: 
        
        - If one PDF is longer than the other, additional of the pages 
          from the longer document will be consecutively added at the
          end. 
        - The output will overwrite this PDF object's file. 

        Args:
            pdf: Another PDF object with pages to interleave with
                this object. Must be of type `pdf_utils.PDF`.
            first: Optional bool, default=True. In the interleave
                ordering, should this object's pages come first (True, 
                i.e.: pages 1, 3, 5...) or second (False, i.e.: pages 
                2, 4, 6...)?
            out_path: Optional string, default=None. If supplied,
                the output will be saved to this path, instead of
                overwriting this PDF object's path.

        Returns:
            None
    
        Raises:
            No exceptions raised 
        
        Examples:
            Invoke like this to overwrite this PDF's file:
             
            ```>>> my_pdf.interleave('/files/even_pages.pdf')```

            Save the output to a new file:
             
            ```>>> my_pdf.interleave('./even_pages.pdf', 
            out_path='./combo.pdf')```

            Normally, this PDF object's pages come first, but you can
            also make the incoming PDF's pages come first, instead:
             
            ```>>> my_pdf.interleave('/files/odd_pages.pdf', 
            first=False)```
        '''
        pdf1_path = self.path  # this object's path
        pdf2_path = pdf.path  # incoming object's path
        if not first:  # incoming file comes first, reverse the order
            pdf1_path = pdf.path
            pdf2_path = self.path
        pdf1_reader = PdfReader(pdf1_path)
        pdf1_pages = pdf1_reader.pages
        pdf1_len = len(pdf1_pages)
        pdf2_reader = PdfReader(pdf2_path)
        pdf2_pages = pdf2_reader.pages
        pdf2_len = len(pdf2_pages)

        if not out_path: out_path = self.path
        outdata = PdfWriter(out_path)

        for i in range(0, pdf1_len):
            outdata.addPage(pdf1_pages[i])
            if (i + 1) > pdf2_len: continue  # no more pages in pdf2
            outdata.addPage(pdf2_pages[i])

        if pdf2_len > pdf1_len:  # out of pages in pdf1, but more in pdf2
            for i in range(pdf1_len, pdf2_len):
                outdata.addPage(pdf2_pages[i])

        outdata.write()
Ejemplo n.º 11
0
from pdfrw import PdfReader, PdfWriter

teste = open(
    'C:\\repositorio\\teste_pdf\\file\\document-0384212176-20200525.pdf', 'rb')

x = PdfReader(teste)

y = PdfWriter()

for p in x.pages:
    y.addPage(p)

y.write('C:\\repositorio\\teste_pdf\\file\\result.pdf')
Ejemplo n.º 12
0
    def merge_attachment(self):
        filename = 'Print Shipping Labels.pdf'
        picking_obj = self.env['stock.picking']
        picking = picking_obj.browse(self._context.get('active_ids'))
        lst =[]
        writer = PdfWriter()
        for pick in picking:
            pick.shipping_label_print_bool = True
            ship_name = 'Shipping labels' "%s" %pick.name
            if not pick.ship_label_bool :
                attachments = self.env['ir.attachment'].search([('res_id','=',pick.id)])
            else:
                attachments = self.env['ir.attachment'].search([('res_id','=',pick.id),('name','=',ship_name)])
            for att in attachments:
                lst.append(att)
#             writer = PdfFileWriter()
#             inpfn, = sys.argv[1:]
#             outfn = '4up.' + os.path.basename(inpfn)
#             pages = PdfReader(inpfn).pages
         
        def get4(srcpages):
            if not pick.ship_label_bool:
                scale = 0.35
                srcpages = PageMerge() + srcpages
                x_increment, y_increment = (scale * i for i in srcpages.xobj_box[2:])
                for i, page in enumerate(srcpages):
                    page.scale(scale)
                    page.x = x_increment if i & 1 else 0
                    page.y = 0 if i & 2 else y_increment
                return srcpages.render()  
            if pick.ship_label_bool:
                scale = 0.88
                srcpages = PageMerge() + srcpages
                x_increment, y_increment = (scale * i for i in srcpages.xobj_box[2:])
                for i, page in enumerate(srcpages):
                    page.scale(scale)
                     
    #                 page.x = x_increment if i & 1 else 0
    #                 page.y = 0 if i & 2 else y_increment
    #                 print "parrrrrrrrrrrrrrrrrrrrrr",page.x,page.y
                return srcpages.render() 
                
        def get4_fedex(srcpages):
            scale = 0.88
            srcpages = PageMerge() + srcpages
            x_increment, y_increment = (scale * i for i in srcpages.xobj_box[2:])
            for i, page in enumerate(srcpages):
                page.scale(scale)
                 
#                 page.x = x_increment if i & 1 else 0
#                 page.y = 0 if i & 2 else y_increment
#                 print "parrrrrrrrrrrrrrrrrrrrrr",page.x,page.y
            return srcpages.render()  
        for pdf in lst:
            
            pages = PdfReader(BytesIO(base64.decodestring(pdf.datas))).pages
            pick1 = picking_obj.browse(pdf.res_id)
         
            
            for index in range(0, len(pages), 1):
                if pick1.carrier_id.delivery_type =='ups':    
                    writer.addpage(get4(pages[index:index + 1]))
                if pick1.carrier_id.delivery_type =='fedex':    
                    writer.addpage(get4_fedex(pages[index:index + 1]))
                    
            # Return merged PDF
        s = BytesIO()
        writer.write(s)
        reader = PdfFileReader(s)
        writer = PdfFileWriter()
        for page in range(0, reader.getNumPages()):
            p=reader.getPage(page)
            if pick1.carrier_id.delivery_type =='fedex' and not pick1.ship_label_bool :
                p.mediaBox.lowerRight = (900, 145)
                p.mediaBox.lowerLeft = (-600, 390)
                p.mediaBox.upperLeft = (99, 500)
                p.mediaBox.upperRight = (530, 680)
            if pick1.carrier_id.delivery_type =='ups' and not pick1.ship_label_bool:
                p.mediaBox.lowerRight = (450, 145)
                p.mediaBox.upperRight = (425, 600) 
                p.mediaBox.lowerLeft = (-150, 275)
                p.mediaBox.upperLeft = (-5, 565)
            writer.addPage(p)
        s = BytesIO()
        writer.write(s)
        out = base64.b64encode(s.getvalue())
        view_report_status_id=self.env['view.report'].create({'file_name':out,'datas_fname':filename})
        return {
        'res_id'   :view_report_status_id.id,
        'name'     :'Print Shipping Labels',
        'view_type':'form',
        'view_mode':'form',
        'res_model':'view.report',
        'view_id'  : False ,
        'type'     :'ir.actions.act_window',
            }