Application de ligne de commande pour la conversion des fichiers SWF en PDF ou SVG. Ce programme diffère des alternatives existantes par le fait qu'elle est explicitement destinée à convertir des fichiers qui étaient à l'origine dans PDF (ou d'autres formats vectoriels) et ont été convertis en SWF à l'aide de programmes tels que PDF2SWF ou Adobe de SWF-Tools ou Adobe.
En tant que tel, seul un sous-ensemble de la spécification SWF est pris en charge, sans prise en charge des animations. Voir les limitations pour plus de détails. Seuls les fichiers statiques peuvent être convertis. Par exemple, ce programme pourrait être utilisé pour convertir un livre composé d'un fichier SWF par page.
Pour réduire la taille du fichier de sortie, plusieurs fonctionnalités sont disponibles:
La dernière version se trouve dans la section des versions. Java 8 ou version ultérieure est tenu d'exécuter ce programme. La même version devrait pouvoir fonctionner sur toutes les plates-formes de bureau.
Le fichier JAR peut être exécuté en utilisant la commande suivante:
java -jar swf-convert.jar [main options] <output format> <input files> [output options]
Il peut également prendre un fichier de configuration:
java -jar swf-convert.jar @config.txt
Plusieurs fichiers ou dossiers d'entrée peuvent être spécifiés. Une collection de fichiers est créée pour chaque fichier ou dossier spécifié. Certains arguments devront avoir le même nombre d'arguments qu'il existe des collections d'entrée.
Il est recommandé d'utiliser -Xmx pour augmenter la taille du tas lors de la conversion de grandes collections d'entrée (> 1000 fichiers) car le programme utilise beaucoup de mémoire, en particulier pour la rasterisation du cadre PDF. Jusqu'à 10 Go a été nécessaire dans mon cas ...
Pour une utilisation à la place de [main options] dans la commande ci-dessus.
-h , --help : Afficher le message d'aide pour le programme.-v , --version : afficher le nom de la version.--log <level> : Définissez le niveau de journal minimum à afficher dans STDOUT (OFF: 0, Fatal: 1, Erreur: 2, Warn: 3, Info: 4, Debug: 5, All: 6). Des journaux de tous les niveaux sont également écrits sur ~/swfconvert/logs .-s , --silent : n'affichez pas les progrès pendant la conversion. Pour une utilisation à la place de [output options] dans la commande ci-dessus. Partagé par tous les formats de sortie.
-h , --help : Afficher le message d'aide pour le format de sortie.-o , --output <path> [paths] : Fichiers de sortie ou répertoires. Il doit y en avoir autant que les collections de fichiers d'entrée. Par défaut, la sortie est écrite sur le même chemin que l'entrée. Si vous spécifiez des fichiers, ils doivent avoir la même extension que le format de sortie souhaité.-t , --tempdir <path> : répertoire temporaire utilisé pour les fichiers intermédiaires. Le répertoire temporaire par défaut est le même que le répertoire d'entrée. Les fichiers temporaires sont automatiquement supprimés après la conversion, sauf indication contraire.-e , --ignore-empty : ignorez les trames vides, ne générant pas de sortie pour eux. -g , --dont-group-fonts : Utilisé pour désactiver le regroupement des polices (fusion des polices compatibles dans une seule police).--keep-font-names : Utilisé pour garder les noms de police originaux au lieu d'utiliser des noms génériques. --keep-duplicate-images : utilisée pour conserver des images en double avec les mêmes données binaires.--image-format <format> : Format à utiliser pour les images, peut être l'un des default , jpg ou png . La valeur par défaut est default , auquel cas le format PNG sera utilisé pour les balises DefineBitsLossless et le format JPEG seront utilisés pour les balises DefineBitsJPEG. Tags.--jpeg-quality <quality> : Qualité d'image JPEG entre 0 et 100. La défaut est 75. --downsample-images : Utilisé pour réprimer les images pour limiter la densité de sortie.--downsample-filter <name> : filtre utilisé pour des échantillons d'images, peut être l'un des fast , bell , bicubic , bicubichf , box , bspline , hermite , lanczos3 , mitchell ou triangle . La valeur par défaut est lanczos3 .--downsample-min-size <size> : Taille minimale dans les pixels que les images peuvent être échantillonnées vers ou depuis. Doit être au moins 3 px, la valeur par défaut est de 10 px.--max-dpi <dpi> : Si les images d'échantillonnage, la densité d'image maximale autorisée. La valeur par défaut est de 200 dpi. Pour une utilisation à la place de [output options] dans la commande ci-dessus, avec le format de sortie pdf . La sortie PDF produira une page par cadre. Les cadres de tous les fichiers d'une collection sont écrits dans le même fichier de sortie.
--no-compress : Utilisé pour désactiver la compression PDF de sortie.--metadata <file> [files] : Fichiers JSON de métadonnées utilisés pour chaque collection de fichiers d'entrée. Utilisez un soulignement _ pour appliquer aucune métadonnée pour une collection particulière. Il doit y avoir autant de valeurs que des collections d'entrée. Voir cette section pour plus d'informations sur le schéma JSON.--dont-optimize-page-labels : Utilisé pour désactiver l'optimisation des étiquettes de page (si elle est définie dans les métadonnées). --rasterization-enabled : utilisé pour activer la rasterisation des trames complexes.--rasterization-threshold <threshold> : complexité minimale de fichiers d'entrée requise pour effectuer une rasterisation, dans des unités arbitraires (quelque peu). La valeur par défaut est de 100 000. Doit être réglé manuellement pour voir lequel à quel point la rasterisation produit des fichiers plus petits.--rasterization-dpi <dpi> : densité dans dpi à utiliser pour rasteriser les trames si la rasterisation est activée. La valeur par défaut est de 200 dpi.--rasterization-format : format d'image à utiliser pour les trames rasterisées, jpg ou png . La valeur par défaut est jpg .--rasterization-jpeg-quality : qualité d'image JPEG pour la rasterisation, entre 0 et 100. La valeur par défaut est 75. Pour une utilisation à la place de [output options] dans la commande ci-dessus, avec le format de sortie svg . SVG produira un fichier par trame d'entrée.
-p , --pretty : Utilisé pour imprimer SVG de sortie. Cela désactive également un certain nombre d'optimisations pour augmenter la lisibilité.--svgz : utilisé pour sortir au format SVGZ (compression GZIP).--no-prolog : Utilisé pour omettre le Prolog XML.--precision : précision du chemin SVG, des valeurs de position et de dimension. La valeur par défaut est 1.--transform-precision : Précision des valeurs de transformation SVG. La valeur par défaut est 2.--percent-precision : précision des valeurs de pourcentage SVG. La valeur par défaut est 2.--images-mode <mode> : contrôle comment les images sont incluses dans SVG, peut être une des URL external (en tant que fichiers) ou base64 (intégrées comme URL codées Base64). La valeur par défaut est external .--fonts-mode <mode> : contrôle comment les polices sont incluses dans SVG, peuvent être celles des fichiers external (en tant que fichiers TTF), base64 (intégrés comme URL codés Base64) ou none (pas de polices, utilisation de chemins).Lorsque les images et les polices ne sont pas intégrées, les fichiers sont placés dans le même répertoire que la sortie.
Pour une utilisation à la place de [output options] dans la commande ci-dessus, avec le format de sortie ir . IR produira un fichier JSON par trame d'entrée.
Lors de la conversion SWF au format de sortie choisi, le programme convertit d'abord la représentation intermédiaire de type SVG SWF TOA afin de résumer les difficultés présentées par le format SWF. À des fins de débogage, il est possible de produire ce IR en tant que structures JSON. Les images et les polices sont écrites sous forme de fichiers.
-p , --pretty : Utilisé pour une jolie sortie JSON de sortie.--indent-size <size> : Taille du retrait utilisé si une jolie impression.--y-direction : Direction de l'axe Y, en up ou down . La valeur par défaut est en hausse. Pour une utilisation à la place de [output options] dans la commande ci-dessus.
-DkeepFonts , -DkeepImages : Utilisé pour conserver des fichiers d'image et de police temporaires.-DparallelSwfDecoding : Décodage de fichiers SWF.-DparallelSwfConversion : Conversion en représentation intermédiaire.-DparallelImageCreation : Création de fichiers d'image.-DparallelFrameRendering : rendu du format IR à la sortie.-DdrawShapeBounds : Pour les étiquettes de définition.-DdrawTextBounds : pour les balises de définition.-DdrawClipBounds : Pour les balises PlaceObject avec une profondeur de découpage.-DdebugLineWidth=<width> : Largeur des limites dans Twips, la valeur par défaut est de 20 Twips.-DdebugLineColor=<color> : Couleur des limites, la valeur par défaut est verte. (La couleur est une #rrggbb #aarrggbb-DdisableClipping : Désactiver l'écrêtage.-DdisableBlending : Désactiver le mélange sauf le mode de mélange alpha.-DdisableMasking : Désactiver le mode de mélange alpha.-DframePadding : rembourrage à ajouter autour des cadres en pouces.-DfontScale2=[<sx>,<sy>,<usx>,<usy>] : pour les balises DefineFont2.-DfontScale3=[<sx>,<sy>,<usx>,<usy>] : pour les balises DefineFont3.-DframeSize=[<width>,<height>] : Si définissez, remplace la taille du trame définie dans SWF, pour toutes les trames. Les dimensions sont en pouces.-DbitmapMatrixOffset : décalage supplémentaire à utiliser pour la matrice de remplissage bitmap sur les balises de forme. La valeur par défaut est [0, 0].-DignoreGlyphOffsetsThreshold=<threshold> : seuil sous lesquels les progrès des glyphes personnalisés sont ignorés pour les balises de définition, dans les unités d'espace de glyphes (1 EM = 1024 unités d'espace de glyphes). Utilisé pour réduire la taille du fichier de sortie. La valeur par défaut est 32.-DrecursiveFrames : Si défini, les cadres contenus dans les sprites deviennent des cadres de niveau supérieur, récursivement. Sinon, seules les trames de niveau supérieur sont utilisées (par défaut).Gardez à l'esprit que ces options sont destinées à une utilisation avancée ou à des fins de débogage. Par ailleurs, les utilisations courantes incluent:
-DignoreGlyphOffsetsThreshold=0 : Gardez toutes les avancées de glyphe d'origine.-DfontScale2=[0.05, 0.05, 20, -20] : échelle de police utilisée pour la conversion de fichiers fabriqués avec des outils SWF.-DkeepFonts et -DkeepImages : Extraction de polices ou d'images. 1. PDF à SWF et retour.
Ici, un PDF arbitraire avec 92 pages est converti en fichiers SWF avec SWF-Tools 'PDF2SWF:
pdf2swf -o pages/%.swf -z input.pdf
Le résultat est 92 fichiers SWF nommés 1.swf à 92.swf dans le répertoire pages . Maintenant, convertissons-les en un seul fichier PDF à l'aide de SWF-Convert:
java -jar swfconvert.jar pdf pages/ -o report.pdf
--image-format jpg --ignore-empty
-DfontScale2=[0.05,0.05,20,-20]
De plus, nous ignorerons les cadres vides, n'utiliserons que des images JPG et nous utiliserons l'option d'échelle de police spéciale nécessaire pour SWF-Tools. En quelques secondes, le fichier report.pdf est créé. 40 polices ont été créées à partir du 719 contenu dans tous les fichiers d'entrée, et 333 images en double ont été supprimées à partir de 344 images!
2. SVG autonome
Un fichier SWF avec une seule trame est converti en SVG:
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
Les images sont intégrées et les chemins sont utilisés à la place des polices. La précision de l'attribut transform est également augmentée pour éviter les problèmes d'arrondi avec fonts-mode none . Pour éviter de rendre le SVG trop grand, les images sont également échantillonnées.
SWF-Convert ne peut convertir que les fichiers statiques , sans prise en charge des animations ou des actions. La plupart des autres limitations découlent du fait que je n'avais pas de données de test pour tester certaines fonctionnalités, j'ai donc opté pour une implémentation paresseuse. Voici une liste détaillée des limitations actuelles.
Presque toutes ces limitations entraîneront une exception lancée et la conversion échouera. Si vous avez un cas d'utilisation ayant besoin d'un support pour l'un des éléments ci-dessus, veuillez ouvrir un problème et fournir les données de test requises, je ferai de mon mieux pour la mettre en œuvre. Encore une fois, cet outil a été mis en œuvre paresseusement pour couvrir mon propre cas d'utilisation et rien de plus. Plus de données de test permettra sûrement de remplir les trous.
Lorsque je dis des données de test, je veux dire des fichiers SWF qui peuvent être convertis et le résultat est visuellement comparé à l'original. Malheureusement, je n'ai pas passé le temps à mettre en œuvre des tests automatisés qui le feraient.
Le projet est construit avec Gradle, qui peut être exécuté avec:
./gradlew <tasks> [options]
Les tâches utiles sont:
clean : Clean Build Résultatsbuild : Build Projectdetekt : Exécutez l'analyse Detekt sur le projetapp:dist : Sortir le pot gras vers app/build/libsapp:run : Exécuter le programme, en utilisant les propriétés à partir du fichier dev.properties :app-test-working-dir : travail de travail à utiliserapp-test-args : options à utiliser Toutes les contributions sont les bienvenues. Veuillez lire les directives de contribution.
Affichez le fichier CHANGELOG.md pour des notes de publication détaillées.
Ce programme est sous licence en vertu de LGPL V3, consultez le fichier de licence pour plus de détails. Il utilise du code modifié pour les bibliothèques suivantes, qui se trouvent dans le répertoire libsrc :
D'autres bibliothèques sont également utilisées: