class AddJsTestCase(unittest.TestCase): def setUp(self): ipdf = PdfFileReader(os.path.join(RESOURCE_ROOT, 'crazyones.pdf')) self.pdf_file_writer = PdfFileWriter() self.pdf_file_writer.appendPagesFromReader(ipdf) def test_add(self): self.pdf_file_writer.addJS( "this.print({bUI:true,bSilent:false,bShrinkToFit:true});") self.assertIn('/Names', self.pdf_file_writer._root_object, "addJS should add a name catalog in the root object.") self.assertIn( '/JavaScript', self.pdf_file_writer._root_object['/Names'], "addJS should add a JavaScript name tree under the name catalog.") self.assertIn('/OpenAction', self.pdf_file_writer._root_object, "addJS should add an OpenAction to the catalog.") def test_overwrite(self): self.pdf_file_writer.addJS( "this.print({bUI:true,bSilent:false,bShrinkToFit:true});") first_js = self.get_javascript_name() self.pdf_file_writer.addJS( "this.print({bUI:true,bSilent:false,bShrinkToFit:true});") second_js = self.get_javascript_name() self.assertNotEqual( first_js, second_js, "addJS should overwrite the previous script in the catalog.") def get_javascript_name(self): self.assertIn('/Names', self.pdf_file_writer._root_object) self.assertIn('/JavaScript', self.pdf_file_writer._root_object['/Names']) self.assertIn( '/Names', self.pdf_file_writer._root_object['/Names']['/JavaScript']) return self.pdf_file_writer._root_object['/Names']['/JavaScript'][ '/Names'][0]
def decrypt_pdf(filename, password, decrypted_filename=None): global old_file """ 将加密的文件及逆行解密,并生成一个无需密码pdf文件 :param filename: 原先加密的pdf文件 :param password: 对应的密码 :param decrypted_filename: 解密之后的文件名 :return: """ # 生成一个Reader和Writer pdf_reader = get_reader(filename, password) if pdf_reader is None: write_result(filename, '文件打开失败') return '出错' if not pdf_reader.isEncrypted: print('文件没有被加密,无需操作!') return '未加密,无需操作!' pdf_writer = PdfFileWriter() pdf_writer.appendPagesFromReader(pdf_reader) # decrypted_filename=filename if decrypted_filename is None: decrypted_filename = "".join( filename[:-4]) + '_' + 'decrypted' + '.pdf' # 写入新文件 pdf_writer.write(open(decrypted_filename, 'wb')) file_name = re.split('\\\|/', filename)[-1] old_file.close() try: os.remove(filename) os.rename(decrypted_filename, filename) write_result(file_name, '已覆盖旧文件') except: traceback.print_exc() write_result(file_name, '删除旧文件失败') print('解密完成,新文件存储至' + decrypted_filename) return '解密完成'
def decrypt_pdf(filename, password, decrypted_filename=None): """ 将加密的文件及逆行解密,并生成一个无需密码pdf文件 :param filename: 原先加密的pdf文件 :param password: 对应的密码 :param decrypted_filename: 解密之后的文件名 :return: """ # 生成一个Reader和Writer pdf_reader = get_reader(filename, password) if pdf_reader is None: return '出错' if not pdf_reader.isEncrypted: print('文件没有被加密,无需操作!') return '文件没有被加密,无需操作!' pdf_writer = PdfFileWriter() pdf_writer.appendPagesFromReader(pdf_reader) if decrypted_filename is None: decrypted_filename = "".join( filename[:-4]) + '_' + 'decrypted' + '.pdf' # 写入新文件 pdf_writer.write(open(decrypted_filename, 'wb')) print('解密完成,新文件存储至' + decrypted_filename) return '解密完成'