Приложение командной строки для преобразования файлов SWF в PDF или SVG. Эта программа отличается от существующих альтернатив от того факта, что она явно предназначена для преобразования обратных файлов, которые первоначально были в PDF (или других векторных форматах) и были преобразованы в SWF с использованием таких программ, как PDF2SWF или 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 для увеличения размера кучи при преобразовании больших входных коллекций (> 1000 файлов), поскольку в программе используется много памяти, особенно для ратеризации кадров PDF. В моем случае требовалось до 10 ГБ ...
Для использования вместо [main options] в вышеуказанной команде.
-h , --help : Показать сообщение справки для программы.-v , --version : показать имя версии.--log <level> : установите минимальный уровень журнала, чтобы показать в Stdout (OFF: 0, Fatal: 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> : Temp Directory, используемый для промежуточных файлов. Справочник температуры по умолчанию такой же, как каталог ввода. Температурные файлы автоматически удаляются после преобразования, если не указано иное.-e , --ignore-empty : игнорируйте пустые рамки, не генерируя для них вывод. -g , --dont-group-fonts : используется для отключения группировки шрифтов (объединение совместимых шрифтов одним шрифтом).--keep-font-names : используется для поддержания оригинальных имен шрифтов вместо использования общих имен. --keep-duplicate-images : используется для поддержания дубликатов изображений с одинаковыми двоичными данными.--image-format <format> : формат для использования для изображений может быть одним из default , jpg или png . По умолчанию по default , и в этом случае формат PNG будет использоваться для тегов DefineBitslossloss, а формат JPEG будет использоваться для тегов DefineBitsJpeg. теги.--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 пк, по умолчанию составляет 10 пк.--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 (как файлы) или base64 (встроенные как кодированные URL-адреса Base64). По умолчанию external .--fonts-mode <mode> : управляет тем, как включены шрифты в SVG, могут быть одним из external (как файлы TTF), base64 (встроенный как кодированные URL-адреса Base64) или 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 : для определения тегов.-DdrawTextBounds : для тегов DefineText.-DdrawClipBounds : для меток PlaceObject с глубиной обрезки.-DdebugLineWidth=<width> : Ширина границ.-DdebugLineColor=<color> : Цвет линии границ, по умолчанию зеленый. (Цвет - это #rrggbb или #aarrggbb Hex Color)-DdisableClipping : отключить отсечение.-DdisableBlending-DdisableMasking : отключить режим альфа -смеси.-DframePadding : заполнение, чтобы добавить вокруг кадров в дюймах.-DfontScale2=[<sx>,<sy>,<usx>,<usy>] : для тегов DefineFont2.-DfontScale3=[<sx>,<sy>,<usx>,<usy>] : для тегов DefineFont3.-DframeSize=[<width>,<height>] : если установлен, переопределяет размер кадра, определенный в SWF, для всех кадров. Размеры в дюймах.-DbitmapMatrixOffset : дополнительное смещение для использования для матрицы заполнения растрового изображения на тегах формы. По умолчанию [0, 0].-DignoreGlyphOffsetsThreshold=<threshold> : пороговое значение, при котором пользовательские достижения глифа игнорируются для тегов DefineText, в космических единицах Glyph (1 EM = 1024 Пространственные единицы Glyph). Используется для уменьшения размера выходного файла. По умолчанию 32.-DrecursiveFrames : если установлены, кадры, содержащиеся в спрайтах, становятся кадрами верхнего уровня, рекурсивно. В противном случае используются только кадры верхнего уровня (по умолчанию).Имейте в виду, что эти варианты предназначены для расширенного использования или для отладки. В противном случае общее использование включает:
-DignoreGlyphOffsetsThreshold=0 : сохранить все оригинальные достижения Glyph.-DfontScale2=[0.05, 0.05, 20, -20] : шкала шрифтов, используемая для преобразования файлов, изготовленных с помощью SWF -инструментов.-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-инструментов. Через несколько секунд создается файл 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 : Build Projectdetekt : запустить анализ Detekt по проектуapp:dist : app/build/libs шарapp:run : запустить программу, используя свойства из файла dev.properties :app-test-working-dir : Рабочий Dir to Использоватьapp-test-args : параметры для использования Все взносы приветствуются. Пожалуйста, прочитайте руководящие принципы взноса.
Посмотреть файл CHANGELOG.md для подробных заметок о выпуске.
Эта программа лицензирована в рамках LGPL V3, см. Файл лицензии для получения более подробной информации. Он использует модифицированный код для следующих библиотек, которые можно найти в каталоге libsrc :
Другие библиотеки также используются: