将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目录中找到:
其他库也使用: