IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> PDF快捷工具软件开发(非标) -> 正文阅读

[Python知识库]PDF快捷工具软件开发(非标)


前言

开发这个软件还得从最早是21年说起。当时正值6月毕业答辩,学校让上传毕业资料。其中包括论文,开题报告,以及中期报告,外文翻译等,要求资料整合到一个word中。当时整合文档时光修改格式就难倒了一大批同学,很多学生的office还不是特别熟悉,修改格式更是难上加难。所以大家就想了一个 简单的方法,将这些文档的PDF文件拼接到一起就好,只用修改页码。PDF拼接合并不会修改文本格式的。这个想法虽然是好的,但网上很多PDF拼接软件都是收费的。所以当时有Python基础的我就想到的自动化办公或许可以解决这个问题,查阅了资料后,发现果然可以用Python实现。所以当时用了大概4小时时间就写好了PDF拼接合并软件,包括UI设计等。但是当时毕业季挺忙的,就没发布出来,只是同学间使用。
现在22年了,都毕业一年了。刚入职比亚迪,新员工的电脑还没审批下来,所以没什么工作安排,就在办公室熟悉项目,所以就利用工作的空闲时间将这个软件开发完整。

一、软件具备什么功能?

PDF拆分
PDF合并
PDF转Word
PDF加密
PDF解密
在这里插入图片描述
Word转PDF功能纯属胡扯,WPS免费就搞定了。

二、开发步骤

2.1.引入库

代码如下(示例):

import os,ast
import choose,cut,merge,pdfcvword,wordcvpdf,encypdf,decr # 导入ui界面的py文件
from PyQt5 import QtWidgets
from PyPDF2 import PdfFileReader,PdfFileWriter
import tkinter as tk
from tkinter import filedialog
# python3.6安装pdf2docx出错时可以先试试安装pymupdf==1.19.3。安装成功后再安装pdf2docx
from pdf2docx import Converter

2.2.PDF拆分功能设计

该功能是搭配UI界面去设计的,所以必要时要配合UI界面去看。
在这里插入图片描述

拆分功能代码如下:

#***********************************  拆分功能  **********************************************#
# 选择拆分文件
def choose_cut_filepath():
    root = tk.Tk()
    root.withdraw()
    f_path=filedialog.askopenfilename()
    cut_ui.lineEdit_2.setText(f_path)
# PDF页码读取
def read_page():
    try:
        path = cut_ui.lineEdit_2.text()
        pdf_reader = PdfFileReader(path)
        num = pdf_reader.getNumPages()
        cut_ui.lineEdit_3.setText(str(num))
    except Exception as e:
        cut_ui.lineEdit_3.setText(str(e))
# 拆分输出文件路径选择
def select_cut_outputh():
    global cut_path
    root = tk.Tk()
    root.withdraw()
    f_path = filedialog.askdirectory()
    cut_ui.lineEdit.setText(f_path)
    cut_path=f_path
# PDF拆分
def cut_pdf():
    try:
        global cut_path
        num1=cut_ui.lineEdit_4.text()
        num1=ast.literal_eval(num1)
        path1=os.path.join(cut_path,'拆分1.pdf')
        path2 = os.path.join(cut_path,'拆分2.pdf')
        path=cut_ui.lineEdit_2.text()
        pdf_reader = PdfFileReader(path)
        pdf_writer1 = PdfFileWriter()
        pdf_writer2 = PdfFileWriter()
        num2 = pdf_reader.getNumPages()
        if num1<num2:
            for page1 in range(0,num1):
                pdf_writer1.addPage(pdf_reader.getPage(page1))
            with open(path1,'wb') as out:
                pdf_writer1.write(out)
            for page2 in range(num1, num2):
                pdf_writer2.addPage(pdf_reader.getPage(page2))
            with open(path2, 'wb') as out:
                pdf_writer2.write(out)
            cut_ui.lineEdit_5.setText(cut_path)
        else:
            cut_ui.lineEdit_5.setText('拆分页码不符合要求')
    except Exception as e:
        cut_ui.lineEdit_5.setText(str(e))

主程序里的UI调用代码如下

 # 拆分窗口
   	cutwindow=  QtWidgets.QWidget()
    cut_ui=cut.Ui_Form()
    cut_ui.setupUi(cutwindow)
    cut_ui.pushButton.clicked.connect(choose_cut_filepath)
    cut_ui.pushButton_2.clicked.connect(read_page)
    cut_ui.pushButton_3.clicked.connect(cut_pdf)
    cut_ui.pushButton_4.clicked.connect(back_choosewindow)
    cut_ui.pushButton_5.clicked.connect(select_cut_outputh)

2.3 PDF合并

UI界面如下
在这里插入图片描述

合并功能代码如下

#***********************************  拼接功能  **********************************************#
# 选择拼接文件路径
def choose_merge_filepath():
    global file_path
    root = tk.Tk()
    root.withdraw()
    f_path = filedialog.askdirectory()
    merge_ui.lineEdit_1.setText(f_path)
    file_path=f_path
# 获取路径所有文件名
def get_filename():
    global file_path
    for paths,dirs,files in os.walk(file_path):
        text = str(files)
        merge_ui.textEdit.setText(text)
# PDf拼接
def merge_pdf():
    try:
        global file_path
        list1=[]
        files=merge_ui.textEdit.toPlainText()
        files=ast.literal_eval(files)
        output = os.path.join(file_path,'拼接.pdf')
        for name in files:
            merge_path=os.path.join(file_path,name)
            list1.append(merge_path)
        pdf_writer = PdfFileWriter()
        for path in list1:
            pdf_reader =PdfFileReader(path)
            for page in range(pdf_reader.getNumPages()):
                pdf_writer.addPage(pdf_reader.getPage(page))
        with open(output,'wb') as out:
            pdf_writer.write(out)
            merge_ui.lineEdit_2.setText(str(output))
    except Exception as e:
        merge_ui.lineEdit_2.setText(str(e))

主程序UI界面代码如下

# 拼接窗口
    mergewindow = QtWidgets.QWidget()
    merge_ui = merge.Ui_Form()
    merge_ui.setupUi(mergewindow)
    merge_ui.pushButton.clicked.connect(choose_merge_filepath)
    merge_ui.pushButton_2.clicked.connect(get_filename)
    merge_ui.pushButton_3.clicked.connect(merge_pdf)
    merge_ui.pushButton_4.clicked.connect(back_choosewindow)

2.4PDF转Word

UI界面如下所示

功能代码如下

# 选择文件
def choose_pdfcvfile():
    root = tk.Tk()
    root.withdraw()
    f_path = filedialog.askopenfilename()
    pdf_reader = PdfFileReader(f_path)
    num = pdf_reader.getNumPages()
    pdfcvwd_ui.lineEdit.setText(str(f_path))
    pdfcvwd_ui.lineEdit_2.setText((str(num)))
# PDF指定转换
def zdpdfcv():
    try:
        path = pdfcvwd_ui.lineEdit.text()
        root = tk.Tk()
        root.withdraw()
        f_path = filedialog.askdirectory()
        f_path=os.path.join(f_path,'部分转换.docx')
        s=pdfcvwd_ui.lineEdit_3.text()
        e=pdfcvwd_ui.lineEdit_4.text()
        print(s)
        print(type(s))
        print(e)
        doc=Converter(path)
        doc.convert(f_path,s,e)
        doc.close()
        pdfcvwd_ui.lineEdit_5.setText(f_path)
    except Exception as e:
        pdfcvwd_ui.lineEdit_5.setText(str(e))
# PDF全部转换
def allpdfcv():
    try:
        path = pdfcvwd_ui.lineEdit.text()
        f_path = filedialog.askdirectory()
        f_path = os.path.join(f_path, '全部转换.docx')
        doc = Converter(path)
        doc.convert(f_path, start=0, end=None)
        doc.close()
        pdfcvwd_ui.lineEdit_6.setText(f_path)
    except Exception as e:
        pdfcvwd_ui.lineEdit_6.setText(str(e))

主程序UI代码运行如下

	pdfcvwdwindow = QtWidgets.QWidget()
    pdfcvwd_ui=pdfcvword.Ui_Form()
    pdfcvwd_ui.setupUi(pdfcvwdwindow)
    pdfcvwd_ui.pushButton.clicked.connect(choose_pdfcvfile)
    pdfcvwd_ui.pushButton_2.clicked.connect(zdpdfcv)
    pdfcvwd_ui.pushButton_3.clicked.connect(allpdfcv)
    pdfcvwd_ui.pushButton_4.clicked.connect(back_choosewindow)

2.5 解密和加密

UI界面如下
在这里插入图片描述
在这里插入图片描述

功能代码如下

#***********************************  PDF加密功能  **********************************************#
# 文件选择
def choose_decrpdf():
    root = tk.Tk()
    root.withdraw()
    f_path = filedialog.askopenfilename()
    decrpdf_ui.lineEdit.setText(f_path)
# 文件加密
def ency():
    try:
        f_path = encypdf_ui.lineEdit.text()
        pwd = encypdf_ui.lineEdit_2.text()
        pdf_reader = PdfFileReader(f_path)
        pdf_writer = PdfFileWriter()
        for page in range(pdf_reader.getNumPages()):
            pdf_writer.addPage(pdf_reader.getPage(page))
        pdf_writer.encrypt(pwd)
        with open(f_path,'wb') as out:
            pdf_writer.write(out)
            encypdf_ui.lineEdit_3.setText('文件加密成功')
    except Exception as e:
        encypdf_ui.lineEdit_3.setText(str(e))
#***********************************  PDF解密功能  **********************************************#
# 文件选择
def choose_enpdf():
    root = tk.Tk()
    root.withdraw()
    f_path = filedialog.askopenfilename()
    encypdf_ui.lineEdit.setText(f_path)
# 文件解密
def decrpdf():
    try:
        f_path = decrpdf_ui.lineEdit.text()
        pwd = decrpdf_ui.lineEdit_2.text()
        pdf_reader = PdfFileReader(f_path)
        pdf_reader.decrypt(pwd)
        pdf_writer = PdfFileWriter()
        for page in range(pdf_reader.getNumPages()):
            pdf_writer.addPage(pdf_reader.getPage(page))
        with open(f_path,'wb') as out:
            pdf_writer.write(out)
            decrpdf_ui.lineEdit_3.setText('文件解密成功')
    except Exception as e:
        decrpdf_ui.lineEdit_3.setText(str(e))

主程序UI代码如下

# 加密
    encywindow = QtWidgets.QWidget()
    encypdf_ui = encypdf.Ui_Form()
    encypdf_ui.setupUi(encywindow)
    encypdf_ui.pushButton.clicked.connect(choose_enpdf)
    encypdf_ui.pushButton_2.clicked.connect(ency)
    encypdf_ui.pushButton_3.clicked.connect(back_choosewindow)
    # 解密
    decrwindow = QtWidgets.QWidget()
    decrpdf_ui = decr.Ui_Form()
    decrpdf_ui.setupUi(decrwindow)
    decrpdf_ui.pushButton.clicked.connect(choose_decrpdf)
    decrpdf_ui.pushButton_2.clicked.connect(decrpdf)
    decrpdf_ui.pushButton_3.clicked.connect(back_choosewindow)

三 程序打包

程序打包的话我之前的博客也发过,用pyinstaller就可以了
在这里插入图片描述

四 总结+软件+主程序

打包好的软件我已经上传至CSDN了,再留一个百度网盘链接吧
百度网盘: 网盘入口
提取码:1234
下方给出主程序代码。没有给出U界面的代码。需要完整工程代码的可以私信。

附完整主程序代码,UI界面的py代码太多了就不一一附了

import os,ast
import choose,cut,merge,pdfcvword,wordcvpdf,encypdf,decr # 导入ui界面的py文件
from PyQt5 import QtWidgets
from PyPDF2 import PdfFileReader,PdfFileWriter
import tkinter as tk
from tkinter import filedialog
# python3.6安装pdf2docx出错时可以先试试安装pymupdf==1.19.3。安装成功后再安装pdf2docx
from pdf2docx import Converter
#***********************************  拼接功能  **********************************************#
# 选择拼接文件路径
def choose_merge_filepath():
    global file_path
    root = tk.Tk()
    root.withdraw()
    f_path = filedialog.askdirectory()
    merge_ui.lineEdit_1.setText(f_path)
    file_path=f_path
# 获取路径所有文件名
def get_filename():
    global file_path
    for paths,dirs,files in os.walk(file_path):
        text = str(files)
        merge_ui.textEdit.setText(text)
# PDf拼接
def merge_pdf():
    try:
        global file_path
        list1=[]
        files=merge_ui.textEdit.toPlainText()
        files=ast.literal_eval(files)
        output = os.path.join(file_path,'拼接.pdf')
        for name in files:
            merge_path=os.path.join(file_path,name)
            list1.append(merge_path)
        pdf_writer = PdfFileWriter()
        for path in list1:
            pdf_reader =PdfFileReader(path)
            for page in range(pdf_reader.getNumPages()):
                pdf_writer.addPage(pdf_reader.getPage(page))
        with open(output,'wb') as out:
            pdf_writer.write(out)
            merge_ui.lineEdit_2.setText(str(output))
    except Exception as e:
        merge_ui.lineEdit_2.setText(str(e))
#***********************************  拆分功能  **********************************************#
# 选择拆分文件
def choose_cut_filepath():
    root = tk.Tk()
    root.withdraw()
    f_path=filedialog.askopenfilename()
    cut_ui.lineEdit_2.setText(f_path)
# PDF页码读取
def read_page():
    try:
        path = cut_ui.lineEdit_2.text()
        pdf_reader = PdfFileReader(path)
        num = pdf_reader.getNumPages()
        cut_ui.lineEdit_3.setText(str(num))
    except Exception as e:
        cut_ui.lineEdit_3.setText(str(e))
# 拆分输出文件路径选择
def select_cut_outputh():
    global cut_path
    root = tk.Tk()
    root.withdraw()
    f_path = filedialog.askdirectory()
    cut_ui.lineEdit.setText(f_path)
    cut_path=f_path
# PDF拆分
def cut_pdf():
    try:
        global cut_path
        num1=cut_ui.lineEdit_4.text()
        num1=ast.literal_eval(num1)
        path1=os.path.join(cut_path,'拆分1.pdf')
        path2 = os.path.join(cut_path,'拆分2.pdf')
        path=cut_ui.lineEdit_2.text()
        pdf_reader = PdfFileReader(path)
        pdf_writer1 = PdfFileWriter()
        pdf_writer2 = PdfFileWriter()
        num2 = pdf_reader.getNumPages()
        if num1<num2:
            for page1 in range(0,num1):
                pdf_writer1.addPage(pdf_reader.getPage(page1))
            with open(path1,'wb') as out:
                pdf_writer1.write(out)
            for page2 in range(num1, num2):
                pdf_writer2.addPage(pdf_reader.getPage(page2))
            with open(path2, 'wb') as out:
                pdf_writer2.write(out)
            cut_ui.lineEdit_5.setText(cut_path)
        else:
            cut_ui.lineEdit_5.setText('拆分页码不符合要求')
    except Exception as e:
        cut_ui.lineEdit_5.setText(str(e))
#***********************************  PDF转word功能  **********************************************#
# 选择文件
def choose_pdfcvfile():
    root = tk.Tk()
    root.withdraw()
    f_path = filedialog.askopenfilename()
    pdf_reader = PdfFileReader(f_path)
    num = pdf_reader.getNumPages()
    pdfcvwd_ui.lineEdit.setText(str(f_path))
    pdfcvwd_ui.lineEdit_2.setText((str(num)))
# PDF指定转换
def zdpdfcv():
    try:
        path = pdfcvwd_ui.lineEdit.text()
        root = tk.Tk()
        root.withdraw()
        f_path = filedialog.askdirectory()
        f_path=os.path.join(f_path,'部分转换.docx')
        s=pdfcvwd_ui.lineEdit_3.text()
        e=pdfcvwd_ui.lineEdit_4.text()
        print(s)
        print(type(s))
        print(e)
        doc=Converter(path)
        doc.convert(f_path,s,e)
        doc.close()
        pdfcvwd_ui.lineEdit_5.setText(f_path)
    except Exception as e:
        pdfcvwd_ui.lineEdit_5.setText(str(e))
# PDF全部转换
def allpdfcv():
    try:
        path = pdfcvwd_ui.lineEdit.text()
        f_path = filedialog.askdirectory()
        f_path = os.path.join(f_path, '全部转换.docx')
        doc = Converter(path)
        doc.convert(f_path, start=0, end=None)
        doc.close()
        pdfcvwd_ui.lineEdit_6.setText(f_path)
    except Exception as e:
        pdfcvwd_ui.lineEdit_6.setText(str(e))
#***********************************  PDF加密功能  **********************************************#
# 文件选择
def choose_decrpdf():
    root = tk.Tk()
    root.withdraw()
    f_path = filedialog.askopenfilename()
    decrpdf_ui.lineEdit.setText(f_path)
# 文件加密
def ency():
    try:
        f_path = encypdf_ui.lineEdit.text()
        pwd = encypdf_ui.lineEdit_2.text()
        pdf_reader = PdfFileReader(f_path)
        pdf_writer = PdfFileWriter()
        for page in range(pdf_reader.getNumPages()):
            pdf_writer.addPage(pdf_reader.getPage(page))
        pdf_writer.encrypt(pwd)
        with open(f_path,'wb') as out:
            pdf_writer.write(out)
            encypdf_ui.lineEdit_3.setText('文件加密成功')
    except Exception as e:
        encypdf_ui.lineEdit_3.setText(str(e))
#***********************************  PDF解密功能  **********************************************#
# 文件选择
def choose_enpdf():
    root = tk.Tk()
    root.withdraw()
    f_path = filedialog.askopenfilename()
    encypdf_ui.lineEdit.setText(f_path)
# 文件解密
def decrpdf():
    try:
        f_path = decrpdf_ui.lineEdit.text()
        pwd = decrpdf_ui.lineEdit_2.text()
        pdf_reader = PdfFileReader(f_path)
        pdf_reader.decrypt(pwd)
        pdf_writer = PdfFileWriter()
        for page in range(pdf_reader.getNumPages()):
            pdf_writer.addPage(pdf_reader.getPage(page))
        with open(f_path,'wb') as out:
            pdf_writer.write(out)
            decrpdf_ui.lineEdit_3.setText('文件解密成功')
    except Exception as e:
        decrpdf_ui.lineEdit_3.setText(str(e))
#***********************************  word转PDF功能 (待调试) **********************************************#
# 文件选择
def choose_wdcvfile():
    root = tk.Tk()
    root.withdraw()
    f_path = filedialog.askopenfilename()
    wdcvpdf_ui.lineEdit.setText(str(f_path))
# word制定转换
def zdwdcv():
    try:
        pass
    except Exception as e:
        wdcvpdf_ui.lineEdit_5.setText(str(e))
# word全部转换
def allwdcv():
    try:
        pass
    except Exception as e:
        wdcvpdf_ui.lineEdit_6.setText(str(e))
#***********************************  UI页面切换 **********************************************#
# 打开拆分页面
def open_cutwindow():
    cutwindow.show()
    choosewindow.close()
# 打开拼接页面
def open_mergewindow():
    mergewindow.show()
    choosewindow.close()
# 打开PDF转word页面
def open_pdfcvword():
    choosewindow.close()
    pdfcvwdwindow.show()
# 打开PDF加密页面
def open_encryption_pdf():
    choosewindow.close()
    encywindow.show()
# 打开PDF解密页面
def open_decipher_pdf():
    choosewindow.close()
    decrwindow.show()
# 打开word转PDF页面
def open_wordcvpdf():
    wdcvpdfwindow.show()
    choosewindow.close()
# 返回功能选择界面
def back_choosewindow():
    choosewindow.show()
    cutwindow.close()
    mergewindow.close()
    pdfcvwdwindow.close()
    wdcvpdfwindow.close()
    encywindow.close()
    decrwindow.close()

if __name__ == '__main__':
    # 功能选择
    app = QtWidgets.QApplication([])
    choosewindow= QtWidgets.QWidget()  #
    choose_ui =choose.Ui_Form()
    choose_ui.setupUi(choosewindow)  # 启动运行
    choose_ui.pushButton.clicked.connect(open_cutwindow)
    choose_ui.pushButton_2.clicked.connect(open_mergewindow)
    choose_ui.pushButton_3.clicked.connect(open_pdfcvword)
    choose_ui.pushButton_4.clicked.connect(open_encryption_pdf)
    choose_ui.pushButton_5.clicked.connect(open_decipher_pdf)
    choose_ui.pushButton_6.clicked.connect(open_wordcvpdf)
    choosewindow.show()
    # 拆分窗口
    cutwindow=  QtWidgets.QWidget()
    cut_ui=cut.Ui_Form()
    cut_ui.setupUi(cutwindow)
    cut_ui.pushButton.clicked.connect(choose_cut_filepath)
    cut_ui.pushButton_2.clicked.connect(read_page)
    cut_ui.pushButton_3.clicked.connect(cut_pdf)
    cut_ui.pushButton_4.clicked.connect(back_choosewindow)
    cut_ui.pushButton_5.clicked.connect(select_cut_outputh)
    # 拼接窗口
    mergewindow = QtWidgets.QWidget()
    merge_ui = merge.Ui_Form()
    merge_ui.setupUi(mergewindow)
    merge_ui.pushButton.clicked.connect(choose_merge_filepath)
    merge_ui.pushButton_2.clicked.connect(get_filename)
    merge_ui.pushButton_3.clicked.connect(merge_pdf)
    merge_ui.pushButton_4.clicked.connect(back_choosewindow)
    # pdf转换窗口
    pdfcvwdwindow = QtWidgets.QWidget()
    pdfcvwd_ui=pdfcvword.Ui_Form()
    pdfcvwd_ui.setupUi(pdfcvwdwindow)
    pdfcvwd_ui.pushButton.clicked.connect(choose_pdfcvfile)
    pdfcvwd_ui.pushButton_2.clicked.connect(zdpdfcv)
    pdfcvwd_ui.pushButton_3.clicked.connect(allpdfcv)
    pdfcvwd_ui.pushButton_4.clicked.connect(back_choosewindow)
    # 加密
    encywindow = QtWidgets.QWidget()
    encypdf_ui = encypdf.Ui_Form()
    encypdf_ui.setupUi(encywindow)
    encypdf_ui.pushButton.clicked.connect(choose_enpdf)
    encypdf_ui.pushButton_2.clicked.connect(ency)
    encypdf_ui.pushButton_3.clicked.connect(back_choosewindow)
    # 解密
    decrwindow = QtWidgets.QWidget()
    decrpdf_ui = decr.Ui_Form()
    decrpdf_ui.setupUi(decrwindow)
    decrpdf_ui.pushButton.clicked.connect(choose_decrpdf)
    decrpdf_ui.pushButton_2.clicked.connect(decrpdf)
    decrpdf_ui.pushButton_3.clicked.connect(back_choosewindow)
    app.exec_()

人生,只有尝试过的人,才有资格说不后悔。
很庆幸,前半生没有遗憾
很幸运,后半生有所期待

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-05-27 17:17:41  更:2022-05-27 17:18:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 16:09:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计