將SWF文件轉換為PDF或SVG的命令行應用程序。該程序與現有替代方案有所不同,因為它明確表示最初使用PDF(或其他向量格式)的文件轉換文件,並已使用SWF-Tools的PDF2SWF或Adobe Indesign等程序將其轉換為SWF。
因此,僅支持SWF規範的一個子集,不支持動畫。有關更多詳細信息,請參見限制。只能轉換靜態文件。例如,該程序可用於轉換每頁由一個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框架柵格化,建議使用-Xmx在轉換大輸入集合(> 1000個文件)時增加堆大小。在我的情況下,需要多達10 GB ...
用於代替上述命令中的[main options] 。
-h , --help :顯示程序的幫助消息。-v , --version :顯示版本名稱。--log <level> :將最小日誌級別設置為在Stdout中顯示(OFF:0,致命:1,錯誤:2,WARN:3,INFO:4,DEBUG:5,ALL:6)。所有級別的日誌也寫入~/swfconvert/logs 。-s , --silent :在轉換過程中不要顯示進度。用於代替上述命令中的[output options] 。由所有輸出格式共享。
-h , --help :顯示輸出格式的幫助消息。-o , --output <path> [paths] :輸出文件或目錄。必須有盡可能多的輸入文件收集。默認情況下,輸出將寫入與輸入相同的路徑。如果指定文件,則必須具有與所需的輸出格式相同的擴展名。-t , --tempdir <path> :用於中間文件的臨時目錄。默認溫度目錄與輸入目錄相同。臨時文件在轉換後自動刪除,除非另有說明。-e , --ignore-empty :忽略空幀,不為其生成輸出。 -g , --dont-group-fonts :用於禁用字體分組(在單個字體中合併兼容字體)。--keep-font-names原始字體名稱而不是使用通用名稱。 --keep-duplicate-images :用於與相同的二進制數據保持重複的圖像。--image-format <format> :用於圖像的格式可以是default , jpg或png之一。默認值為default值,在這種情況下,PNG格式將用於DefineBitslossLossTags,JPEG格式將用於DefineBitsJPEG標籤。標籤。--jpeg-quality <quality> :jpeg圖像質量在0到100之間。默認值為75。 --downsample-images :用於下樣本圖像以限制輸出密度。--downsample-filter <name> :用於下樣本圖像的過濾器,可以是fast , bell , bicubic , bicubichf , box , bspline ,bspline, hermite , lanczos3 , mitchell或triangle 。默認值為lanczos3 。--downsample-min-size <size> :以像素的最小尺寸,可以將圖像刪除或從中刪除。必須至少為3個PX,默認值為10 px。--max-dpi <dpi> :如果降採樣圖像,則最大允許的圖像密度。默認值為200 dpi。用於代替上述命令中的[output options] ,並與pdf輸出格式一起使用。 PDF輸出將每幀產生一頁。集合中所有文件的幀都寫入同一輸出文件。
--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將每個輸入框架產生一個文件。
-p , --pretty :用於漂亮打印輸出SVG。這也可以禁用許多優化以提高可讀性。--svgz :用於以SVGZ格式輸出(GZIP壓縮)。--no-prolog :用於省略XML Prolog。--precision :SVG路徑,位置和維度值的精度。默認值為1。--transform-precision :SVG變換值的精度。默認值為2。--percent-precision :SVG百分比值的精度。默認值為2。--images-mode <mode> :控制SVG中的圖像如何包含,可以使用external (AS文件)或base64 (嵌入為base64編碼URL)。默認值是external 。--fonts-mode <mode> :控製字體如何包含在SVG中,可以是external (作為TTF文件)之一, base64 (嵌入為base64編碼URL)或none (沒有字體,使用路徑)。當未嵌入圖像和字體時,文件將與輸出相同的目錄放置在相同的目錄中。
用於代替上述命令中的[output options] ,並與ir輸出格式一起使用。 IR每個輸入框架將產生一個JSON文件。
將SWF轉換為選定的輸出格式時,該程序首先將SWF TOA類似SVG的中間表示形式轉換,以抽象SWF格式帶來的困難。出於調試目的,可以將此IR作為JSON結構輸出。圖像和字體寫為文件。
-p , --pretty :用於漂亮打印輸出JSON。--indent-size <size> :如果打印漂亮,則使用縮進大小。--y-direction :y軸方向, up down默認值已升起。用於代替上述命令中的[output options] 。
-DkeepFonts , -DkeepImages :用於保留臨時圖像和字體文件。-DparallelSwfDecoding :SWF文件解碼。-DparallelSwfConversion :轉換為中間表示。-DparallelImageCreation :創建圖像文件。-DparallelFrameRendering :從IR到輸出格式渲染。-DdrawShapeBounds :用於Defineshape標籤。-DdrawTextBounds :用於decteText標籤。-DdrawClipBounds :對於具有剪輯深度的PlaceObject標籤。-DdebugLineWidth=<width> :傾斜中的邊界寬度,默認值為20個twips。-DdebugLineColor=<color> :邊界顏色,默認為綠色。 (顏色是#rrggbb或#aarrggbb六角形的顏色)-DdisableClipping :禁用剪輯。-DdisableBlending融合:禁用混合混合模式除外。-DdisableMasking :禁用Alpha Blend模式。-DframePadding :填充以添加英寸的框架。-DfontScale2=[<sx>,<sy>,<usx>,<usy>] :對於DefineFont2標籤。-DfontScale3=[<sx>,<sy>,<usx>,<usy>] :對於DefineFont3標籤。-DframeSize=[<width>,<height>] :如果設置,則覆蓋所有幀中SWF中定義的幀大小。尺寸為英寸。-DbitmapMatrixOffset :用於位圖標籤上的位圖填充矩陣的附加偏移量。默認值為[0,0]。-DignoreGlyphOffsetsThreshold=<threshold> :在Glyph Space單元中忽略自定義字形的閾值(1 EM = 1024 Glyph Space單位)。用於減少輸出文件大小。默認值為32。-DrecursiveFrames :如果設置,則遞歸中包含的框架將成為頂級框架。否則,僅使用頂級幀(默認)。請記住,這些選項旨在用於高級使用或用於調試目的。否則常見用途包括:
-DignoreGlyphOffsetsThreshold=0 :保持所有原始的字形前進。-DfontScale2=[0.05, 0.05, 20, -20] :用於轉換用SWF -tool製成的文件的字體刻度。-DkeepFonts和-DkeepImages :提取字體或圖像。 1。 PDF到SWF和後退。
在這裡,使用SWF-Tools的PDF2SWF轉換為92頁的任意PDF轉換為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-Tool所需的特殊字體比例選項。在幾秒鐘內,創建了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只能轉換靜態文件,而不支持動畫或操作。大多數其他局限性是由於我沒有測試數據來測試某些功能的事實,因此我選擇了懶惰的實現。這是當前限制的詳細列表。
幾乎所有這些限制都會導致例外,轉換將失敗。如果您曾經有一個用例需要支持上述一個,請打開問題並提供所需的測試數據,我會盡力實施它。同樣,該工具懶洋洋地實施以涵蓋我自己的用例,僅此而已。更多的測試數據肯定會填充孔。
當我說測試數據時,我的意思是可以轉換的SWF文件,並在視覺上將結果與原始文件進行比較。不幸的是,我沒有花時間實施可以做到這一點的自動測試。
該項目是由Gradle構建的,可以運行:
./gradlew <tasks> [options]
有用的任務是:
clean :清潔構建結果build :構建項目detekt :對項目進行DETEKT分析app:dist :輸出脂肪罐到app/build/libsapp:run :運行程序,使用dev.properties文件的屬性:app-test-working-dir :使用DIR用於使用app-test-args :使用的選項歡迎所有貢獻。請閱讀貢獻指南。
查看CHANGELOG.md文件以獲取詳細的發行說明。
此程序已根據LGPL V3許可,有關更多詳細信息,請參見許可證文件。它為以下庫使用修改的代碼,可以在libsrc目錄中找到:
其他庫也使用: