コード例 #1
0
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'))
コード例 #2
0
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
コード例 #3
0
    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()
コード例 #4
0
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)