page = forms.IntegerField(label=“Replace page number”)
视图函数
#包
import os
import zipfile
import PyPDF2
from django.http import FileResponse
from django.shortcuts import render
from pdf.forms import PdfExtractForm, PdfMergeForm, PdfReplaceForm
def pdf_single_page_extract(request):
if request.method == ‘POST’:
form = PdfExtractForm(request.POST, request.FILES)
if form.is_valid():
f = form.cleaned_data[‘file’]
转化为pdf对象
pdfFileObj = PyPDF2.PdfFileReader(f)
获取需要提取的页面参数
page_num_info = form.cleaned_data[‘page’].strip()
print(page_num_info)
if len(page_num_info) == 2:
page_num_list = page_num_info.split(‘,’)[0]
print(‘page_num_list’, page_num_list)
else:
page_num_list = page_num_info.split(‘,’)
print(page_num_list)
创建压缩文件对象 生成提取文件压缩包
zf = zipfile.ZipFile(os.path.join(‘media’, ‘extracted_pages.zip’), ‘w’)
for page_num in page_num_list:
pdf文档页面对象编码是从0开始 所以减一
page_index = int(page_num) - 1
利用PyPDF2提取页面对象
pageObj = pdfFileObj.getPage(page_index)
利用PyPDF2创建新的PDF Writer
pdfWriter = PyPDF2.PdfFileWriter()
pdfWriter.addPage(pageObj)
pdf文件路径
pdf_file_path = os.path.join(‘media’, ‘extracted_page_{}.pdf’.format(page_num))
将提取页面写入新的PDF文件
with open(pdf_file_path, ‘wb’) as pdfOutputFile:
pdfWriter.write(pdfOutputFile)
zf.write(pdf_file_path)
zf.close()
response = FileResponse(open(os.path.join(‘media’, ‘extracted_pages.zip’), ‘rb’))
response[‘content_type’] = “application/zip”
response[‘Content-Disposition’] = ‘attachment; filename=“extracted_pages.zip”’
return response
else:
form = PdfExtractForm()
return render(request, ‘pdf/pdf_extract.html’, {‘form’: form})
def pdf_range_extract(request):
if request.method == ‘POST’:
如果用户通过POST提交
form = PdfExtractForm(request.POST, request.FILES)
if form.is_valid():