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 프레임 래스터 화에 많은 메모리를 사용하기 때문에 대형 입력 컬렉션 (> 1000 파일)을 변환 할 때 -Xmx 사용하여 힙 크기를 늘리는 것이 좋습니다. 제 경우에는 10GB가 필요했습니다 ...
위 명령에서 [main options] 대신 사용합니다.
-h , --help : 프로그램에 대한 도움말을 보여줍니다.-v , --version : 버전 이름 표시.--log <level> : stdout (Off : 0, Fatal : 1, 오류 : 2, 경고 : 3, 정보 : 4, 디버그 : 5, All : 6)에 표시하도록 최소 로그 레벨을 설정하십시오. 모든 레벨의 로그는 ~/swfconvert/logs 에도 기록됩니다.-s , --silent : 변환 중에 진행 상황을 표시하지 마십시오. 위 명령에서 [output options] 대신 사용합니다. 모든 출력 형식으로 공유됩니다.
-h , --help : 출력 형식에 대한 도움말 메시지 표시.-o , --output <path> [paths] : 출력 파일 또는 디렉토리. 입력 파일 수집만큼 많은 것이 있어야합니다. 기본적으로 출력은 입력과 동일한 경로로 기록됩니다. 파일을 지정하는 경우 원하는 출력 형식과 동일한 확장자가 있어야합니다.-t , --tempdir <path> : 중간 파일에 사용되는 Temp 디렉토리. 기본 온도 디렉토리는 입력 디렉토리와 동일합니다. 달리 지정되지 않는 한 Temp 파일은 변환 후 자동으로 제거됩니다.-e , --ignore-empty : 빈 프레임을 무시하고 출력을 생성하지 않습니다. -g , --dont-group-fonts : 글꼴 그룹화를 비활성화하는 데 사용됩니다 (단일 글꼴로 호환 가능한 글꼴을 병합).--keep-font-names : 일반 이름을 사용하는 대신 원래 글꼴 이름을 유지하는 데 사용됩니다. --keep-duplicate-images : 동일한 이진 데이터로 중복 이미지를 유지하는 데 사용됩니다.--image-format <format> : 이미지에 사용할 형식은 default , jpg 또는 png 중 하나 일 수 있습니다. 기본값은 default 이므로 PNG 형식은 DefineBitsLossless 태그에 사용되며 JPEG 형식은 definebitsjpeg 태그에 사용됩니다. 태그.--jpeg-quality <quality> : 0과 100 사이의 JPEG 이미지 품질. 기본값은 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입니다. pdf 출력 형식과 함께 위 명령에서 [output options] 대신 사용합니다. PDF 출력은 프레임 당 한 페이지를 생성합니다. 컬렉션의 모든 파일의 프레임은 동일한 출력 파일에 기록됩니다.
--no-compress : 출력 PDF 압축을 비활성화하는 데 사용됩니다.--metadata <file> [files] : 각 입력 파일 수집에 사용되는 메타 데이터 JSON 파일. 밑줄 _ 사용하여 특정 컬렉션에 메타 데이터를 적용하지 마십시오. 입력 컬렉션만큼 많은 값이 있어야합니다. JSON 스키마에 대한 자세한 내용은이 섹션을 참조하십시오.--dont-optimize-page-labels : 페이지 레이블 최적화를 비활성화하는 데 사용됩니다 (메타 데이터에 설정된 경우). --rasterization-enabled : 복잡한 프레임의 래스터 화를 가능하게하는 데 사용됩니다.--rasterization-threshold <threshold> : (다소) 임의의 단위에서 Rasterization을 수행하는 데 필요한 최소 입력 파일 복잡성. 기본값은 100,000입니다. Rasterization이 어느 시점에서 더 작은 파일을 생성하는지 확인하기 위해 수동으로 조정해야합니다.--rasterization-dpi <dpi> : 래스터 링이 활성화 된 경우 프레임을 히스터 화하는 데 사용하는 DPI의 밀도. 기본값은 200 DPI입니다.--rasterization-format : jpg 또는 png 래스터 화 프레임에 사용할 이미지 형식. 기본값은 jpg 입니다.--rasterization-jpeg-quality : 0에서 100 사이의 래스터 화를위한 JPEG 이미지 품질. 기본값은 75입니다. svg 출력 형식과 함께 위 명령에서 [output options] 대신 사용합니다. 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 (Base64 인코딩 된 URL로 내장)를 제어합니다. 기본값은 external 입니다.--fonts-mode <mode> : 컨트롤은 Fonts가 SVG에 포함 된 방법, external (TTF 파일), base64 (Base64 인코딩 URL로 내장) 또는 none (글꼴 없음, 사용 경로) 일 수 있습니다.이미지와 글꼴이 포함되지 않으면 파일은 출력과 동일한 디렉토리에 배치됩니다.
위의 명령에서 [output options] 대신에 ir 출력 형식을 사용합니다. IR은 입력 프레임 당 하나의 JSON 파일을 생성합니다.
SWF를 선택한 출력 형식으로 변환 할 때, 프로그램은 먼저 SWF 형식에 의해 제시된 어려움을 추상화하기 위해 SWF TOA SVG 유사 중간 표현을 먼저 변환합니다. 디버깅 목적 으로이 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 : 정의 태그 용.-DdrawClipBounds : 클리핑 깊이가있는 PlaceObject 태그의 경우.-DdebugLineWidth=<width> : 경계선 너비는 트윈의 경계선, 기본값은 20 트위입니다.-DdebugLineColor=<color> : 경계선 색상, 기본값은 녹색입니다. (색상은 #rrggbb 또는 #aarrggbb hex 색상입니다)-DdisableClipping : 클리핑 비활성화.-DdisableBlending : 알파 블렌드 모드를 제외한 블렌딩을 비활성화합니다.-DdisableMasking : 알파 블렌드 모드를 비활성화합니다.-DframePadding : 패딩 프레임 주위에 인치를 추가합니다.-DfontScale2=[<sx>,<sy>,<usx>,<usy>] : definefont2 태그의 경우.-DfontScale3=[<sx>,<sy>,<usx>,<usy>] : definefont3 태그의 경우.-DframeSize=[<width>,<height>] : SET가 SWF에 정의 된 프레임 크기를 모든 프레임에 대해 재정의합니다. 치수는 인치입니다.-DbitmapMatrixOffset : 모양 태그의 비트 맵 채우기 행렬에 사용할 추가 오프셋. 기본값은 [0, 0]입니다.-DignoreGlyphOffsetsThreshold=<threshold> : Glyph Space Units (1 EM = 1024 Glyph Specure Units)에서 정의 글리프 고급이 무시되는 임계 값. 출력 파일 크기를 줄이는 데 사용됩니다. 기본값은 32입니다.-DrecursiveFrames : 세트하면 스프라이트에 포함 된 프레임은 재귀 적으로 최상위 프레임이됩니다. 그렇지 않으면 최상위 프레임 만 사용됩니다 (기본값).이러한 옵션은 고급 사용 또는 디버깅 목적을위한 것임을 명심하십시오. 그렇지 않으면 일반적인 용도는 다음과 같습니다.
-DignoreGlyphOffsetsThreshold=0 : 모든 원래 글리프 발전을 유지하십시오.-DfontScale2=[0.05, 0.05, 20, -20] : SWF -Tools로 만든 파일을 변환하는 데 사용되는 글꼴 스케일.-DkeepFonts 및 -DkeepImages : 글꼴 또는 이미지 추출. 1. PDF에서 SWF와 뒤로.
92 페이지의 임의의 PDF는 SWF-Tools의 PDF2SWF를 사용하여 SWF 파일로 변환됩니다.
pdf2swf -o pages/%.swf -z input.pdf
결과는 pages 디렉토리에서 1.swf to 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-Tools에 필요한 특수 글꼴 스케일 옵션을 사용하겠습니다. 몇 초 후에 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/libs 에 Fat Jar를 출력합니다app:run : run 프로그램, dev.properties 파일에서 속성을 사용하여 :app-test-working-dir : 사용하기 위해 작동합니다app-test-args : 사용할 옵션 모든 기부금을 환영합니다. 기여 가이드 라인을 읽으십시오.
자세한 릴리스 노트는 CHANGELOG.md 파일을보십시오.
이 프로그램은 LGPL V3에 따라 라이센스가 부여되며 자세한 내용은 라이센스 파일을 참조하십시오. libsrc 디렉토리에서 찾을 수있는 다음 라이브러리에 수정 된 코드를 사용합니다.
다른 라이브러리도 사용됩니다.