def addBlankpage(inFile, outFile): ''' pdf读取写入操作 ''' pdfFileWriter = PdfFileWriter() # 获取 PdfFileReader 对象 pdfFileReader = PdfFileReader( inFile) # 或者这个方式:pdfFileReader = PdfFileReader(open(readFile, 'rb')) numPages = pdfFileReader.getNumPages() for index in range(0, numPages): pageObj = pdfFileReader.getPage(index) pdfFileWriter.addPage(pageObj) # 根据每页返回的 PageObject,写入到文件 pdfFileWriter.write(open(outFile, 'wb')) pdfFileWriter.addBlankPage() # 在文件的最后一页写入一个空白页,保存至文件中 pdfFileWriter.write(open(outFile, 'wb'))
def PdfPrettyPrint(inputname, outputname): inputfile = open(inputname, 'rb') wrt = PdfFileWriter() ipt = PdfFileReader(inputfile) #print ipt.getDocumentInfo() pdfnums = ipt.getNumPages() #print pdfnums i = 0 while i < pdfnums: page = ipt.getPage(i) wrt.addPage(page) if i + 2 < pdfnums: page = ipt.getPage(i + 2) wrt.addPage(page) else: wrt.addBlankPage() if i + 1 < pdfnums: page = ipt.getPage(i + 1) page.rotateClockwise(180) wrt.addPage(page) else: wrt.addBlankPage() if i + 3 < pdfnums: page = ipt.getPage(i + 3) page.rotateClockwise(180) wrt.addPage(page) else: wrt.addBlankPage() i = i + 4 fl = open(outputname, "wb") wrt.write(fl) inputfile.close() fl.close() return True
def _merge_pdfs(self, in_dir, out_file): """Merges PDFs in a given directory and outputs it to a single PDF file. If `same_page_number` is set to true in the config file, all tests will have `max_pages` number of pages. Parameters: in_dir (str): Path to the input directory containing the PDF files to be merged. out_file (str): Path to the merged PDF. """ pw = PdfFileWriter() firstPDF = True for f in sorted(listdir(in_dir)): if isfile(join(in_dir, f)) and regex.match( '^test.*\.pdf$', f, flags=regex.IGNORECASE): pr = PdfFileReader(join(in_dir, f), strict=False) form = pr.trailer["/Root"][ "/AcroForm"] # see: https://stackoverflow.com/questions/47288578/pdf-form-filled-with-pypdf2-does-not-show-in-print pw.appendPagesFromReader(pr) if self.config['same_page_number'] and pr.getNumPages( ) < self.config['max_pages']: for i in range(self.config['max_pages'] - pr.getNumPages()): # pylint: disable=unused-variable pw.addBlankPage() if firstPDF: pw._root_object.update({NameObject("/AcroForm"): form}) firstPDF = False else: pw._root_object["/AcroForm"]["/Fields"].extend( form["/Fields"]) pw._root_object["/AcroForm"].update( {NameObject("/NeedAppearances"): BooleanObject(True)}) f = codecs.open(out_file, 'wb') pw.write(f) f.close()
def combine_pdf_pages(pdfpath, pagesgroups, verbose=False): """ Combines vertically groups of pages of a pdf file @type pdfpath: str or unicode @type pagesgroups: list of (list of int) """ # opening input file if verbose: print(("Opening file " + pdfpath)) fi = open(pdfpath, 'rb') pdf = PdfFileReader(fi) # opening output pdf pdfout = PdfFileWriter() # loop on groups of pages tom combine for pagesgroup in pagesgroups: if verbose: print(("Combining pages:", )) # heights and widths heights = [pdf.pages[i].mediaBox.getHeight() for i in pagesgroup] widths = [pdf.pages[i].mediaBox.getWidth() for i in pagesgroup] # adding new blank page page_out = pdfout.addBlankPage(width=max(widths), height=sum(heights)) # merging pages of group for i, p in enumerate(pagesgroup): if verbose: print((p, )) page_out.mergeTranslatedPage(pdf.pages[p], tx=0, ty=sum(heights[i + 1:])) print() # exporting merged pdf into temporary output file fo = create_tmpfile('wb') if verbose: print(("Exporting merged pdf in file {}".format(fo.name))) pdfout.write(fo) # closing files fi.close() fo.close() # removing original file and replacing it with merged pdf if verbose: print(("Moving exported pdf to: " + pdfpath)) os.remove(pdfpath) os.rename(fo.name, pdfpath)