Befehlszeilenanwendung zum Konvertieren von SWF -Dateien in PDF oder SVG. Dieses Programm unterscheidet sich von vorhandenen Alternativen durch die Tatsache, dass es ausdrücklich dazu gedacht ist, Dateien umzuwandeln, die ursprünglich in PDF (oder anderen Vektorformaten) bestand, und wurden unter Verwendung von Programmen wie PDF2SWF oder Adobe-Indesign von SWF-Tools in SWF konvertiert.
Daher wird nur eine Untergruppe der SWF -Spezifikation unterstützt, ohne dass Animationen unterstützt werden. Weitere Informationen finden Sie unter Einschränkungen. Nur statische Dateien können konvertiert werden. Zum Beispiel könnte dieses Programm verwendet werden, um ein Buch zu konvertieren, das aus einer SWF -Datei pro Seite besteht.
Um die Größe der Ausgabedatei zu reduzieren, sind mehrere Funktionen verfügbar:
Die neueste Veröffentlichung finden Sie im Abschnitt Releases. Java 8 oder höher ist erforderlich, um dieses Programm auszuführen. Der gleiche Build sollte in der Lage sein, auf allen Desktop -Plattformen auszuführen.
Die JAR -Datei kann mit dem folgenden Befehl ausgeführt werden:
java -jar swf-convert.jar [main options] <output format> <input files> [output options]
Es kann auch eine Konfigurationsdatei erfolgen:
java -jar swf-convert.jar @config.txt
Mehrere Eingabedateien oder Ordner können angegeben werden. Für jede angegebene Datei oder jeden angegebenen Ordner wird eine Dateisammlung erstellt. Einige Argumente müssen die gleiche Anzahl von Argumenten haben, wie es Eingaberolle gibt.
Es wird empfohlen, -Xmx zu verwenden, um beim Konvertieren großer Eingangssammlungen (> 1000 Dateien) die Haufengröße zu erhöhen, da das Programm einen Großteil des Speichers verwendet, insbesondere für die Rasterisierung von PDF -Frame. In meinem Fall sind bis zu 10 GB erforderlich ...
Zur Verwendung anstelle von [main options] im obigen Befehl.
-h , --help : Hilfsnachricht für das Programm anzeigen.-v , --version : Versionsname anzeigen.--log <level> : Mindestprotokollstufe festlegen, um sie in stdout anzuzeigen (aus: 0, tödlich: 1, Fehler: 2, Warn: 3, Info: 4, Debug: 5, All: 6). Protokolle aller Ebenen werden ebenfalls in ~/swfconvert/logs geschrieben.-s , --silent : Zeigen Sie während der Konvertierung keinen Fortschritt an. Zur Verwendung anstelle von [output options] im obigen Befehl. Von allen Ausgangsformaten geteilt.
-h , --help : Hilfsnachricht für das Ausgabebildy anzeigen.-o , --output <path> [paths] : Ausgabedateien oder Verzeichnisse. Es muss so viele wie Eingabedateisammlungen vorhanden sein. Standardmäßig wird die Ausgabe auf denselben Pfad wie die Eingabe geschrieben. Wenn Sie Dateien angeben, müssen sie dieselbe Erweiterung wie das gewünschte Ausgabeformat haben.-t , --tempdir <path> : TEMP -Verzeichnis, das für Zwischendateien verwendet wird. Das Standard -TEMP -Verzeichnis entspricht dem Eingabeverzeichnis. TEMP -Dateien werden nach der Konvertierung automatisch entfernt, sofern nicht anders angegeben.-e , --ignore-empty : Leere Rahmen ignorieren, keine Ausgabe für sie generieren. -g , --dont-group-fonts : Zum Deaktivieren der Schriftgruppierung (Zusammenführung kompatibler Schriftarten in einer einzelnen Schriftart).--keep-font-names : Wird verwendet, um ursprüngliche Schriftnamen zu führen, anstatt generische Namen zu verwenden. --keep-duplicate-images : Wird verwendet, um doppelte Bilder mit denselben Binärdaten zu halten.--image-format <format> : Format für Bilder zu verwenden, kann ein default , jpg oder png sein. Standard ist default . In diesem Fall wird das PNG -Format für definebitsLoslosess -Tags und JPEG -Format für definEbitsjpeg -Tags verwendet. Tags.--jpeg-quality <quality> : JPEG-Bildqualität zwischen 0 und 100. Standard ist 75. --downsample-images : Wird verwendet, um Bilder zu verkleinern, um die Ausgangsdichte zu begrenzen.--downsample-filter <name> : Filter, mit dem Bilder verkleinert werden, kann eine fast , bell , bicubic , bicubichf , box , bspline , hermite , lanczos3 , mitchell oder triangle sein. Standard ist lanczos3 .--downsample-min-size <size> : Mindestgröße in Pixeln, auf die Bilder abgeschlichen werden können oder von ihnen. Muss mindestens 3 px sein, Standard ist 10 px.--max-dpi <dpi> : Wenn Downsampling-Bilder, die maximal zulässige Bilddichte. Standard ist 200 dpi. Für die Verwendung anstelle von [output options] im obigen Befehl mit dem pdf -Ausgangsformat. Die PDF -Ausgabe erzeugt eine Seite pro Rahmen. Die Frames aller Dateien in einer Sammlung werden in dieselbe Ausgabedatei geschrieben.
--no-compress : Wird verwendet, um die PDF-Komprimierung der Ausgabe zu deaktivieren.--metadata <file> [files] : Metadaten-JSON-Dateien, die für jede Eingabedateisammlung verwendet werden. Verwenden Sie Unterstrich _ um keine Metadaten für eine bestimmte Sammlung anzuwenden. Es muss so viele Werte geben, wie es Eingaberolle gibt. Weitere Informationen zum JSON -Schema finden Sie in diesem Abschnitt.--dont-optimize-page-labels : Wird verwendet, um die Optimierung der Seitenbezeichnungen zu deaktivieren (falls in Metadaten eingestellt). --rasterization-enabled : Wird verwendet, um die Rasterisierung komplexer Frames zu ermöglichen.--rasterization-threshold <threshold> : Die Komplexität der minimalen Eingabedatei, die zur Durchführung von Rasterisierung erforderlich ist, in (etwas) willkürlichen Einheiten. Die Standardeinstellung beträgt 100.000. Sollte manuell abgestimmt werden, um zu sehen, welche Rasterisierung kleinere Dateien erzeugt.--rasterization-dpi <dpi> : Dichte in DPI zum Rastern von Rahmen, wenn die Rasterisierung aktiviert ist. Standard ist 200 dpi.--rasterization-format : Bildformat für rasterisierte Rahmen, entweder jpg oder png . Standard ist jpg .--rasterization-jpeg-quality : JPEG-Bildqualität für die Rasterisierung zwischen 0 und 100. Standard ist 75. Zur Verwendung anstelle von [output options] im obigen Befehl mit dem svg -Ausgangsformat. SVG erstellt eine Datei pro Eingangsrahmen.
-p , --pretty : Wird zum hübschen Druckausgang SVG verwendet. Dies deaktiviert auch eine Reihe von Optimierungen, um die Lesbarkeit zu erhöhen.--svgz : Wird zum Ausgang im SVGZ-Format (GZIP-Komprimierung) verwendet.--no-prolog : Wird verwendet, um den XML-Prolog wegzulassen.--precision : Präzision der SVG-Pfad-, Position- und Dimensionswerte. Standard ist 1.--transform-precision : Präzision der SVG-Transformationswerte. Standard ist 2.--percent-precision : Präzision der prozentualen SVG-Werte. Standard ist 2.--images-mode <mode> : Steuert, wie Bilder in SVG enthalten sind, können eine der external (als Dateien) oder base64 (eingebettet als Basis64-Codierte URLs). Standard ist external .--fonts-mode <mode> : steuert, wie Schriftarten in SVG enthalten sind, können external (als TTF-Dateien), base64 (eingebettet als Basis64-codierte URLs) oder none (keine Schriftarten, verwenden Sie Pfade).Wenn Bilder und Schriftarten nicht eingebettet sind, werden die Dateien im selben Verzeichnis wie die Ausgabe platziert.
Für die Verwendung anstelle von [output options] im obigen Befehl mit dem ir -Ausgangsformat. IR erstellt eine JSON -Datei pro Eingaberahmen.
Bei der Konvertierung von SWF in das ausgewählte Ausgangsformat konvertiert das Programm zunächst die SWF TOA SVG-ähnliche Zwischendarstellung, um die durch das SWF-Format dargestellten Schwierigkeiten abstrahieren. Für Debugging -Zwecke ist es möglich, diesen IR als JSON -Strukturen auszugeben. Bilder und Schriftarten werden als Dateien geschrieben.
-p , --pretty : Wird verwendet, um hübsches Ausgang JSON zu drucken.--indent-size <size> : Einstellgröße verwendet, wenn hübsch gedruckt wird.--y-direction : y Achsenrichtung, entweder up oder down . Standard ist abgelaufen. Zur Verwendung anstelle von [output options] im obigen Befehl.
-DkeepFonts , -DkeepImages : Wird verwendet, um das TEMP -Bild- und Schriftart Dateien zu halten.-DparallelSwfDecoding : SWF -Datei -Dekodierung.-DparallelSwfConversion : Umwandlung in die Zwischendarstellung.-DparallelImageCreation : Erstellung von Bilddateien.-DparallelFrameRendering : Rendern von IR zum Ausgabeformat.-DdrawShapeBounds : Für Definitions -Tags.-DdrawTextBounds : Für DefinitionText -Tags.-DdrawClipBounds : Für PlaceObject -Tags mit Ausschnitttiefe.-DdebugLineWidth=<width> : Grenzen Zeilenbreite In Twips beträgt der Standard 20 Twips.-DdebugLineColor=<color> : Grenzen Zeilenfarbe, Standard ist grün. (Farbe ist eine #rrggbb oder #aarrggbb HEX -Farbe)-DdisableClipping : Deaktivieren Sie das Clipping.-DdisableBlending : Deaktivieren Sie das Mischen außer dem Alpha -Mischmodus.-DdisableMasking : Deaktivieren Sie den Alpha -Blend -Modus.-DframePadding : Polsterung, um Rahmen in Zoll hinzuzufügen.-DfontScale2=[<sx>,<sy>,<usx>,<usy>] : Für definefont2 -Tags.-DfontScale3=[<sx>,<sy>,<usx>,<usy>] : Für definefont3 -Tags.-DframeSize=[<width>,<height>] : Wenn gesetzt, überschreibt die in SWF definierte Rahmengröße für alle Frames. Die Abmessungen sind in Zoll.-DbitmapMatrixOffset : Zusätzlicher Offset für Bitmap -Füllmatrix für Form -Tags. Standard ist [0, 0].-DignoreGlyphOffsetsThreshold=<threshold> : Schwellenwert, unter dem benutzerdefinierte Glyph -Fortschritte für definentext -Tags in Glyphen -Raumeinheiten (1 em = 1024 Glyph -Raumeinheiten) ignoriert werden. Wird verwendet, um die Größe der Ausgabedatei zu reduzieren. Standard ist 32.-DrecursiveFrames : Wenn eingestellt wird, werden in Sprites enthaltene Rahmen rekursiv Rahmen auf höchstem Niveau. Andernfalls werden nur Rahmen der obersten Ebene verwendet (Standard).Beachten Sie, dass diese Optionen für den erweiterten Gebrauch oder für Debugging -Zwecke gedacht sind. Ansonsten sind gemeinsame Verwendungen::
-DignoreGlyphOffsetsThreshold=0 : Halten Sie alle originalen Glyph -Fortschritte.-DfontScale2=[0.05, 0.05, 20, -20] : Schriftmaßstab, die zum Konvertieren von Dateien mit SWF -Tools verwendet wird.-DkeepFonts und -DkeepImages : Extrahieren von Schriftarten oder Bildern. 1. PDF zu SWF und zurück.
Hier wird ein beliebiger PDF mit 92 Seiten in SWF-Dateien mit SWF-Tools 'PDF2SWF konvertiert:
pdf2swf -o pages/%.swf -z input.pdf
Das Ergebnis lautet 92 SWF -Dateien mit dem Namen 1.SWF bis 92.SWF im pages . Konvertieren wir sie nun mit SWF-Convert in eine einzelne PDF-Datei zurück:
java -jar swfconvert.jar pdf pages/ -o report.pdf
--image-format jpg --ignore-empty
-DfontScale2=[0.05,0.05,20,-20]
Zusätzlich ignorieren wir leere Rahmen, verwenden nur JPG-Bilder und verwenden die für SWF-Tools benötigte Spezialschrift-Option. In wenigen Sekunden wird die Datei report.pdf erstellt. 40 Schriftarten wurden aus den in allen Eingabedateien enthaltenen 719 erstellt, und 333 doppelte Bilder wurden aus 344 Bildern entfernt!
2. SELBENT SVG
Eine SWF -Datei mit einem einzelnen Frame wird in ein SVG konvertiert:
java -jar swfconvert.jar --log 4
svg input.swf -o output.svg
--downsample-images --max-dpi 30 --image-format jpg
--images-mode base64 --fonts-mode none
--transform-precision 2 --no-prolog
Bilder sind eingebettet und Pfade werden anstelle von Schriftarten verwendet. Die Präzision für das transform wird ebenfalls erhöht, um Rundungsprobleme mit fonts-mode none zu vermeiden. Um zu vermeiden, dass die SVG zu groß wird, werden auch Bilder verkleinert.
SWF-Convert kann nur statische Dateien konvertieren, ohne dass Animationen oder Aktionen unterstützt werden. Die meisten anderen Einschränkungen ergeben sich aus der Tatsache, dass ich keine Testdaten hatte, mit denen einige Funktionen getestet wurden. Deshalb habe ich mich für eine faule Implementierung entschieden. Hier ist eine detaillierte Liste der aktuellen Einschränkungen.
Fast alle diese Einschränkungen führen zu einer Ausnahme, die ausgelöst wird, und die Umwandlung wird fehlschlagen. Wenn Sie jemals einen Anwendungsfall haben, der Unterstützung für eine der oben genannten Angaben benötigt, öffnen Sie bitte ein Problem und geben Sie die erforderlichen Testdaten an. Ich werde mein Bestes tun, um es zu implementieren. Auch dieses Tool wurde träge implementiert, um meinen eigenen Anwendungsfall zu behandeln, und nichts weiter. Weitere Testdaten ermöglichen es sicherlich, die Löcher zu füllen.
Wenn ich Testdaten sage, meine ich SWF -Dateien, die konvertiert werden können, und das Ergebnis ist visuell mit dem Original verglichen. Ich habe leider nicht die Zeit damit verbracht, automatisierte Tests zu implementieren, die dies tun würden.
Das Projekt ist mit Gradle gebaut, das mit:
./gradlew <tasks> [options]
Nützliche Aufgaben sind:
clean : saubere bau Ergebnissebuild : Projekt erstellendetekt : Ausführen von DETEKT -Analyse zum Projekt ausführenapp:dist : Ausgabe von Fettglas in app/build/libsapp:run : Programm ausführen, indem Sie Eigenschaften aus der Datei dev.properties verwenden:app-test-working-dir : Arbeiten Sie zu verwendenapp-test-args : Verwendungsoptionen Alle Beiträge sind willkommen. Bitte lesen Sie die Richtlinien für die Beitrags.
Sehen Sie sich die Datei CHANGELOG.md für detaillierte Versionshinweise an.
Dieses Programm ist unter LGPL V3 lizenziert. Weitere Informationen finden Sie in der Lizenzdatei. Es verwendet einen geänderten Code für die folgenden Bibliotheken, die im libsrc -Verzeichnis zu finden sind:
Andere Bibliotheken werden ebenfalls verwendet: