运行python3脚本时出现错误,该脚本应该获取Vitalsource电子书页面的屏幕截图,然后将其转换为pdf文件。
我在下面尝试了建议的解决方案(@Balderman提供),但是它不起作用。但是,请注意,我是一名新手,正在学习python。 我可能已经做了一些事情。 请告知。
我的python脚本(app2.py)代码:
import argparse
import os
import tempfile
import autopy
import img2pdf
def screenshot(top_left, right_bottom, next_page, total_page):
rect_size = (right_bottom[0] - top_left[0], right_bottom[1] - top_left[1])
images = []
temp_dir = tempfile.mkdtemp()
for i in range(total_page):
page_num = "{}".format(i).zfill(len(str(total_page)))
file_name = os.path.join(temp_dir, 'book-page-{}.png'.format(page_num))
images.append(file_name)
autopy.mouse.move(*next_page)
autopy.mouse.click(delay=1)
autopy.bitmap.capture_screen((top_left, rect_size)).save(file_name)
return images
def image2pdf(images):
with open("book.pdf", "wb") as f:
f.write(img2pdf.convert(images))
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Take book screenshots.')
parser.add_argument('top_left', type=str)
parser.add_argument('right_bottom', type=str)
parser.add_argument('next_button', type=str)
parser.add_argument('total_page', type=int)
args = parser.parse_args()
top_left = tuple(map(lambda x: int(x), args.top_left.split(',')))
right_bottom = tuple(map(lambda x: int(x), args.right_bottom.split(',')))
next_button = tuple(map(lambda x: int(x), args.next_button.split(',')))
total_page = args.total_page
print("Take book screenshot at {} {} and next at {} with {} pages".format(
top_left, right_bottom, next_button, total_page
))
images = screenshot(top_left, right_bottom, next_button, total_page)
image2pdf(images)
print("Done, book saved in book.pdf.")
@Balderman建议的解决方案:
python code.py 12,34 34,67 12,99 12
import argparse
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Take screenshots.')
parser.add_argument('top_left', type=str)
parser.add_argument('right_bottom', type=str)
parser.add_argument('next_button', type=str)
parser.add_argument('total_page', type=int)
args = parser.parse_args()
top_left = tuple(map(lambda x: int(x), args.top_left.split(',')))
right_bottom = tuple(map(lambda x: int(x), args.right_bottom.split(',')))
next_button = tuple(map(lambda x: int(x), args.next_button.split(',')))
total_page = args.total_page
print("Take screenshot at {} {} and next at {} with {} pages".format(
top_left, right_bottom, next_button, total_page
))
print(args)
预期结果: 从Vitalsourcesafe以pdf格式打印整个电子书(1200页),以pdf格式,这一次只能打印2页。
我收到的错误消息:
usage: app2.py [-h] top_left right_bottom next_button total_page
app2.py: error: the following arguments are required: top_left, right_bottom, next_button, total_page
答案 0 :(得分:0)
我也一直看起来很疯狂,发现了复杂的python脚本可以用pdf打印机打印或做屏幕截图,但是它对我不起作用,我也懒得调试它们的脚本。
我在Windows 10中做了一些简单得多的事情,希望它对您有用,或者至少可以激发您获得自己的解决方案。
法律免责声明:此解决方案的使用必须遵守VitalSource在https://support.vitalsource.com/hc/en-us/articles/204612518上规定的条款。简而言之,这意味着不得进行商业用途或发行,而只能用于个人用途。如果您决定大规模分发,则后果自负。
在以下说明中,我假设您已经安装了python 3.x,并且您知道要使用pip。
pip install autopy 8.确保您的书已经打开并且第一页可见。 9.手动制作第一个屏幕截图。尝试使用ShareX提供的放大镜完美地调整区域。对屏幕截图满意后,请将其删除(以避免重复)。 10.运行以下 python脚本,并快速更改为VitalSource Bookshelf应用程序(使用Alt + Tab):
import autopy if __name__ == "__main__": while True: autopy.key.tap(autopy.key.Code.F3,None,1) autopy.key.tap(autopy.key.Code.SPACE,None,1)