In diesem Jahr habe ich ein CUI-Tool namens deck2pdf erstellt, das HTML-Folien erfasst und in PDF konvertiert.
Grundsätzlich, wie die Methode bei Google häufig herauskommt, "Jede Seite in PNG erfassen → Alle verbinden, um PDF zu erstellen", in Version 0
Ich habe es gemeinsam geschrieben. Also suchte und fand ich diese Ghost.py mit der Absicht, sie so weit wie möglich mit dem Python-Paket zu vereinheitlichen.
Ghost.py ist ein in Python geschriebener WebKit-Client mit Sitzungen, Auswertungen, Screenshots und vielem mehr. Ich habe keinen detaillierten Vergleich mit PhantomJS usw. durchgeführt, aber ich hatte keine Probleme mit dem Mindestverhalten (obwohl ich feststeckte), also habe ich es so wie es ist in meinem eigenen Paket verwendet.
Ghost.py verwendet Qt, daher benötigen Sie PySide oder PyQt. Diesmal habe ich versucht, PySide zu verwenden.
$ brew install qt
$ pip install PySide==1.2.2
$ pyside_postinstall.py -install
$ pip install Ghost.py
Eigentlich ist die neueste Version von PySide zu diesem Zeitpunkt 1.2.4, aber da 1.2.4 kein Mac-Rad hat, scheint es, dass der Build usw. funktioniert und die Installation lange dauern wird. Wenn Sie PySide zu diesem Zeitpunkt noch nicht installiert haben und es vorerst ausprobieren möchten, ist es meiner Meinung nach schneller, 1.2.2 wie oben beschrieben zu verwenden.
Starten Sie zuerst Ghost
>>> from ghost import Ghost
>>> ghost = Ghost()
>>> session = ghost.start()
Der clientseitige Prozess wird ausgeführt, wenn Sie eine Instanz von Ghost erstellen. Erstellen Sie eine Instanz der Sitzung mit der Methode start ().
Greifen Sie auf die Demoseite der HTML5-Folien zu
>>> resp = session.open('http://html5slides.googlecode.com/svn/trunk/template/index.html')
2015-12-20T18:02:12.662Z [WARNING ] QT: libpng warning: iCCP: known incorrect sRGB profile
2015-12-20T18:02:12.746Z [WARNING ] QT: libpng warning: iCCP: known incorrect sRGB profile
>>> type(resp)
<type 'tuple'>
>>> len(resp)
2
>>> resp[0]
<ghost.ghost.HttpResource object at 0x10a99f510>
>>> resp[1]
[<ghost.ghost.HttpResource object at 0x10a99f510>, <ghost.ghost.HttpResource object at 0x10a99f410>, <ghost.ghost.HttpResource object at 0x10a99f610>, <ghost.ghost.HttpResource object at 0x10a99f750>, <ghost.ghost.HttpResource object at 0x10a99f8d0>, <ghost.ghost.HttpResource object at 0x10a99f910>, <ghost.ghost.HttpResource object at 0x10a99fb10>, <ghost.ghost.HttpResource object at 0x10a99fc10>, <ghost.ghost.HttpResource object at 0x10a99fa10>, <ghost.ghost.HttpResource object at 0x10a99fd10>]
>>>
>>> resp[0].url
u'http://html5slides.googlecode.com/svn/trunk/template/index.html'
>>> resp[1][0].url
u'http://html5slides.googlecode.com/svn/trunk/template/index.html'
>>> resp[1][1].url
u'http://html5slides.googlecode.com/svn/trunk/slides.js'
>>> resp[1][2].url
u'http://fonts.googleapis.com/css?family=Open+Sans:regular,semibold,italic,italicsemibold|Droid+Sans+Mono'
Es ist schwer zu verstehen, ob es sich um eine interaktive Shell handelt, aber sie fordert alle Ressourcen an, auf die in der in "session.open (url)" angegebenen URL und dem angegebenen Inhalt verwiesen wird, und ruft sie ab.
>>> session.capture_to('capture_1.png')
Sie können einen Screenshot mit der Methode capture_to erstellen. Aber,,,
Wenn Sie den Erfassungsbereich nicht richtig angeben, wird es schrecklich. Oder es ist besser, die Größe im Voraus festzulegen, da der Ansichtsport festgelegt werden kann.
>>> session.capture_to('capture_2.png', region=(1940, 0, 3000, 740))
>>>
Diese Ghost.py kann js direkt in der Sitzung aufrufen.
Verschieben Sie die Folien von html5slides auf die nächste Seite
>>> session.evaluate('nextSlide()')
(None, [])
>>> session.capture_to('capture_3.png', region=(1940, 0, 3000, 740))
Die Folie bewegt sich nicht weiter, selbst wenn ich die Funktion zum Vorrücken und Erfassen der Folie ausführe. (Wenn Sie nextSlide auf normalem Chrome usw. ausführen, wird die Folie ohne Probleme fortgesetzt.)
Wie ich beim Erstellen von deck2pdf bestätigt habe, scheint die Ghost.py-Sitzung den zeitlichen Fortschritt dem Code außerhalb von Ghost.py anzuvertrauen. Wenn Sie also nichts tun, selbst wenn Sie den js-Code mit evalu aufrufen, wird er nur ausgeführt, wenn die Zeit vergeht.
python
>>> session.sleep(1)
>>> session.capture_to('capture_4.png', region=(1940, 0, 3000, 740))
Hier ist das Ergebnis des Gleitens für 1 Sekunde. Ich konnte den Folieninhalt problemlos erfassen.
Obwohl es einige Macken wie diese gibt, kann ich einige Dinge tun, die auf WebKit basieren. Es schien also, dass ich verschiedene Dinge spielen könnte, wenn ich gut zurechtkomme.
Es scheint problematisch für Material wie den SpeakerDeck-Klon mit hoher Python-Reinheit oder das Erstellen von Folien aus Archiven, die HTML zusammenfassen.
Recommended Posts