def resize(outpages: List, output_size: List[int]) -> List: current_size = get_media_box_size(outpages) o = list(outpages) # rotate output_size if outpages would fit better out_ratio = output_size[0] / output_size[1] cur_ratio = current_size[0] / current_size[1] if out_ratio > 1 and cur_ratio <= 1 or out_ratio <= 1 and cur_ratio > 1: output_size = list(reversed(output_size)) scale, x_margin, y_margin = calculate_margins(output_size, current_size) for idx, page in enumerate(outpages): page = PageMerge().add(page) # scale page page[0].scale(scale) page[0].x += x_margin page[0].y += y_margin # set new mediabox size page.mbox = [0, 0] + output_size # replace original with resized page o[idx] = page.render() return o
def resize(outpages, output_size): current_size = get_media_box_size(outpages) o = list(outpages) # rotate output_size if outpages would fit better out_ratio = output_size[0] / output_size[1] cur_ratio = current_size[0] / current_size[1] if out_ratio > 1 and cur_ratio <= 1 or out_ratio <= 1 and cur_ratio > 1: output_size = list(reversed(output_size)) scale, x_margin, y_margin = calculate_margins(output_size, current_size) for idx, page in enumerate(outpages): page = PageMerge().add(page) # scale page page[0].scale(scale) page[0].x += x_margin page[0].y += y_margin # set new mediabox size page.mbox = [0, 0] + output_size # replace original with resized page o[idx] = page.render() return o
def save_with_even_pages(exam_id, exam_pdf_file): """Save a finalized exam pdf with evem number of pages. The exam is saved in the path returned by `get_exam_dir(exam_id)` with the name `exam.pdf`. If the pdf has an odd number of pages, an extra blank page is added at the end, this is specially usefull for printing and contatenating multiple copies at once. Parameters ---------- exam_id : int The exam identifier exam_pdf_file : str or File like object The exam pdf to be saved inthe data directory """ os.makedirs(exam_dir(exam_id), exist_ok=True) pdf_path = exam_pdf_path(exam_id) exam_pdf = PdfReader(exam_pdf_file) pagecount = len(exam_pdf.pages) if (pagecount % 2 == 0): exam_pdf_file.seek(0) exam_pdf_file.save(pdf_path) return new = PdfWriter() new.addpages(exam_pdf.pages) blank = PageMerge() box = exam_pdf.pages[0].MediaBox blank.mbox = box blank = blank.render() new.addpage(blank) new.write(pdf_path)
def initInfo(self): ''' initial booklet information ''' # initial booklet info = dictObj() if self.__inArgs.bookletSize: info['outBookSize'] = self.__inArgs.bookletSize info.update(PRINT_LAYOUT_DICT[info['outBookSize']]) info.update(PRINT_SIZE_DICT[info['outBookSize']]) self.info = info # blank page blank = PageMerge() blank.mbox = [0, 0, info.w, info.h] self.__blank = blank.render() # counter layout self.__counter = reduce( lambda x, y: x * y, [self.info['x'], self.info['y'], self.info['z']])
def _blank_page(width=DEFAULT_IMAGE_WIDTH, height=DEFAULT_IMAGE_HEIGHT): blank = PageMerge() blank.mbox = [0, 0, width, height] # 8.5 x 11 blank = blank.render() return blank
dest='evenrev', action='store_const', const=True, default=False, help='reverses the even pages before shuffling') args = parser.parse_args() # The shuffling magic even = PdfReader(args.evenFile[0]) odd = PdfReader(args.oddFile[0]) isEvenReversed = args.evenrev; isOddReversed = args.oddrev; all = PdfWriter() blank = PageMerge() blank.mbox = [0, 0, 612, 792] # 8.5 x 11 blank = blank.render() if isEvenReversed and not isOddReversed: for i in range(0, len(odd.pages)): all.addpage(odd.pages[i]) all.addpage(even.pages[len(even.pages)-1-i]) elif isOddReversed and not isEvenReversed: for i in range(0, len(odd.pages)): all.addpage(odd.pages[len(odd.pages)-1-i]) all.addpage(even.pages[i]) elif isEvenReversed and isOddReversed: for i in range(0, len(odd.pages)): all.addpage(odd.pages[len(odd.pages)-1-i]) all.addpage(even.pages[len(even.pages)-1-i]) else:
def create_blank_copy(page): blank_page = PageMerge() blank_page.mbox = page.MediaBox blank_page.rotate = page.Rotate return blank_page.render()
ipages = PdfReader(inpfn).pages if args.padding: pad_to = 4 else: pad_to = 2 # Make sure we have a correct number of sides print(len(ipages)) ipages += [None] * (-len(ipages) % 4) # ipages += [None]*(-len(ipages)%4) print(len(ipages)) opages = [] blank = PageMerge() blank.mbox = [0, 0, 419, 192] # 8.5 x 11 blank = blank.render() ipages.reverse() while len(ipages) > 0: page1 = ipages.pop() if page1 == None: page1 = blank page2 = ipages.pop() if page2 == None: page2 = blank opages.append(fixpage(page1, page2)) # opages.append(fixpage(ipages[2],blank)) # # opages.append(fixpage(ipages.pop()))
def create_blank_copy(page) -> Any: blank_page = PageMerge() blank_page.mbox = page.MediaBox blank_page.rotate = page.Rotate return blank_page.render()
def blank_page(width, height): blank = PageMerge() blank.mbox = [0, 0, width, height] blank = blank.render() return blank
dest='evenrev', action='store_const', const=True, default=False, help='reverses the even pages before shuffling') args = parser.parse_args() # The shuffling magic even = PdfReader(args.evenFile[0]) odd = PdfReader(args.oddFile[0]) isEvenReversed = args.evenrev isOddReversed = args.oddrev all = PdfWriter() blank = PageMerge() blank.mbox = [0, 0, 612, 792] # 8.5 x 11 blank = blank.render() if isEvenReversed and not isOddReversed: for i in range(0, len(odd.pages)): all.addpage(odd.pages[i]) all.addpage(even.pages[len(even.pages) - 1 - i]) elif isOddReversed and not isEvenReversed: for i in range(0, len(odd.pages)): all.addpage(odd.pages[len(odd.pages) - 1 - i]) all.addpage(even.pages[i]) elif isEvenReversed and isOddReversed: for i in range(0, len(odd.pages)): all.addpage(odd.pages[len(odd.pages) - 1 - i]) all.addpage(even.pages[len(even.pages) - 1 - i]) else:
# -*- coding: utf-8 -*- # # Author : Bhishan Poudel; Physics PhD Student, Ohio University # Date : Sep 28, 2016 # Last update : # # # Imports from pdfrw import PdfReader, PdfWriter, PageMerge pages = PdfReader('hw1.pdf').pages + PdfReader('hw6.pdf').pages + PdfReader( 'hw3.pdf').pages output = PdfWriter() rects = [[float(num) for num in page.MediaBox] for page in pages] height = max(x[3] - x[1] for x in rects) width = max(x[2] - x[0] for x in rects) mbox = [0, 0, width, height] for page in pages: newpage = PageMerge() newpage.mbox = mbox # Set boundaries of output page newpage.add(page) # Add one old page to new page image = newpage[0] # Get image of old page (first item) image.x = (width - image.w) / 2 # Center old page left/right image.y = (height - image.h) # Move old page to top of output page output.addpage(newpage.render()) output.write('homeworks.pdf')