SWFファイルをPDFまたはSVGに変換するためのコマンドラインアプリケーション。このプログラムは、元々PDF(またはその他のベクトル形式)であったバックファイルを明示的に変換することを目的としており、SWF-ToolsのPDF2SWFやAdobe InDesignなどのプログラムを使用してSWFに変換されたという事実によって、既存の代替品とは異なります。
そのため、SWF仕様のサブセットのみがサポートされており、アニメーションはサポートされていません。詳細については、制限を参照してください。静的ファイルのみを変換できます。たとえば、このプログラムは、ページごとに1つのSWFファイルで構成される本を変換するために使用できます。
出力ファイルサイズを削減するには、いくつかの機能が利用可能です。
最新リリースは、リリースセクションの下にあります。 Java 8以降は、このプログラムを実行する必要があります。同じビルドがすべてのデスクトッププラットフォームで実行できるはずです。
JARファイルは、次のコマンドを使用して実行できます。
java -jar swf-convert.jar [main options] <output format> <input files> [output options]
構成ファイルを採取することもできます。
java -jar swf-convert.jar @config.txt
複数の入力ファイルまたはフォルダーを指定できます。ファイルコレクションは、指定されたファイルまたはフォルダーごとに作成されます。いくつかの議論は、入力コレクションがあるのと同じ数の引数を持つ必要があります。
プログラムは、特にPDFフレームラスター化には多くのメモリを使用するため、大規模な入力コレクション(> 1000ファイル)を変換するときに、 -Xmx使用してヒープサイズを増やすことをお勧めします。私の場合、10 GBも必要です...
上記のコマンドで[main options]の代わりに使用するため。
-h 、 --help :プログラムのヘルプメッセージを表示します。-v 、 --version :バージョン名を表示します。--log <level> :stdoutで表示する最小ログレベルを設定します(off:0、致命的:1、エラー:2、ワーン:3、情報:4、デバッグ:5、すべて:6)。すべてのレベルのログは~/swfconvert/logsにも書き込まれます。-s 、 --silent :変換中に進行状況を表示しないでください。上記のコマンドで[output options]の代わりに使用するため。すべての出力形式で共有。
-h 、 --help :出力形式のヘルプメッセージを表示します。-o 、 --output <path> [paths] :出力ファイルまたはディレクトリ。入力ファイルコレクションと同じくらい多く存在する必要があります。デフォルトでは、出力は入力と同じパスに書き込まれます。ファイルを指定する場合、目的の出力形式と同じ拡張子が必要です。-t 、 --tempdir <path> :中間ファイルに使用されるTEMPディレクトリ。デフォルトのTEMPディレクトリは、入力ディレクトリと同じです。特に指定されていない限り、変換後に温度ファイルは自動的に削除されます。-e 、 --ignore-empty :空のフレームを無視し、それらの出力を生成しません。 -g 、 --dont-group-fonts :フォントグループを無効にするために使用されます(互換性のあるフォントのマージを単一のフォント)。--keep-font-names :一般的な名前を使用する代わりに、元のフォント名を保持するために使用されます。 --keep-duplicate-images :同じバイナリデータで画像の複製を保持するために使用されます。--image-format <format> :画像に使用する形式は、 defaultの1つ、 jpgまたはpngです。デフォルトはdefaultです。この場合、PNG形式はdefineBitslessのタグに使用され、JPEG形式はDefineBitsJPEGタグに使用されます。タグ。--jpeg-quality <quality> :jpeg画像品質は0〜100です。デフォルトは75です。 --downsample-images :出力密度を制限するために画像をダウンサンプリングするために使用されます。--downsample-filter <name> :画像のダウンサンプルに使用されるフィルターは、 fast 、 bell 、バイチューbicubic 、 bicubichf 、 box 、 bspline 、 hermite 、 lanczos3 、 mitchell 、またはtriangleの1つです。デフォルトはlanczos3です。--downsample-min-size <size> :画像をダウンサンプできます。少なくとも3 px、デフォルトは10 pxである必要があります。--max-dpi <dpi> :画像をダウンサンプリングする場合、最大許容画像密度。デフォルトは200 dpiです。上記のコマンドで[output options]の代わりに使用し、 pdf出力形式を使用します。 PDF出力は、フレームごとに1ページを生成します。コレクション内のすべてのファイルのフレームは、同じ出力ファイルに書き込まれます。
--no-compress :出力PDF圧縮を無効にするために使用されます。--metadata <file> [files] :各入力ファイルコレクションに使用されるメタデータJSONファイル。アンダースコア_を使用して、特定のコレクションにメタデータを適用しません。入力コレクションがあるのと同じくらい多くの値がなければなりません。 JSONスキーマの詳細については、このセクションを参照してください。--dont-optimize-page-labels :ページラベルの最適化を無効にするために使用されます(メタデータに設定されている場合)。 --rasterization-enabled :複雑なフレームのラスター化を有効にするために使用されます。--rasterization-threshold <threshold> :ラスター化を実行するために必要な最小入力ファイルの複雑さ(やや)任意のユニット。デフォルトは100,000です。どのポイントでラスター化が小さなファイルを生成するかを確認するために手動で調整する必要があります。--rasterization-dpi <dpi> :ラスター化が有効になった場合にフレームをラスター化するために使用するDPIの密度。デフォルトは200 dpiです。--rasterization-format : jpgまたはpngのいずれかのラスター化フレームに使用する画像形式。デフォルトはjpgです。--rasterization-jpeg-quality :JPEGラスター化のための画質0〜100。デフォルトは75です。上記のコマンドで[output options]の代わりに使用し、 svg出力形式を使用します。 SVGは、入力フレームごとに1つのファイルを生成します。
-p 、 --pretty :かなり印刷出力svgに使用されます。これにより、読みやすさを向上させるために多くの最適化も無効になります。--svgz :SVGZ形式での出力(GZIP圧縮)に使用されます。--no-prolog :XMLプロログを省略するために使用されます。--precision :SVGパス、位置、および寸法値の精度。デフォルトは1です。--transform-precision :SVG変換値の精度。デフォルトは2です。--percent-precision :SVGパーセンテージ値の精度。デフォルトは2です。--images-mode <mode> :画像がsvgに含まれる方法、 external (ファイルとして)またはbase64 (base64エンコードされたURLとして埋め込まれている)を制御します。デフォルトはexternalです。--fonts-mode <mode> :フォントがSVGに含まれる方法、 external (TTFファイルとして)の1つ、 base64 (base64エンコードされたURLとして埋め込まれている)、またnone (フォントなし、パスを使用)を制御します。画像とフォントが埋め込まれていない場合、ファイルは出力と同じディレクトリに配置されます。
上記のコマンドで[output options]の代わりに使用し、 ir出力形式を使用します。 IRは、入力フレームごとに1つのJSONファイルを生成します。
SWFを選択した出力形式に変換するとき、プログラムは最初にSWF形式で提示される困難を抽象化するために、SWF TOA SVGのような中間表現を変換します。デバッグのために、このIRをJSON構造として出力することが可能です。画像とフォントはファイルとして記述されます。
-p 、 --pretty :かなり印刷出力JSONに使用されます。--indent-size <size> :きれいな印刷で使用されるインデントサイズ。--y-direction :y軸方向、 upまたはdown 。デフォルトが上昇しています。上記のコマンドで[output options]の代わりに使用するため。
-DkeepFonts 、 -DkeepImages :TEMPイメージとフォントファイルを保持するために使用されます。-DparallelSwfDecoding :swfファイルデコード。-DparallelSwfConversion :中間表現への変換。-DparallelImageCreation :画像ファイルの作成。-DparallelFrameRendering :IRから出力形式へのレンダリング。-DdrawShapeBounds :defineShapeタグの場合。-DdrawTextBounds :definetextタグ用。-DdrawClipBounds :クリッピング深度のPlaceObjectタグの場合。-DdebugLineWidth=<width> :境界線幅がtwipsで、デフォルトは20のtwipsです。-DdebugLineColor=<color> :境界線の色、デフォルトは緑です。 (色は#rrggbbまたは#aarrggbb hex色です)-DdisableClipping :クリッピングを無効にします。-DdisableBlending :アルファブレンドモード以外のブレンドを無効にします。-DdisableMasking :Alphaブレンドモードを無効にします。-DframePadding :インチでフレームの周りを追加するパディング。-DfontScale2=[<sx>,<sy>,<usx>,<usy>] :definefont2タグの場合。-DfontScale3=[<sx>,<sy>,<usx>,<usy>] :definefont3タグの場合。-DframeSize=[<width>,<height>] :設定されている場合、すべてのフレームに対してSWFで定義されたフレームサイズをオーバーライドします。寸法はインチ単位です。-DbitmapMatrixOffset :シェイプタグのビットマップ塗りつぶしマトリックスに使用する追加のオフセット。デフォルトは[0、0]です。-DignoreGlyphOffsetsThreshold=<threshold> :グリフスペースユニット(1 em = 1024グリフスペースユニット)で、定義タグに対してカスタムグリフの進歩が無視されるしきい値。出力ファイルサイズを削減するために使用されます。デフォルトは32です。-DrecursiveFrames :設定されている場合、スプライトに含まれるフレームは再帰的にトップレベルのフレームになります。それ以外の場合、トップレベルのフレームのみが使用されます(デフォルト)。これらのオプションは、高度な使用またはデバッグ目的のためのものであることに注意してください。それ以外の場合は、以下が含まれます。
-DignoreGlyphOffsetsThreshold=0 :すべての元のグリフの進歩を維持します。-DfontScale2=[0.05, 0.05, 20, -20] :SWF -Toolsで作成されたファイルを変換するために使用されるフォントスケール。-DkeepFonts and -DkeepImages :フォントまたは画像の抽出。 1。SWFおよびバックへのPDF。
ここでは、92ページの任意のPDFがSWF-ToolsのPDF2SWFを使用してSWFファイルに変換されます。
pdf2swf -o pages/%.swf -z input.pdf
その結果、 pagesディレクトリに1.swfから92.swfという名前の92のSWFファイルがあります。それでは、SWF convertを使用して、それらを単一のPDFファイルに変換してみましょう。
java -jar swfconvert.jar pdf pages/ -o report.pdf
--image-format jpg --ignore-empty
-DfontScale2=[0.05,0.05,20,-20]
さらに、空のフレームを無視し、JPG画像のみを使用し、SWFツールに必要な特別なフォントスケールオプションを使用します。数秒で、 report.pdfファイルが作成されます。すべての入力ファイルに含まれる719から40個のフォントが作成され、344個の画像から333個の複製画像が削除されました!
2。自己完結型SVG
単一のフレームを持つSWFファイルは、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
画像は埋め込まれ、フォントの代わりにパスが使用されます。 transform属性の精度も増加して、 fonts-mode noneの丸めの問題を避けます。 SVGを大きくしすぎないようにするために、画像もダウンサンプリングされます。
SWF Convertは、アニメーションやアクションをサポートすることなく、静的ファイルのみを変換できます。他のほとんどの制限は、いくつかの機能をテストするテストデータがなかったという事実から生じるため、怠zyな実装を選択しました。現在の制限の詳細なリストは次のとおりです。
これらの制限のほぼすべてが、例外がスローされ、変換が失敗します。上記のいずれかのサポートが必要なユースケースがある場合は、問題を開いて必要なテストデータを提供してください。実装するために最善を尽くします。繰り返しますが、このツールは、私自身のユースケースをカバーするために怠lazに実装されました。より多くのテストデータは、確実に穴を埋めることができます。
テストデータと言うとき、私は変換できるSWFファイルを意味し、結果は元のファイルと視覚的に比較されます。残念ながら、それを行う自動テストの実装に時間を費やしませんでした。
プロジェクトはGradleで構築されています。
./gradlew <tasks> [options]
便利なタスクは次のとおりです。
clean :クリーンビルド結果build :プロジェクトをビルドしますdetekt :プロジェクトでDetekt分析を実行しますapp:dist : app/build/libsに脂肪瓶を出力しますapp:run : dev.propertiesファイルからプロパティを使用してプログラムを実行します。app-test-working-dir :使用する作業監督app-test-args :使用するオプションすべての貢献は大歓迎です。貢献ガイドラインをお読みください。
詳細なリリースノートについては、 CHANGELOG.mdファイルを表示します。
このプログラムはLGPL V3の下でライセンスされています。詳細については、ライセンスファイルを参照してください。以下のライブラリに変更されたコードを使用します。これは、 libsrcディレクトリにあります。
他のライブラリも使用されます。