直接运行下面的python代码即可完成两个文件的合并,我们只需要打包成exe,用QT折腾一下界面即可。如果想直接拿来用(是更新过的),也可以从此处下载。
from PyPDF2 import PdfFileReader, PdfFileWriter
path1 = '01.pdf' #文件1路径
path2 = '02.pdf' #文件2路径
pdfFileReader1 = PdfFileReader(path1)
pdfFileReader2 = PdfFileReader(path2)
pdfFileWriter = PdfFileWriter()
nums = pdfFileReader1.getNumPages()
num1 = num2 = 0
for i in range(0, nums):
pageObject = 0
if i%2 ==0:
pageObject = pdfFileReader1.getPage(num1)
num1+=1
else:
pageObject = pdfFileReader2.getPage(num2)
num2+=1
pdfFileWriter.addPage(pageObject)
if num2 <= pdfFileReader2.getNumPages():
pageObject = pdfFileReader2.getPage(num2)
pdfFileWriter.addPage(pageObject)
pdfFileWriter.write(open('result.pdf', 'wb+'))
为了方便,不path1和path2修改成:
if len(sys.argv) >= 3:
path1 = sys.argv[1]
path2 = sys.argv[2]
if len(sys.argv) > 3:
out = sys.argv[3]
然后创建QT界面:
mainwindows.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QFileDialog>
#include <QString>
#include <QProcess>
#include <QAction>
#include <QLineEdit>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
QString positive_sur;
QString str;
QFileDialog *filePath;
QProcess *process;
QString objName;
};
#endif // MAINWINDOW_H
mainwindows.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->objName = "result.pdf";
this->ui->lineEdit_3->setText(this->objName);
// this->filePath = new QFileDialog(this);
connect(this->ui->toolButton, &QToolButton::clicked, [=](){
this->positive_sur = QFileDialog::getOpenFileName(this, "正面", ".", "*.pdf");
this->ui->lineEdit->setText(this->positive_sur);
// qDebug() << "12345645646";
});
connect(this->ui->toolButton_2, &QToolButton::clicked, [=](){
this->str = QFileDialog::getOpenFileName(nullptr, "反面", ".", "*.pdf");
this->ui->lineEdit_2->setText(this->str);
});
connect(this->ui->pushButton, &QPushButton::clicked, [=](){
qDebug() << QCoreApplication::applicationDirPath();
this->process = new QProcess(this);
process->start("001.exe", QStringList() << this->positive_sur << this->str << this->objName);
process->waitForStarted();
process->waitForFinished();
});
connect(ui->lineEdit_3, &QLineEdit::textChanged, [=](QString str){
this->objName = str;
});
}
MainWindow::~MainWindow()
{
delete ui;
if(process->state() == QProcess::Running) {
process->kill();
}
}
mainwindow.ui:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>438</width>
<height>162</height>
</rect>
</property>
<property name="windowTitle">
<string>YuZeSubSystem</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QWidget" name="widget" native="true">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QWidget" name="widget_2" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>正面文件:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit">
<property name="enabled">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="toolButton">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_3" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>反面文件:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_2"/>
</item>
<item>
<widget class="QToolButton" name="toolButton_2">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_4" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>目标名称:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_3"/>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>合并</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
<resources/>
<connections/>
</ui>
update:
from PyPDF2 import PdfFileReader, PdfFileWriter
import sys
path1 = '01.pdf'
path2 = '02.pdf'
out = 'result.pdf'
if len(sys.argv) >= 3:
path1 = sys.argv[1]
path2 = sys.argv[2]
if len(sys.argv) > 3:
out = sys.argv[3]
pdfFileReader1 = PdfFileReader(path1)
pdfFileReader2 = PdfFileReader(path2)
pdfFileWriter = PdfFileWriter()
nums = pdfFileReader1.getNumPages()
num1 = num2 = 0
for i in range(0, nums):
pageObject = 0
if i%2 ==0:
pageObject = pdfFileReader1.getPage(num1)
num1+=1
else:
pageObject = pdfFileReader2.getPage(num2)
num2+=1
print(i / nums * 100,end='')
sys.stdout.flush()
pdfFileWriter.addPage(pageObject)
if num2 <= pdfFileReader2.getNumPages():
pageObject = pdfFileReader2.getPage(num2)
pdfFileWriter.addPage(pageObject)
pdfFileWriter.write(open(out, 'wb+'))
print(100.9,end='')
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QFileDialog>
#include <QString>
#include <QProcess>
#include <QAction>
#include <QLineEdit>
#include <QProgressBar>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
QString positive_sur;
QString str;
QFileDialog *filePath;
QProcess *process;
QString objName;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->objName = "result.pdf";
this->ui->progressBar->setRange(0, 100);
ui->progressBar->setValue(0);
this->ui->lineEdit_3->setText(this->objName);
this->process = new QProcess();
this->process->setReadChannel(QProcess::StandardOutput);
// this->filePath = new QFileDialog(this);
connect(this->ui->toolButton, &QToolButton::clicked, [=](){
this->positive_sur = QFileDialog::getOpenFileName(this, "正面", ".", "*.pdf");
this->ui->lineEdit->setText(this->positive_sur);
// qDebug() << "12345645646";
});
connect(this->ui->toolButton_2, &QToolButton::clicked, [=](){
this->str = QFileDialog::getOpenFileName(nullptr, "反面", ".", "*.pdf");
this->ui->lineEdit_2->setText(this->str);
});
connect(this->ui->pushButton, &QPushButton::clicked, [=](){
qDebug() << QCoreApplication::applicationDirPath();
process->start("001.exe", QStringList() << this->positive_sur << this->str << this->objName);
process->waitForStarted();
// process->waitForFinished();
});
connect(ui->lineEdit_3, &QLineEdit::textChanged, [=](QString str){
this->objName = str;
});
connect(this->process, &QProcess::readyReadStandardOutput, [=](){
QByteArray arr = this->process->readAllStandardOutput();
qDebug() << arr.toFloat();
this->ui->progressBar->setValue(arr.toFloat());
});
}
MainWindow::~MainWindow()
{
if(process->state() == QProcess::Running) {
// process->terminate();
process->kill();
}
process->waitForFinished();
delete process;
delete ui;
}
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>521</width>
<height>192</height>
</rect>
</property>
<property name="windowTitle">
<string>YuzeSubSystem</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QWidget" name="widget" native="true">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QWidget" name="widget_2" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>正面文件:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit">
<property name="enabled">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="toolButton">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_3" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>反面文件:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_2"/>
</item>
<item>
<widget class="QToolButton" name="toolButton_2">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_4" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>目标名称:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_3"/>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QProgressBar" name="progressBar">
<property name="value">
<number>24</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>合并</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
<resources/>
<connections/>
</ui>