正反面两个扫描pdf合并程序

在这里插入图片描述

直接运行下面的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>

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值