pdf unlock: add outlines

This commit is contained in:
2025-10-29 22:45:45 +08:00
parent f56675c486
commit abf64d9cd6

View File

@ -1,8 +1,39 @@
import PyPDF2 # PyMuPDF import PyPDF2 # PyMuPDF
import sys import sys
from pathlib import Path from pathlib import Path
from typing import Optional
def copy_pdf_pages(input_path: str, output_path: str) -> bool: def add_outlines(
reader_obj:PyPDF2.PdfReader,
writer_obj:PyPDF2.PdfWriter,
outlines:Optional[list] = None,
parent=None
):
if outlines is None:
outlines = reader_obj.outline
last = None
for it in outlines:
if isinstance(it, list):
add_outlines(reader_obj, writer_obj ,it, last)
continue
title = getattr(it, 'title', None)
if title is None:
try:
title = str(it)
except Exception as e:
raise e
continue
page_num = reader_obj.get_destination_page_number(it)
if page_num is None:
continue
last = writer_obj.add_outline_item(title, page_num, parent=parent)
def copy_pdf_pages(input_path: Path, output_path: Path) -> bool:
""" """
移除PDF文件的所有限制 移除PDF文件的所有限制
@ -24,6 +55,14 @@ def copy_pdf_pages(input_path: str, output_path: str) -> bool:
for page in reader.pages: for page in reader.pages:
writer.add_page(page) writer.add_page(page)
# 复制书签(如果有)
try:
add_outlines(reader, writer)
except Exception as e:
raise e
print(f"警告:{input_path.name}书签处理失败.")
# 写入新文件(不设置任何加密或限制) # 写入新文件(不设置任何加密或限制)
with open(output_path, 'wb') as output_file: with open(output_path, 'wb') as output_file:
writer.write(output_file) writer.write(output_file)
@ -32,6 +71,7 @@ def copy_pdf_pages(input_path: str, output_path: str) -> bool:
except Exception as e: except Exception as e:
print(f"移除PDF限制时发生错误: {e}") print(f"移除PDF限制时发生错误: {e}")
raise e
return False return False
# def copy_pdf_pages(input_file, output_file): # def copy_pdf_pages(input_file, output_file):