ฉันกำลังมองหาสิ่งเดียวกัน ฉันไม่สามารถหาห้องสมุดที่เฉพาะเจาะจงสำหรับงานนี้ได้เช่นกัน แต่อย่างน้อยที่สุดเราจะสามารถทำให้กระบวนการนี้เป็นแบบอัตโนมัติโดยใช้เครื่องมืออัตโนมัติ GUI
มีไลบรารีและแอปพลิเคชันแบบสแตนด์อโลนจำนวนมากสำหรับงานนี้ หนึ่งที่ดูเหมือนว่ามีแนวโน้มให้ฉันเป็นAutoIt
แต่ในฐานะแฟนงูหลามฉันพบห้องสมุดที่น่าอัศจรรย์นี้ชื่อpywinautoและเขียนสคริปต์ต่อไปนี้เพื่อแปลงไฟล์ swf ของฉัน:
"""Convert all swf files in this directory to a pdf file using Firefox.
Note that some parameters in this script need to be adjusted according to
user's printer setup, screen resolution, etc.
Documentation of pywinauto:
* https://pywinauto.github.io/docs/contents.html
An example script using pywinauto:
* https://github.com/vsajip/pywinauto/blob/master/examples/SaveFromFirefox.py
"""
import re
import os
import warnings
import webbrowser
from time import sleep
from functools import partial
import pywinauto as pwa
from pywinauto.application import Application
def sendkey_escape(string):
"""Escape `+ ^ % ~ { } [ ] ( )` by putting them within curly braces.
Refer to sendkeys' documentation for more info:
* https://github.com/zvodd/sendkeys-py-si/blob/master/doc/SendKeys.txt
(Could not open the original site: rutherfurd.net/python/sendkeys/ )
"""
return re.sub(r'([+^%~{}\[\]()])', r'{\1}', string)
# Using 32-bit python on 64-bit machine? Will get the following warning a lot:
# "UserWarning: 64-bit application should be automated using 64-bit Python
# (you use 32-bit Python)"
# Limit this warnings to only show once.
# The following line does not work as expected. See
# github.com/pywinauto/pywinauto/issues/125
warnings.filterwarnings(
'once', message=r'.*64-bit application should.*', category=UserWarning
)
# Assume Firefox is already open.
app = Application().connect(title_re=".*Firefox")
firefox = app.MozillaFireFox.GeckoFPSandboxChildWindow
filenames = os.listdir()
for filename in filenames:
if not filename.endswith('.swf'):
continue
pdfname = filename[:-3] + 'pdf'
if pdfname in filenames:
# Already there!
continue
# Assume the default application to open swf files is Firefox.
webbrowser.open(filename)
firefox.SetFocus()
firefox.Wait('exists ready', timeout=5)
firefox.RightClickInput(coords=(200, 200))
firefox.Wait('ready', timeout=10)
# Click "print" from the rightclick menu.
firefox.ClickInput(coords=(210, 320))
pwa.timings.WaitUntilPasses(
timeout=10,
retry_interval=1,
func=partial(app.Connect, title='Print'),
exceptions=pwa.findwindows.WindowNotFoundError,
)
app.Print.Wait('ready active', 5)
# The printing process depends on the default printer being used.
app.Print.OK.Click()
app.Print.WaitNot('exists', timeout=5)
pwa.timings.WaitUntilPasses(
timeout=10,
retry_interval=1,
func=partial(app.Connect, title='Save As'),
exceptions=pwa.findwindows.WindowNotFoundError,
)
# Be wary that some characters such as "%" don't work correctly in Save As
# dialogs. This code does not handle such awkwardness of MS Windows.
app.SaveAS.ComboBox.SetFocus().TypeKeys(
sendkey_escape(os.getcwd() + '\\' + pdfname), with_spaces=True
)
app.SaveAS.Save.Click()
firefox.Wait('exists ready', timeout=5)
# Focuse is lost to flash (bugzilla: 78414). Use mouse to close the tab.
firefox.ClickInput(coords=(418, 16), absolute=True)
firefox.WaitNot("exists", timeout=5)
วิธีนี้มีข้อ จำกัด ของตัวเอง ตัวอย่างเช่นคุณจะไม่สามารถใช้คอมพิวเตอร์ของคุณในระหว่างกระบวนการแปลงเนื่องจากสคริปต์และเมาส์ถูกควบคุมโดยสคริปต์ สคริปต์ต้องการการปรับแต่งสำหรับคอมพิวเตอร์แต่ละเครื่อง กระบวนการควบคุม GUI นั้นควรช้ากว่าแอปพลิเคชั่น CLI ที่ออกแบบมาเพื่อทำงานเดียวกัน อย่างไรก็ตามนี่ยังง่ายกว่าและเร็วกว่าการแปลงด้วยตนเอง
ป.ล. ผมไม่สามารถช่วย แต่พูดถึงSikuli อีกหนึ่งไพ ธ อนไลบรารีที่น่าทึ่งสำหรับระบบอัตโนมัติของ GUI
ปรับปรุง
วิธีการด้านบนสร้างกราฟิกส์แบบเวกเตอร์ แต่ถ้าใครสนใจไฟล์ rasterized .png (ซึ่งสามารถแปลงเป็น pdf ได้อย่างง่ายดายโดยใช้เครื่องมือที่มีให้ใช้อย่างอิสระ) พวกเขาอาจต้องการลองswfrender
จากแพ็คเกจswftools ในปัจจุบันไบนารี่เวอร์ชั่นเสถียรล่าสุดที่มีสำหรับ Windows คือ 0.9.0 (2009-07-21) แต่ฉันขอแนะนำให้ลองพัฒนา snapshot swftools-2013-04-09-1007.exe
ซึ่งมีตัวเลือกเพิ่มเติมรวมถึงตัวเลือก-r
ที่ใช้ในการปรับความละเอียดของไฟล์ที่ส่งออก