Aplikasi baris perintah untuk mengonversi file SWF ke PDF atau SVG. Program ini berbeda dari alternatif yang ada dengan fakta bahwa itu secara eksplisit dimaksudkan untuk mengonversi file kembali yang awalnya dalam PDF (atau format vektor lainnya) dan telah dikonversi menjadi SWF menggunakan program seperti PDF2SWF atau Adobe InDesign.
Dengan demikian, hanya sebagian dari spesifikasi SWF yang didukung, tanpa dukungan untuk animasi. Lihat batasan untuk detail lebih lanjut. Hanya file statis yang dapat dikonversi. Misalnya, program ini dapat digunakan untuk mengonversi buku yang terdiri dari satu file SWF per halaman.
Untuk mengurangi ukuran file output, beberapa fitur tersedia:
Rilis terbaru dapat ditemukan di bawah bagian rilis. Java 8 atau lebih baru diperlukan untuk menjalankan program ini. Bangunan yang sama harus dapat berjalan di semua platform desktop.
File jar dapat dijalankan menggunakan perintah berikut:
java -jar swf-convert.jar [main options] <output format> <input files> [output options]
Ini juga dapat mengambil file konfigurasi:
java -jar swf-convert.jar @config.txt
Beberapa file input atau folder dapat ditentukan. Koleksi file dibuat untuk setiap file atau folder yang ditentukan. Beberapa argumen perlu memiliki jumlah argumen yang sama karena ada koleksi input.
Disarankan untuk menggunakan -Xmx untuk meningkatkan ukuran tumpukan saat mengonversi koleksi input besar (> 1000 file) karena program ini menggunakan banyak memori, terutama untuk rasterisasi bingkai PDF. Sebanyak 10 GB telah diperlukan dalam kasus saya ...
Untuk digunakan sebagai pengganti [main options] dalam perintah di atas.
-h , --help : Tampilkan pesan bantuan untuk program ini.-v , --version : Tampilkan nama versi.--log <level> : atur level log minimum untuk ditampilkan di stdout (OFF: 0, fatal: 1, Kesalahan: 2, peringatkan: 3, info: 4, debug: 5, semua: 6). Log dari semua level juga ditulis ke ~/swfconvert/logs .-s , --silent : Jangan menampilkan kemajuan selama konversi. Untuk digunakan sebagai pengganti [output options] dalam perintah di atas. Dibagikan oleh semua format output.
-h , --help : Tampilkan pesan bantuan untuk format output.-o , --output <path> [paths] : file output atau direktori. Harus ada sebanyak koleksi file input. Secara default, output ditulis ke jalur yang sama dengan input. Jika menentukan file, mereka harus memiliki ekstensi yang sama dengan format output yang diinginkan.-t , --tempdir <path> : Direktori TEMP yang digunakan untuk file perantara. Direktori temp default sama dengan direktori input. File temp secara otomatis dihapus setelah konversi, kecuali ditentukan sebaliknya.-e , --ignore-empty : Abaikan bingkai kosong, tidak menghasilkan output untuk mereka. -g , --dont-group-fonts : Digunakan untuk menonaktifkan pengelompokan font (menggabungkan font yang kompatibel dalam satu font).--keep-font-names : Digunakan untuk menyimpan nama font asli alih-alih menggunakan nama generik. --keep-duplicate-images : Digunakan untuk menyimpan gambar duplikat dengan data biner yang sama.--image-format <format> : Format yang akan digunakan untuk gambar, dapat menjadi salah satu dari default , jpg atau png . Default adalah default , dalam hal ini format PNG akan digunakan untuk tag DefinebitsLossless dan format JPEG akan digunakan untuk tag DefinebitsJPEG. tag.--jpeg-quality <quality> : KUALITAS Gambar JPEG antara 0 dan 100. Default adalah 75. --downsample-images : Digunakan untuk menurunkan contoh gambar untuk membatasi kepadatan output.--downsample-filter <name> : Filter yang digunakan untuk menurunkan contoh gambar, bisa menjadi salah satu dari fast , bell , bicubic , bicubichf , box , bspline , hermite , lanczos3 , mitchell atau triangle . Default adalah lanczos3 .--downsample-min-size <size> : Ukuran minimum dalam piksel yang gambar dapat diturunkan ke atau dari. Harus setidaknya 3 px, default adalah 10 px.--max-dpi <dpi> : Jika gambar downsampling, kepadatan gambar maksimum yang diizinkan. Default adalah 200 dpi. Untuk digunakan sebagai pengganti [output options] dalam perintah di atas, dengan format output pdf . Output PDF akan menghasilkan satu halaman per frame. Bingkai semua file dalam koleksi ditulis ke file output yang sama.
--no-compress : Digunakan untuk menonaktifkan kompresi PDF output.--metadata <file> [files] : File Metadata JSON yang digunakan untuk setiap koleksi file input. Gunakan underscore _ untuk menerapkan tidak ada metadata untuk koleksi tertentu. Harus ada nilai sebanyak yang ada koleksi input. Lihat bagian ini untuk informasi lebih lanjut tentang skema JSON.--dont-optimize-page-labels : Digunakan untuk menonaktifkan optimasi label halaman (jika diatur dalam metadata). --rasterization-enabled : Digunakan untuk mengaktifkan rasterisasi frame kompleks.--rasterization-threshold <threshold> : Kompleksitas file input minimum yang diperlukan untuk melakukan rasterisasi, dalam (agak) unit sewenang-wenang. Default adalah 100.000. Harus disetel secara manual untuk melihat mana di mana rasterisasi menghasilkan file yang lebih kecil.--rasterization-dpi <dpi> : Kepadatan dalam DPI untuk digunakan untuk merobek bingkai jika rasterisasi diaktifkan. Default adalah 200 dpi.--rasterization-format : Format gambar yang akan digunakan untuk bingkai raster, baik jpg atau png . Default adalah jpg .--rasterization-jpeg-quality : Kualitas gambar JPEG untuk rasterisasi, antara 0 dan 100. Default adalah 75. Untuk digunakan sebagai pengganti [output options] dalam perintah di atas, dengan format output svg . SVG akan menghasilkan satu file per bingkai input.
-p , --pretty : Digunakan untuk mencetak output svg. Ini juga menonaktifkan sejumlah optimisasi untuk meningkatkan keterbacaan.--svgz : Digunakan untuk output dalam format SVGZ (kompresi GZIP).--no-prolog : Digunakan untuk menghilangkan prolog XML.--precision : Presisi jalur SVG, posisi, dan nilai dimensi. Default adalah 1.--transform-precision : ketepatan nilai transformasi SVG. Default adalah 2.--percent-precision : ketepatan nilai persentase SVG. Default adalah 2.--images-mode <mode> : Mengontrol bagaimana gambar disertakan dalam SVG, dapat salah satu dari file external (sebagai file) atau base64 (tertanam sebagai URL yang dikodekan base64). Default adalah external .--fonts-mode <mode> : Mengontrol bagaimana font disertakan dalam SVG, dapat menjadi salah satu dari external (sebagai file TTF), base64 (tertanam sebagai URL yang dikodekan base64) atau none (tidak ada font, gunakan jalur).Ketika gambar dan font tidak tertanam, file ditempatkan di direktori yang sama dengan output.
Untuk digunakan sebagai pengganti [output options] dalam perintah di atas, dengan format output ir . IR akan menghasilkan satu file JSON per bingkai input.
Saat mengonversi SWF ke format output yang dipilih, program ini pertama-tama mengonversi representasi perantara seperti SWF TOA SVG untuk mengabstraksikan kesulitan yang disajikan oleh format SWF. Untuk tujuan debugging, dimungkinkan untuk menampilkan IR ini sebagai struktur JSON. Gambar dan font ditulis sebagai file.
-p , --pretty : Digunakan untuk mencetak output json.--indent-size <size> : ukuran inden digunakan jika pencetakan cantik.--y-direction : arah sumbu y, baik up atau down . Default sudah habis. Untuk digunakan sebagai pengganti [output options] dalam perintah di atas.
-DkeepFonts , -DkeepImages : Digunakan untuk menyimpan gambar temp dan file font.-DparallelSwfDecoding : DECODING file SWF.-DparallelSwfConversion : Konversi ke representasi menengah.-DparallelImageCreation : Pembuatan file gambar.-DparallelFrameRendering : rendering dari IR ke format output.-DdrawShapeBounds : untuk tag defineshape.-DdrawTextBounds : untuk tag definetext.-DdrawClipBounds : Untuk tag PlaceObject dengan kedalaman kliping.-DdebugLineWidth=<width> : Lebar garis batas dalam twips, default adalah 20 twips.-DdebugLineColor=<color> : Warna garis batas, default berwarna hijau. (Warna adalah warna #rrggbb atau #aarrggbb hex)-DdisableClipping : Nonaktifkan kliping.-DdisableBlending : Nonaktifkan pencampuran kecuali mode campuran alpha.-DdisableMasking : Nonaktifkan mode campuran alpha.-DframePadding : Padding untuk ditambahkan di sekitar bingkai dalam inci.-DfontScale2=[<sx>,<sy>,<usx>,<usy>] : untuk tag definefont2.-DfontScale3=[<sx>,<sy>,<usx>,<usy>] : untuk tag definefont3.-DframeSize=[<width>,<height>] : Jika diatur, menimpa ukuran bingkai yang didefinisikan dalam SWF, untuk semua bingkai. Dimensi dalam inci.-DbitmapMatrixOffset : Offset tambahan untuk digunakan untuk matriks pengisian bitmap pada tag bentuk. Default adalah [0, 0].-DignoreGlyphOffsetsThreshold=<threshold> : ambang batas di mana kemajuan mesin terbang khusus diabaikan untuk tag definetext, dalam unit ruang terbang glyph (1 EM = 1024 unit ruang terbang terbang). Digunakan untuk mengurangi ukuran file output. Default adalah 32.-DrecursiveFrames : Jika diatur, bingkai yang terkandung dalam sprite menjadi bingkai tingkat atas, secara rekursif. Jika tidak, hanya bingkai tingkat atas yang digunakan (default).Perlu diingat bahwa opsi ini dimaksudkan untuk penggunaan lanjutan atau untuk tujuan debugging. Kalau tidak, penggunaan umum meliputi:
-DignoreGlyphOffsetsThreshold=0 : Pertahankan semua kemajuan mesin terbang asli.-DfontScale2=[0.05, 0.05, 20, -20] : Skala font yang digunakan untuk mengonversi file yang dibuat dengan alat SWF.-DkeepFonts DAN -DkeepImages : Mengekstraksi font atau gambar. 1. PDF ke SWF dan kembali.
Di sini PDF sewenang-wenang dengan 92 halaman dikonversi menjadi file SWF dengan PDF2SWF SWF-Tools:
pdf2swf -o pages/%.swf -z input.pdf
Hasilnya adalah 92 file SWF bernama 1.swf ke 92.swf di direktori pages . Sekarang mari kita mengonversinya kembali ke satu file PDF menggunakan SWF-Convert:
java -jar swfconvert.jar pdf pages/ -o report.pdf
--image-format jpg --ignore-empty
-DfontScale2=[0.05,0.05,20,-20]
Selain itu kami akan mengabaikan bingkai kosong, hanya menggunakan gambar JPG, dan kami akan menggunakan opsi skala font khusus yang diperlukan untuk alat SWF. Dalam beberapa detik, file report.pdf dibuat. 40 font dibuat dari 719 yang terkandung di semua file input, dan 333 gambar duplikat dihapus dari 344 gambar!
2. SVG mandiri
File SWF dengan satu bingkai dikonversi ke 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
Gambar tertanam dan jalur digunakan sebagai ganti font. Presisi untuk atribut transform juga ditingkatkan untuk menghindari masalah pembulatan dengan fonts-mode none . Untuk menghindari membuat SVG terlalu besar, gambar juga downsampled.
SWF-Convert hanya dapat mengonversi file statis , tanpa dukungan untuk animasi atau tindakan. Sebagian besar keterbatasan lain muncul dari fakta bahwa saya tidak memiliki data uji untuk menguji beberapa fitur, jadi saya memilih implementasi malas. Berikut adalah daftar keterbatasan saat ini yang terperinci.
Hampir semua batasan ini akan mengakibatkan pengecualian dilemparkan, dan konversi akan gagal. Jika Anda pernah memiliki kasus penggunaan yang membutuhkan dukungan untuk salah satu hal di atas, buka masalah dan berikan data uji yang diperlukan, saya akan melakukan yang terbaik untuk mengimplementasikannya. Sekali lagi, alat ini diimplementasikan dengan malas untuk menutupi kasus penggunaan saya sendiri dan tidak lebih. Lebih banyak data uji pasti akan memungkinkan untuk mengisi lubang.
Ketika saya mengatakan data uji, maksud saya file SWF yang dapat dikonversi dan hasilnya secara visual dibandingkan dengan aslinya. Sayangnya saya tidak menghabiskan waktu menerapkan pengujian otomatis yang akan melakukannya.
Proyek ini dibangun dengan Gradle, yang dapat dijalankan dengan:
./gradlew <tasks> [options]
Tugas yang berguna adalah:
clean : Bersih Hasil Bangunbuild : Membangun Proyekdetekt : Jalankan analisis detekt pada proyekapp:dist : Output Fat Toples ke app/build/libsapp:run : Jalankan program, menggunakan properti dari file dev.properties :app-test-working-dir : bekerja dir akan digunakanapp-test-args : Opsi untuk digunakan Semua kontribusi dipersilakan. Harap baca pedoman kontribusi.
Lihat file CHANGELOG.md untuk catatan rilis terperinci.
Program ini dilisensikan di bawah LGPL V3, lihat file lisensi untuk lebih jelasnya. Ini menggunakan kode yang dimodifikasi untuk pustaka berikut, yang dapat ditemukan di direktori libsrc :
Perpustakaan lain juga digunakan: