每日一问—03如何拆分指定页码pdf
约 756 字大约 3 分钟...
每日一问—03如何拆分指定页码pdf
一、各页码范围合成一个整体的pdf
python版本
import PyPDF2 #导入PyPDF2模块
def merge_pdf_pages(input_pdf, page_ranges, output_pdf):
reader = PyPDF2.PdfFileReader(input_pdf) #读取PDF文件
writer = PyPDF2.PdfFileWriter() #创建PDF文件写入对象
for page_range in page_ranges: #遍历每个页码范围
start, end = page_range #获取页码范围的起始页码和结束页码
for page in range(start, end+1): #遍历页码范围内的每一页
writer.addPage(reader.getPage(page-1)) #将每一页添加到PDF文件写入对象中
with open(output_pdf, 'wb') as output: #打开输出PDF文件
writer.write(output) #将PDF文件写入对象中的内容写入输出PDF文件
input_pdf = "D:\\TJU\\3.pdf" #输入PDF文件路径
page_ranges = [(1, 3), (5, 7)] #页码范围
output_pdf = 'D:\\TJU\\output.pdf' #输出PDF文件路径
merge_pdf_pages(input_pdf, page_ranges, output_pdf) #合并PDF文件
print('PDF files merged successfully!') #输出合并成功信息
C++版本
#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;
}
C++版本()
#include <iostream> //导入iostream库
#include <podofo/podofo.h> //导入podofo库
void merge_pdf_pages(const char* input_pdf, const std::vector<std::pair<int, int>>& page_ranges, const char* output_pdf) { //定义函数merge_pdf_pages
PoDoFo::PdfVecObjects objects; //创建PdfVecObjects对象
PoDoFo::PdfWriter writer; //创建PdfWriter对象
PoDoFo::PdfDocument document(input_pdf); //创建PdfDocument对象
PoDoFo::PdfDocument output_doc(&objects); //创建PdfDocument对象
output_doc.GetInfo()->SetCreator(document.GetInfo()->GetCreator()); //设置输出PDF文件的创建者
output_doc.GetInfo()->SetAuthor(document.GetInfo()->GetAuthor()); //设置输出PDF文件的作者
for (const auto& page_range : page_ranges) { //遍历每个页码范围
for (int page = page_range.first; page <= page_range.second; ++page) { //遍历页码范围内的每一页
PoDoFo::PdfPage* source_page = document.GetPage(page - 1); //获取源PDF文件中的每一页
PoDoFo::PdfPage* new_page = output_doc.CreatePage(source_page->GetPageSize()); //创建新的PDF文件页
writer.AppendPage(new_page, source_page); //将源PDF文件中的每一页添加到新的PDF文件页中
}
}
writer.Write(output_pdf, &output_doc); //将新的PDF文件写入输出PDF文件中
}
int main() { //主函数
const char* input_pdf = "input.pdf"; //输入PDF文件路径
std::vector<std::pair<int, int>> page_ranges = {{1, 3}, {5, 7}}; //页码范围
const char* output_pdf = "output.pdf"; //输出PDF文件路径
merge_pdf_pages(input_pdf, page_ranges, output_pdf); //合并PDF文件
return 0; //返回0
}
}
二、每个页码范围单独成pdf
import PyPDF2 #导入PyPDF2模块
def merge_pdf_pages(input_pdf, page_ranges, output_pdf):
reader = PyPDF2.PdfFileReader(input_pdf) #读取PDF文件
writer = PyPDF2.PdfFileWriter() #创建PDF文件写入对象
for page_range in page_ranges: #遍历每个页码范围
start, end = page_range #获取页码范围的起始页码和结束页码
for page in range(start, end+1): #遍历页码范围内的每一页
writer.addPage(reader.getPage(page-1)) #将每一页添加到PDF文件写入对象中
with open(output_pdf, 'wb') as output: #打开输出PDF文件
writer.write(output) #将PDF文件写入对象中的内容写入输出PDF文件
input_pdf = "D:\\TJU\\3.pdf" #输入PDF文件路径
page_ranges = [(1, 3), (5, 7)] #页码范围
output_pdf = 'D:\\TJU\\output.pdf' #输出PDF文件路径
merge_pdf_pages(input_pdf, page_ranges, output_pdf) #合并PDF文件
print('PDF files merged successfully!') #输出合并成功信息