每日一问—02如何实现PDF合并?

import PyPDF2

pdf_files = ['D:\\TJU\\1.pdf', 'D:\\TJU\\1.pdf']
pdf_writer = PyPDF2.PdfFileWriter()

for file_name in pdf_files:
    pdf_reader = PyPDF2.PdfFileReader(open(file_name, 'rb'))
    for page_num in range(pdf_reader.numPages):
        pdf_writer.addPage(pdf_reader.getPage(page_num))

with open('D:\\TJU\\merged_file.pdf', 'wb') as merged_file:
    pdf_writer.write(merged_file)

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <sstream>
#include <algorithm>

std::vector<std::string> pdf_files = {"D:\\TJU\\1.pdf", "D:\\TJU\\3.pdf"};

std::string read_pdf(std::string filename) {
    std::ifstream file(filename, std::ios::binary);
    std::stringstream buffer;
    buffer << file.rdbuf();
    return buffer.str();
}

int main() {
    std::ofstream merged_file("D:\\TJU\\merged_file.pdf", std::ios::binary | std::ios::app);
    for (const auto& file_name : pdf_files) {
        std::string pdf_content = read_pdf(file_name);
        merged_file << pdf_content;
    }
    merged_file.close();
    return 0;
}

这段代码不能正确合并 PDF 文件,因为它只是将 PDF 文件作为二进制数据进行简单的拼接。PDF 文件具有特定的结构,不能直接拼接。要合并 PDF 文件,可以使用专门的库,如 C++ 的 PoDoFo 或者 Python 的 PyPDF2 

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <sstream>
#include <algorithm>

// 定义要合并的 PDF 文件列表
std::vector<std::string> pdf_files = {"D:\\TJU\\1.pdf", "D:\\TJU\\1.pdf", "D:\\TJU\\1.pdf"};

// 读取 PDF 文件的内容
std::string read_pdf(std::string filename)
{
    std::ifstream file(filename, std::ios::binary | std::ios::app);
    std::stringstream buffer;
    buffer << file.rdbuf();
    return buffer.str();
}

int main()
{
    // 打开输出文件
    std::ofstream merged_file("D:\\TJU\\merged_file.pdf", std::ios::binary | std::ios::app);

    // 定义一个字符串变量,用于存储所有 PDF 文件的内容
    std::string all_pdf_content;

    // 循环遍历要合并的 PDF 文件列表
    for (const auto &file_name : pdf_files)
    {
        // 读取 PDF 文件的内容,并将其添加到 all_pdf_content 变量中
        all_pdf_content += read_pdf(file_name);
    }

    // 将 all_pdf_content 变量的值写入合并文件
    merged_file << all_pdf_content;

    // 关闭输出文件
    merged_file.close();
    std::cout << "PDF files merged successfully." << std::endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/seek97/article/details/129827140