แอปพลิเคชันบรรทัดคำสั่งสำหรับการแปลงไฟล์ SWF เป็น PDF หรือ SVG โปรแกรมนี้แตกต่างจากทางเลือกที่มีอยู่โดยข้อเท็จจริงที่ว่ามันหมายถึงการแปลงไฟล์ย้อนกลับที่มีอยู่เดิมอย่างชัดเจนใน PDF (หรือรูปแบบเวกเตอร์อื่น ๆ ) และได้รับการแปลงเป็น SWF โดยใช้โปรแกรมเช่น PDF2SWF ของ SWF-Tools หรือ Adobe Indesign
ดังนั้นจึงรองรับเฉพาะส่วนย่อยของข้อกำหนด 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
สามารถระบุไฟล์หรือโฟลเดอร์อินพุตหลายไฟล์ การรวบรวม ไฟล์ถูกสร้างขึ้นสำหรับแต่ละไฟล์หรือโฟลเดอร์ที่ระบุ อาร์กิวเมนต์บางอย่างจะต้องมีจำนวนอาร์กิวเมนต์เท่ากันเนื่องจากมีคอลเลกชันอินพุต
ขอแนะนำให้ใช้ -Xmx เพื่อเพิ่มขนาดฮีปเมื่อแปลงคอลเลกชันอินพุตขนาดใหญ่ (> 1,000 ไฟล์) เนื่องจากโปรแกรมใช้หน่วยความจำจำนวนมากโดยเฉพาะอย่างยิ่งสำหรับ Frame Rasterization PDF ต้องใช้มากถึง 10 GB ในกรณีของฉัน ...
สำหรับใช้แทน [main options] ในคำสั่งด้านบน
-h , --help : แสดงข้อความช่วยเหลือสำหรับโปรแกรม-v , --version : แสดงชื่อเวอร์ชัน--log <level> : ตั้งค่าระดับบันทึกขั้นต่ำที่จะแสดงใน stdout (ปิด: 0, fatal: 1, ข้อผิดพลาด: 2, เตือน: 3, ข้อมูล: 4, ดีบัก: 5, ทั้งหมด: 6) บันทึกของทุกระดับจะถูกเขียนไปยัง ~/swfconvert/logs-s , --silent : อย่าแสดงความคืบหน้าในระหว่างการแปลง สำหรับใช้แทน [output options] ในคำสั่งด้านบน แบ่งปันโดยรูปแบบการส่งออกทั้งหมด
-h , --help : แสดงข้อความช่วยเหลือสำหรับรูปแบบผลลัพธ์-o , --output <path> [paths] : ไฟล์เอาต์พุตหรือไดเรกทอรี จะต้องมีคอลเลกชันไฟล์อินพุตมากที่สุด โดยค่าเริ่มต้นเอาต์พุตจะถูกเขียนไปยังเส้นทางเดียวกับอินพุต หากระบุไฟล์พวกเขาจะต้องมีส่วนขยายเช่นเดียวกับรูปแบบเอาต์พุตที่ต้องการ-t , --tempdir <path> : ไดเรกทอรีอุณหภูมิที่ใช้สำหรับไฟล์ระดับกลาง ไดเรกทอรีอุณหภูมิเริ่มต้นเหมือนกับไดเรกทอรีอินพุต ไฟล์ TEMP จะถูกลบออกโดยอัตโนมัติหลังจากการแปลงเว้นแต่จะระบุไว้เป็นอย่างอื่น-e , --ignore-empty : ละเว้นเฟรมที่ว่างเปล่าไม่ได้สร้างเอาต์พุตสำหรับพวกเขา -g , --dont-group-fonts : ใช้ในการปิดใช้งานการจัดกลุ่มแบบอักษร (การรวมแบบอักษรที่เข้ากันได้ในแบบอักษรเดียว)--keep-font-names : ใช้เพื่อเก็บชื่อตัวอักษรดั้งเดิมแทนการใช้ชื่อทั่วไป --keep-duplicate-images : ใช้เพื่อเก็บภาพที่ซ้ำกันด้วยข้อมูลไบนารีเดียวกัน--image-format <format> : รูปแบบที่จะใช้สำหรับรูปภาพสามารถเป็นหนึ่งใน default , jpg หรือ png ค่าเริ่มต้นคือ default ซึ่งรูปแบบ PNG จะใช้สำหรับ defineBitslosslossless tags และรูปแบบ JPEG จะใช้สำหรับ defineBitsJPEG TAGS แท็ก--jpeg-quality <quality> : คุณภาพของภาพ JPEG ระหว่าง 0 ถึง 100 ค่าเริ่มต้นคือ 75 --downsample-images : ใช้เพื่อลดภาพเพื่อ จำกัด ความหนาแน่นของเอาต์พุต--downsample-filter <name> : ตัวกรองที่ใช้ในการลดภาพสามารถเป็นหนึ่งใน fast , bell , bicubic , bicubichf , box , 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] : ไฟล์ Metadata JSON ที่ใช้สำหรับการรวบรวมไฟล์อินพุตแต่ละรายการ ใช้ขีดล่าง _ เพื่อใช้เมตาดาต้าสำหรับคอลเลกชันเฉพาะ จะต้องมีค่ามากเท่าที่มีคอลเลกชันอินพุต ดูส่วนนี้สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ JSON Schema--dont-optimize-page-labels : ใช้เพื่อปิดใช้งานการเพิ่มประสิทธิภาพฉลากหน้า (ถ้าตั้งค่าในข้อมูลเมตา) --rasterization-enabled : ใช้เพื่อเปิดใช้งาน Rasterization ของเฟรมที่ซับซ้อน--rasterization-threshold <threshold> : ความซับซ้อนของไฟล์อินพุตขั้นต่ำที่จำเป็นในการดำเนินการ rasterization ในหน่วยโดยพลการ (ค่อนข้าง) ค่าเริ่มต้นคือ 100,000 ควรได้รับการปรับด้วยตนเองเพื่อดูว่า ณ จุดใดที่ Rasterization สร้างไฟล์ขนาดเล็ก--rasterization-dpi <dpi> : ความหนาแน่นใน DPI เพื่อใช้ในการแรสเตอร์เฟรมหากเปิดใช้งาน Rasterization ค่าเริ่มต้นคือ 200 dpi--rasterization-format : รูปแบบภาพที่จะใช้สำหรับเฟรม rasterized ไม่ว่าจะเป็น jpg หรือ png ค่าเริ่มต้นคือ jpg--rasterization-jpeg-quality : คุณภาพของภาพ JPEG สำหรับ Rasterization ระหว่าง 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 (เป็นไฟล์) หรือ base64 (ฝังเป็น URL ที่เข้ารหัส Base64 Base64) ค่าเริ่มต้นคือ external--fonts-mode <mode> : ควบคุมวิธีการรวมตัวอักษรใน SVG สามารถเป็นหนึ่งใน external (เป็นไฟล์ TTF), base64 (ฝังเป็น URL ที่เข้ารหัส BASE64) หรือ none (ไม่มีแบบอักษรใช้เส้นทาง)เมื่อภาพและฟอนต์ไม่ได้ฝังอยู่ไฟล์จะถูกวางไว้ในไดเรกทอรีเดียวกับเอาต์พุต
สำหรับใช้แทน [output options] ในคำสั่งด้านบนด้วยรูปแบบเอาต์พุต ir IR จะสร้างไฟล์ JSON หนึ่งไฟล์ต่อเฟรมอินพุต
เมื่อแปลง SWF เป็นรูปแบบเอาต์พุตที่เลือกโปรแกรมแรกจะแปลงการแสดง SWF TOA SVG-like Intermediate เป็นครั้งแรกเพื่อที่จะสรุปปัญหาที่นำเสนอโดยรูปแบบ SWF เพื่อจุดประสงค์ในการดีบักมีความเป็นไปได้ที่จะส่งออก IR นี้เป็นโครงสร้าง JSON รูปภาพและฟอนต์ถูกเขียนเป็นไฟล์
-p , --pretty : ใช้ในการพิมพ์เอาต์พุต JSON--indent-size <size> : ขนาดเยื้องที่ใช้ถ้าการพิมพ์สวย--y-direction : ทิศทางแกน y ทั้ง up หรือ down ค่าเริ่มต้นขึ้น สำหรับใช้แทน [output options] ในคำสั่งด้านบน
-DkeepFonts , -DkeepImages : ใช้เพื่อเก็บภาพอิมเมจและตัวอักษร-DparallelSwfDecoding : การถอดรหัสไฟล์ SWF-DparallelSwfConversion : การแปลงเป็นการแสดงระดับกลาง-DparallelImageCreation : การสร้างไฟล์รูปภาพ-DparallelFrameRendering : การแสดงผลจากรูปแบบเอาท์พุท-DdrawShapeBounds : สำหรับแท็ก defineshape-DdrawTextBounds : สำหรับแท็ก defeletext-DdrawClipBounds : สำหรับแท็ก PlaceObject ที่มีความลึกของการตัด-DdebugLineWidth=<width> : ขอบเขตความกว้างของสายใน twips ค่าเริ่มต้นคือ 20 twips-DdebugLineColor=<color> : สีของเส้นขอบเขตค่าเริ่มต้นคือสีเขียว (สีคือ #rrggbb หรือ #aarrggbb สี hex)-DdisableClipping : ปิดการใช้งานการตัด-DdisableBlending : ปิดการใช้งานการผสมยกเว้นโหมด Alpha Blend-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 ที่กำหนดเองจะถูกละเว้นสำหรับแท็ก defelext ในหน่วย Glyph Space (1 EM = 1024 Glyph Space Units) ใช้เพื่อลดขนาดไฟล์เอาต์พุต ค่าเริ่มต้นคือ 32-DrecursiveFrames : ถ้าตั้งค่าเฟรมที่อยู่ในสไปรต์จะกลายเป็นเฟรมระดับบนสุดซ้ำ มิฉะนั้นจะใช้เฟรมระดับสูงสุดเท่านั้น (ค่าเริ่มต้น)โปรดทราบว่าตัวเลือกเหล่านี้มีไว้สำหรับการใช้งานขั้นสูงหรือเพื่อจุดประสงค์ในการดีบัก มิฉะนั้นการใช้งานทั่วไป ได้แก่ :
-DignoreGlyphOffsetsThreshold=0 : รักษาความก้าวหน้าของ Glyph ดั้งเดิมทั้งหมด-DfontScale2=[0.05, 0.05, 20, -20] : มาตราส่วนตัวอักษรที่ใช้สำหรับการแปลงไฟล์ที่ทำด้วย SWF -tools-DkeepFonts และ -DkeepImages : การแยกฟอนต์หรือรูปภาพ 1. PDF ถึง SWF และกลับ
ที่นี่ PDF โดยพลการพร้อม 92 หน้าจะถูกแปลงเป็นไฟล์ SWF ด้วย SWF-Tools 'PDF2SWF:
pdf2swf -o pages/%.swf -z input.pdf
ผลลัพธ์คือไฟล์ 92 SWF ชื่อ 1.SWF ถึง 92.SWF ในไดเรกทอรี pages ตอนนี้ลองแปลงกลับเป็นไฟล์ PDF เดียวโดยใช้ SWF-convert:
java -jar swfconvert.jar pdf pages/ -o report.pdf
--image-format jpg --ignore-empty
-DfontScale2=[0.05,0.05,20,-20]
นอกจากนี้เราจะเพิกเฉยต่อเฟรมที่ว่างเปล่าใช้เฉพาะภาพ JPG และเราจะใช้ตัวเลือกสเกลแบบอักษรพิเศษที่จำเป็นสำหรับ SWF-tools ในเวลาไม่กี่วินาทีไฟล์ report.pdf จะถูกสร้างขึ้น 40 ฟอนต์ถูกสร้างขึ้นจาก 719 ที่มีอยู่ในไฟล์อินพุตทั้งหมดและภาพที่ซ้ำกัน 333 ภาพถูกลบออกจาก 344 ภาพ!
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 : output fat jar ไปยัง app/build/libsapp:run : รันโปรแกรมโดยใช้คุณสมบัติจากไฟล์ dev.properties :app-test-working-dir : ใช้งาน DIR เพื่อใช้งานapp-test-args : ตัวเลือกที่จะใช้ ยินดีต้อนรับการมีส่วนร่วมทั้งหมด โปรดอ่านแนวทางการบริจาค
ดูไฟล์ CHANGELOG.md สำหรับบันทึกย่อที่มีรายละเอียด
โปรแกรมนี้ได้รับอนุญาตภายใต้ LGPL V3 โปรดดูไฟล์ใบอนุญาตสำหรับรายละเอียดเพิ่มเติม ใช้รหัสแก้ไขสำหรับไลบรารีต่อไปนี้ซึ่งสามารถพบได้ในไดเรกทอรี libsrc :
มีการใช้ห้องสมุดอื่น ๆ ด้วย: