0

我正在尝试在 python 中制作一些程序来操作我的 pdf beamer 演示文稿。教授使用点击动态转换,所以一页有几个点击转换。我想打印这些演示文稿,但我有大约 5000 页。所以我只想使用最后一次点击转换页面,所以我会将页面数量减少到 500 左右。我正在使用 PyPDF2 模块,但它不能生成有效的 pdf 文件。这是代码:

from pyPdf import PdfFileWriter, PdfFileReader
import os,sys

pdful = raw_input("Uneti ime fajla:")
output = PdfFileWriter()
input1 = PdfFileReader(open(pdful, "rb"))

m = []
f = True
print ("Uneti strane koje zelite da zadrzite.String 0 kraj unosa:\n")

while f:
   l = int(raw_input("Uneti broj stranice:"))
   if l == 0:
      f = not f
   else: m.append(l-1)

for i in range(len(m)):
    strana  = input1.getPage(int(m[i]))

    output.addPage(strana)

outputStream = file("Mat8.pdf","wb")
output.write(outputStream)
# string writings are in Serbian, but that's not so important. Program should take input from user: name of file to manipulate, and pages that should copy.
4

1 回答 1

0

from pyPdf import PdfFileWriter, PdfFileReaderpyPdf 已经停产,由 PyPDF2 接替。我不确定 Python 2,但在 Python 3 中你应该import PyPDF2.

  1. 没必要import os, sys。但是,python3 xyz.py some_arg如果您确实使用了 bash ,则可以调用sys.argv. 这边走sys.argv[1] == some_arg
  2. 只要您不需要逐行读取输入,我宁愿使用地图。例如,

    print ("Uneti strane koje zelite da zadrzite.String 0 kraj unosa:\n")
    m = map (lambda x: int(x) - 1, raw_input("Uneti broj stranice:").split())
    
  3. 而不是while循环。此外,迭代对象而不是索引。

    for page_number in m:
        strana = input1.getPage(page_number)
        output.addPage(strana)
    
  4. 最后,用于with封装文件操作。Python 将自动处理文件的关闭,以免您忘记这样做。

    with open (pdful, 'wb') as outputStream:
        output.write(outputStream)
    
于 2016-06-18T13:26:12.483 回答