def encrypt_file(self):
        path = self.file_selector.getpath()
        if not path:
            messagebox.showerror(MESSAGE_TITLE, "You must select a PDF file.")
            return

        if not self.password.get():
            messagebox.showerror(MESSAGE_TITLE, "You must enter a password.")
            return

        pdf_reader = PdfFileReader(path)
        if pdf_reader.isEncrypted:
            messagebox.showwarning(MESSAGE_TITLE, "File is already encrypted.")
            return

        pdf_writer = PdfFileWriter()

        for page in range(pdf_reader.getNumPages()):
            pdf_writer.addPage(pdf_reader.getPage(page))

        pdf_writer.encrypt(self.password.get())

        save_path = save_as_pdf(parent=self)
        if not save_path:
            messagebox.showerror(MESSAGE_TITLE,
                                 "You must specify a file save path")

        if save_path[-4:].lower() != ".pdf":
            save_path += ".pdf"

        with Path(save_path).open(mode="wb") as save_file:
            pdf_writer.write(save_file)

        messagebox.showinfo(MESSAGE_TITLE, "PDF encrypted.")
Beispiel #2
0
def add_watermark(file_path, file_stage, fileno):
    """把水印添加到pdf中"""

    pdf_input = PdfFileReader(file_path)
    if pdf_input.isEncrypted:
        return
    pdf_info = pdf_input.getDocumentInfo()
    w, h = pdf_input.getPage(0).mediaBox[2:]
    # 页面尺寸转换为毫米
    page = (int(w) * 0.3528, int(h) * 0.3528)

    # 创建水印文件
    #mark = str(int(time.time()))+'.pdf'
    #mark = os.path.join('d:/', mark)

    mark = create_watermark(page, file_stage, fileno)

    # 读入水印pdf文件
    pageNum = pdf_input.getNumPages()
    pdf_output = PdfFileWriter()
    pdf_watermark = PdfFileReader(open(mark, 'rb'), strict=False)
    for i in range(pageNum):
        page = pdf_input.getPage(i)
        page.mergePage(pdf_watermark.getPage(0))
        pdf_output.addPage(page)

    #print('merg 结束...' + str(datetime.now()))

    # 加密码
    pdf_output.encrypt(user_pwd='', owner_pwd='12345', use_128bit=True)
    pdf_output.addMetadata(pdf_info)

    pdf_output.write(open(file_path, 'wb'))
Beispiel #3
0
def add_encryption(input_pdf, output_pdf, password):
    pdf_writer = PdfFileWriter()
    pdf_reader = PdfFileReader(input_pdf)

    for page in range(pdf_reader.getNumPages()):
        pdf_writer.addPage(pdf_reader.getPage(page))

    pdf_writer.encrypt(user_pwd=password, owner_pwd=None, use_128bit=True)

    with open(output_pdf, 'wb') as out:
        pdf_writer.write(out)
Beispiel #4
0
def encrypt(input, output, password, verbosity, **kwargs):
    """encrypt pdf.

pdfcli encrypt source.pdf -o crypted.pdf -p password

"""

    source = PdfFileReader(input)
    output_pdf = PdfFileWriter()
    for page in source.pages:
        output_pdf.addPage(page)

    output_pdf.encrypt(user_pwd=password)

    if verbosity >= 1:
        click.echo("Writing %s" % output.name)
    output_pdf.write(output)
Beispiel #5
0
    def add_encryption(input_pdf, output_pdf, password):
        """
        PDF加密
        :param input_pdf:
        :param output_pdf:
        :param password:
        :return:
        """

        pdf_writer = PdfFileWriter()
        pdf_reader = PdfFileReader(input_pdf)

        for page in range(pdf_reader.getNumPages()):
            pdf_writer.addPage(pdf_reader.getPage(page))

        pdf_writer.encrypt(user_pwd=password, owner_pwd=None,
                           use_128bit=True)

        with open(output_pdf, 'wb') as fh:
            pdf_writer.write(fh)
Beispiel #6
0
    def encrypt_pdf(self, inputpdf, outpdf, password):
        """
        加密pdf
        inputpdf: 输入的pdf名称,包含路径
        outpdf: 输出的pdf名称,不包含路径
        """
        pdf_writer = PdfFileWriter()
        pdf_reader = PdfFileReader(inputpdf)

        for page in range(pdf_reader.getNumPages()):
            pdf_writer.addPage(pdf_reader.getPage(page))

        pdf_writer.encrypt(user_pwd=password, use_128bit=True)
        # 默认为40bit加密

        with open(self.processed + outpdf, 'wb') as f:
            pdf_writer.write(f)

        # print("文档加密完成!")
        return "文档加密完成!"
Beispiel #7
0
def encrypt_pdf(input_file: str, password: str):
    """
    Encrypts a file using PyPDF4 library.
    Precondition: File is not encrypted.
    """
    pdf_writer = PdfFileWriter()
    pdf_reader = PdfFileReader(open(input_file, 'rb'), strict=False)
    if pdf_reader.isEncrypted:
        print(f"PDF File {input_file} already encrypted")
        return False, None, None
    try:
        # To encrypt all the pages of the input file, you need to loop over all of them
        # and to add them to the writer.
        for page_number in range(pdf_reader.numPages):
            pdf_writer.addPage(pdf_reader.getPage(page_number))
    except utils.PdfReadError as e:
        print(f"Error reading PDF File {input_file} = {e}")
        return False, None, None
    # The default is 128 bit encryption (if false then 40 bit encryption).
    pdf_writer.encrypt(user_pwd=password, owner_pwd=None, use_128bit=True)
    return True, pdf_reader, pdf_writer
Beispiel #8
0
def encrypt_single_pdf(input_file, output_file, password):
    """Encrypt single pdf as another file

    Args:
        input_file: input file path name
        output_file: output file path name
        password: password used when encryption 

    Return: None
    """
    with open(input_file, 'rb') as input_stream:
        reader = PdfFileReader(input_stream)
        writer = PdfFileWriter()
        #writer.appendPagesFromReader(reader)
        for page in range(reader.getNumPages()):
            writer.addPage(reader.getPage(page))
        writer.encrypt(password)
        for page in range(reader.getNumPages()):
            a = writer.getPage(page)
            #a.scaleTo(480, 270)
        with open(output_file, 'wb') as output_stream:
            writer.write(output_stream)