我假设你的意思是奇数页的左边要比右边有更多的边距,而偶数页的右边要比左边有更多的边距。我使用了“主要变量”来表示较大的边距,使用了“次要变量”来表示常规的边距,顶部和底部的边距则保持不变。我使用这个脚本来准备书籍精装印刷的PDF文件,其中书籍从右手边的奇数页开始(所以左边的边距要比右边大),而偶数页则相反。
import argparse
from PyPDF2 import PdfReader, PdfWriter
def to_points(x):
return x * 72 if measure == "inch" else x * 28.8
def add_margins(input_pdf, output_pdf, primary=0, secondary=0, top=0, bottom=0):
with open(input_pdf, 'rb') as f:
reader = PdfReader(f)
writer = PdfWriter()
for i, page in enumerate(reader.pages):
i = i + 1
if i % 2 == 0:
page.mediabox.lower_left = (float(page.mediabox.lower_left[0]) - secondary, float(page.mediabox.lower_left[1]) - bottom)
page.mediabox.lower_right = (float(page.mediabox.lower_right[0]) + primary, float(page.mediabox.lower_right[1]) - bottom)
page.mediabox.upper_left = (float(page.mediabox.upper_left[0]) - secondary, float(page.mediabox.upper_left[1]) + top)
page.mediabox.upper_right = (float(page.mediabox.upper_right[0]) + primary, float(page.mediabox.upper_right[1]) + top)
else:
page.mediabox.lower_left = (float(page.mediabox.lower_left[0]) - primary, float(page.mediabox.lower_left[1]) - bottom)
page.mediabox.lower_right = (float(page.mediabox.lower_right[0]) + secondary, float(page.mediabox.lower_right[1]) - bottom)
page.mediabox.upper_left = (float(page.mediabox.upper_left[0]) - primary, float(page.mediabox.upper_left[1]) + top)
page.mediabox.upper_right = (float(page.mediabox.upper_right[0]) + secondary, float(page.mediabox.upper_right[1]) + top)
writer.add_page(page)
with open(output_pdf, 'wb') as out:
writer.write(out)
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Add margins to a PDF file.")
parser.add_argument('input_pdf', type=str, help="Input PDF file path")
parser.add_argument('output_pdf', type=str, help="Output PDF file path")
parser.add_argument('--side_p', type=float, default=0, help="Margin of primary side")
parser.add_argument('--side_s', type=float, default=0, help="Margin of secondary side")
parser.add_argument('--top', type=float, default=0, help="Top margin")
parser.add_argument('--bottom', type=float, default=0, help="Bottom margin")
parser.add_argument('--measure', type=str, default=0, help="cm or inch")
args = parser.parse_args()
measure = args.measure
add_margins(
args.input_pdf,
args.output_pdf,
to_points(args.side_p),
to_points(args.side_s),
to_points(args.top),
to_points(args.bottom)
)
在命令提示符中运行:
python add-margings-pdf.py linear-algebra-printing.pdf out-linear-algebra-printing.pdf --side_p 0.75 --side_s 0.5 --top 0.5 --bottom 0.5 --measure inch