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)
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")
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)
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', }
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)
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()
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()
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)
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)
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()
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')
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', }