diff --git a/Directory.Build.props b/Directory.Build.props index a261b5a..a5ddf54 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -14,7 +14,7 @@ parameters of a member is fine (CS1573). --> $(NoWarn);CS1591;CS1573 - 1.0.1 + 1.1.0 Filee Filee contributors Copyright (c) Filee contributors diff --git a/README.ko.md b/README.ko.md index 8239669..5bd5379 100644 --- a/README.ko.md +++ b/README.ko.md @@ -4,12 +4,12 @@

드래그로 쓰는 무료 오픈소스 Windows 파일 변환기.
- Ctrl을 누른 채 파일을 끌면 커서 위치에 도넛이 열립니다. 원하는 형식 위에 놓으면 끝. + 키(기본 Ctrl)를 누른 채 파일을 끌면 커서 위치에 도넛이 열립니다. 원하는 형식 위에 놓으면 끝.

웹사이트 · - 다운로드 · + 다운로드 · 시작하기 · 문서

@@ -26,9 +26,9 @@ - - - + + +
커서 바로 옆에서
프로그램 창을 열 필요가 없어요. 끌고 있는 파일에 맞는 형식만 커서 위치에 나타납니다.
한컴오피스 없이 HWP·HWPX
내장 HWPX 작성기가 워드 문서의 레이아웃을 유지하고, rhwp가 HWP ↔ HWPX, PDF, PNG를 변환합니다.
내 PC 안에서만
아무것도 업로드하지 않아요. 인터넷 없이도 동작하고 결과는 원본 바로 옆에 저장됩니다.
커서 바로 옆에서
앱 창을 열 필요가 없어요. 끌고 있는 파일에 맞는 형식만 지금 있는 자리에 나타나요.
170가지 넘는 형식, 다른 프로그램 없이
이미지, PDF, 워드, 엑셀, 파워포인트, HWP, 전자책, 압축 파일, 글꼴, CAD를 오피스·한컴오피스·LibreOffice 없이 변환해요.
내 PC 안에서만
아무것도 업로드하지 않아요. 오프라인으로 동작하고 결과는 원본 바로 옆에 저장해요.
@@ -41,36 +41,46 @@ ## 기능 -- **커서 위치에 뜨는 도넛 툴바.** 수정키 + 파일 드래그(기본 Ctrl). 수정키 조합, 마우스 버튼, 드래그 거리, - 길게 누르기, 선택한 파일용 키보드 단축키까지 모두 바꿀 수 있습니다. -- **파일 종류별 툴바.** 이미지, PDF, 문서, 스프레드시트, 프레젠테이션, HWP/HWPX, 텍스트, 혼합 파일용 프로필. 실제 도넛 위에서 드래그 앤 드롭으로 - 프리셋을 넣고, 빼고, 순서를 바꿉니다. 우클릭이나 ✎로 프리셋을 편집합니다. -- **프리셋.** 품질, 크기 조정, DPI, 메타데이터, TIFF 압축, ICO 크기, PDF 합치기·나누기, 페이지 범위, - 저장 위치, 파일 이름 패턴, 이름 충돌 처리. -- **일괄 변환.** 1개든 100개든 동시에 변환하고, 하나가 실패해도 나머지는 계속됩니다. -- **경로 자동 계획.** 여러 단계 변환도 알아서 찾습니다(예: HWPX → PDF → PNG). 단계마다 가장 잘하는 엔진을 씁니다. -- **네 가지 사용 방법.** 드래그 동작, 탐색기 우클릭과 보내기, 탐색기에서 선택한 파일 + 단축키, 메인 창 드롭 영역. +- **커서 위치에 뜨는 도넛 툴바.** 수정키(기본 Ctrl)를 누른 채 파일을 끌면 돼요. 수정키 조합, 마우스 버튼, 드래그 + 거리, 길게 누르기, 선택한 파일용 키보드 단축키까지 모두 바꿀 수 있어요. +- **파일 종류별 툴바.** 이미지, PDF, 문서, 스프레드시트, 프레젠테이션, HWP, 텍스트, 전자책, 동영상, 오디오, 벡터 그래픽, + 압축 파일, CAD, 글꼴, 그리고 여러 종류를 함께 골랐을 때의 툴바. 실제 도넛 위에서 드래그 앤 드롭으로 프리셋을 배치하고, + 확장자는 태그로 추가하고, 우클릭이나 ✎로 프리셋을 편집해요. +- **프리셋.** 품질, 크기 조정, DPI, 메타데이터, PDF 합치기·나누기, 페이지 범위, 동영상 화질·해상도, 오디오 비트레이트, + 압축 수준, 저장 위치, 파일 이름 패턴, 이름 충돌 처리. +- **일괄 변환.** 1개든 100개든 동시에 변환하고, 하나가 실패해도 나머지는 계속돼요. "ZIP 하나로"는 어떤 파일이든 압축 파일 + 하나로, "PDF 병합"은 PDF 하나로 묶어요. +- **경로 자동 계획.** 여러 단계 변환도 알아서 찾아요(예: HWP → HWPX → DOCX, EPUB → HWPX → PDF → PNG). 단계마다 가장 잘하는 + 엔진을 써요. +- **네 가지 사용 방법.** 드래그 동작, 탐색기 우클릭 메뉴(Windows 11은 기본 메뉴에도)와 보내기, 탐색기에서 선택한 파일 + + 단축키, 메인 창 드롭 영역. +- **보이는 엔진.** 설정 → 변환 엔진에서 엔진마다 버전과 변환 범위를 보여 주고, 추가 엔진은 다운로드 속도와 남은 시간을 + 보며 받을 수 있어요. - **말랑한 애니메이션 UI.** 라이트·다크·시스템 테마, 강조색, 모서리 둥글기, 저사양 PC를 위한 *애니메이션 줄이기*. -- **한국어, English, 简体中文.** 기본값은 Windows 언어를 따릅니다. +- **한국어, English, 简体中文.** 기본값은 Windows 언어를 따라요. ## 지원 형식 | 원본 | 변환 대상 | |---|---| -| **이미지**: JPG, PNG, WEBP, TIFF, BMP, GIF, ICO, AVIF, JPEG XL, JPEG 2000, PSD/PSB, TGA, PPM; HEIC, 김프 XCF, 카메라 RAW, EMF/WMF(읽기) | 모든 이미지 형식, ICNS, PDF | -| **벡터**: SVG, SVGZ, AI, EPS, PS; ICNS | PDF(벡터 그대로), PNG 등 이미지, SVG ↔ SVGZ, PDF → EPS/PS | -| **PDF** | PNG, JPG, TIFF, 합치기, 나누기, 페이지 범위 | -| **문서**: DOCX, DOC, ODT, RTF | PDF, HWPX, 서로 변환, TXT, HTML | -| **스프레드시트**: XLSX, XLS, ODS, CSV | PDF, XLSX ↔ CSV, HWPX, HTML | -| **프레젠테이션**: PPTX, PPT, ODP | PDF, PNG, JPG, HWPX | -| **한글**: HWP, HWPX | PDF, HWPX ↔ HWP, DOCX, TXT, 마크다운, HTML | -| **텍스트**: TXT, 마크다운, HTML | DOCX, HWPX, PDF | - -DOCX·XLSX·CSV·PPTX → PDF, 한글 파일, 마크다운은 설치하자마자 변환됩니다. MS 오피스·한컴오피스·LibreOffice가 없어도 -되고, PC에 설치된 프로그램은 쓰지 않습니다. 오래된 형식(DOC·XLS·PPT·OpenDocument)과 DOCX·ODT로 저장하기는 -LibreOffice, HTML과 마크다운 ↔ 워드는 Pandoc, EPS·PostScript는 Ghostscript를 쓰는데, 모두 처음 실행할 때 받을지 -물어보는 추가 엔진입니다. -HWPX를 어떻게 만들고 검증하는지는 [docs/ENGINES.md](docs/ENGINES.md#hwpx-writer)에 있습니다. +| **이미지**: JPG, PNG, WEBP, AVIF, TIFF, BMP, GIF, ICO, ICNS, JPEG XL, JPEG 2000, PSD/PSB, TGA, PPM; HEIC, GIMP XCF, 카메라 RAW(CR2, CR3, NEF, ARW, DNG 등)는 읽기 | 위 형식끼리, PDF, 크기 조정, 흑백 | +| **벡터**: SVG, SVGZ, EMF, WMF, AI · EPS, PS¹ · CDR, VSD, CGM, ODG² | PDF(벡터), PNG 등 이미지, SVG ↔ SVGZ, PDF → EPS/PS¹ | +| **PDF** | DOCX, HWPX, TXT, PNG, JPG, TIFF, CBZ; 합치기, 나누기, 페이지 범위 | +| **문서**: DOCX, DOCM, DOTX, EML · DOC, ODT, RTF, WPS, WPD, Pages 등² | PDF, DOCX, HWPX, EPUB, TXT, HTML | +| **스프레드시트**: XLSX, XLSM, XLS, ODS, CSV, TSV · Numbers, ET² | PDF, XLSX, ODS, CSV, TSV, HWPX, HTML | +| **프레젠테이션**: PPTX, PPTM, POTX, PPSX · PPT, ODP, Keynote² | PDF, PNG, JPG, DOCX, HWPX | +| **한글**: HWP, HWPX | PDF, PNG, DOCX, HWPX ↔ HWP, TXT, 마크다운, HTML | +| **텍스트**: TXT, 마크다운, HTML · reStructuredText, LaTeX³ | PDF, DOCX, HWPX, EPUB | +| **전자책**: EPUB, MOBI, AZW3, AZW, AZW4, FB2, CBZ, CBR, CB7, HTMLZ, TXTZ · LIT, LRF, CHM, PDB 등⁴ | PDF, EPUB, DOCX, TXT, HTML, HWPX · MOBI, AZW3⁴ | +| **동영상**⁵: MP4, MOV, MKV, WEBM, AVI, WMV, FLV, MPEG, TS, M2TS, 3GP, OGV, VOB 등 | MP4, WEBM, MOV, MKV, AVI, GIF, MP3, M4A, 720p | +| **오디오**⁵: MP3, M4A, AAC, WAV, FLAC, OGG, OPUS, WMA, AIFF, AMR 등 | MP3, M4A, WAV, FLAC, OGG, OPUS, AAC | +| **압축 파일**: ZIP, 7Z, RAR, TAR, TAR.GZ, TAR.BZ2, TAR.XZ, GZ, ISO, CAB, DMG, ALZ, EGG 등 | 압축 풀기, ZIP, 7Z, TAR, TAR.GZ; 여러 파일 → ZIP 하나 | +| **CAD**: DWG, DXF | PDF, SVG, PNG, DWG ↔ DXF | +| **글꼴**: TTF, OTF, WOFF, WOFF2, EOT | 서로 변환 | + +표시가 없는 것은 설치하자마자 변환돼요. MS 오피스·한컴오피스·LibreOffice가 없어도 되고, PC에 설치된 프로그램은 쓰지 않아요. +처음 실행할 때 받을지 물어보는 추가 엔진: ¹ Ghostscript, ² LibreOffice, ³ Pandoc, ⁴ calibre, ⁵ FFmpeg. 엔진마다 무엇을 +유지하고 무엇을 빼는지는 [docs/ENGINES.md](docs/ENGINES.md)에 있어요. ## 스크린샷 @@ -95,13 +105,16 @@ HWPX를 어떻게 만들고 검증하는지는 [docs/ENGINES.md](docs/ENGINES.md ## 시작하기 -**설치:** [`Filee-win-Setup.exe`](https://github.com/KnifeLemon/Filee/releases/latest/download/Filee-win-Setup.exe)를 받으세요 -(Windows 10/11, 64비트). 다른 버전은 [Releases](https://github.com/KnifeLemon/Filee/releases)에 있습니다. +**설치:** [Releases](https://github.com/KnifeLemon/Filee/releases/latest)에서 최신 `Filee-<버전>-win-Setup.exe`를 +받으세요(Windows 10/11, 64비트). -- **설치 파일은 가볍습니다.** 이미지, PDF, HWP/HWPX, 마크다운, DOCX·XLSX·PPTX → PDF, XLSX ↔ CSV는 설치하자마자 바로 변환됩니다. -- **큰 엔진은 골라서 설치합니다.** 처음 실행하면 LibreOffice(DOC·XLS·PPT 같은 오래된 오피스 형식, 약 420MB)와 Pandoc(HTML·마크다운 ↔ 워드, 약 42MB)을 받을지 묻습니다. 나중에 설정 → 변환 엔진에서 언제든 설치하거나 지울 수 있습니다. +- **자주 쓰는 형식은 설치 파일에 다 들어 있어요.** 이미지, PDF, 워드, 엑셀, 파워포인트, HWP, 전자책, 압축 파일, 글꼴, CAD는 + 설치하자마자 변환돼요. +- **큰 엔진은 골라서 설치해요.** 처음 실행하면 동영상·오디오용 엔진(FFmpeg, 약 100MB)과 드문 형식용 엔진(LibreOffice, + calibre, Ghostscript, Pandoc)을 크기와 함께 보여 줘요. 설정 → 변환 엔진에서 다운로드 속도와 남은 시간을 보며 언제든 + 설치하거나 지울 수 있어요. - **업데이트는 알려 드려요.** 새 버전이 나오면 메뉴 하단, 알림, 트레이 메뉴에 표시되고 누르면 최신 릴리스 페이지가 - 열립니다. 새 설치 파일을 실행하면 설정은 그대로 유지돼요. + 열려요. 새 설치 파일을 실행하면 설정은 그대로 유지돼요. macOS 지원은 계획 중입니다. diff --git a/README.md b/README.md index aad8971..1383909 100644 --- a/README.md +++ b/README.md @@ -4,12 +4,12 @@

A free, open-source file converter for Windows that you use by dragging.
- Hold Ctrl, drag files and drop them on a format in the donut that opens right at your cursor. + Hold a key (Ctrl by default), drag files and drop them on a format in the donut that opens right at your cursor.

Website · - Download · + Download · Get started · Docs

@@ -27,7 +27,7 @@ - +
Right at your cursor
No app window to open. The formats appear where you already are, only the ones that make sense for the files you drag.
HWP & HWPX without Hancom Office
A built-in HWPX writer keeps the layout of Word documents; rhwp converts HWP ↔ HWPX, PDF and PNG.
170+ formats, no other software
Images, PDF, Word, Excel, PowerPoint, HWP, e-books, archives, fonts and CAD work without Office, Hancom Office or LibreOffice.
Stays on your PC
Nothing is uploaded. Filee works offline and saves the result right next to the original.
@@ -41,18 +41,22 @@ ## Features -- **Donut toolbar at the cursor.** Modifier + drag files (default Ctrl). Everything is configurable: any modifier - combination, mouse button, drag distance, a hold gesture or a keyboard shortcut for the selected files. -- **One toolbar per file type.** Images, PDF, documents, spreadsheets, presentations, HWP/HWPX, text and a fallback - for mixed files. - Arrange presets on a live donut by drag & drop; right-click or ✎ edits a preset. -- **Presets.** Quality, resizing, DPI, metadata, TIFF compression, ICO sizes, PDF merge and split, page ranges, - output folder, file name pattern and conflict handling. -- **Batch conversion.** 1 file or 100, converted in parallel; one failure never stops the rest. -- **Planned routes.** Multi-step conversions are found automatically (e.g. HWPX → PDF → PNG), each step with the engine - that does it best. -- **Four ways in.** The drag gesture, Explorer right-click and Send To, a keyboard shortcut on the Explorer selection, - and the drop zone in the main window. +- **Donut toolbar at the cursor.** Hold a modifier key (Ctrl by default) and drag files. Everything is + configurable: any modifier combination, mouse button, drag distance, a hold gesture or a keyboard shortcut for the + selected files. +- **One toolbar per file type.** Images, PDF, documents, spreadsheets, presentations, HWP, text, e-books, video, audio, + vector graphics, archives, CAD and fonts, plus toolbars for mixed selections. Arrange presets on a live donut by + drag & drop, add extensions as tags, right-click or ✎ to edit a preset. +- **Presets.** Quality, resizing, DPI, metadata, PDF merge and split, page ranges, video quality and resolution, audio + bitrate, archive compression, output folder, file name pattern and conflict handling. +- **Batch conversion.** 1 file or 100, converted in parallel; one failure never stops the rest. "One ZIP" packs any + files into a single archive, "Merge PDF" makes one PDF. +- **Planned routes.** Multi-step conversions are found automatically (e.g. HWP → HWPX → DOCX, EPUB → HWPX → PDF → PNG), + each step with the engine that does it best. +- **Four ways in.** The drag gesture, Explorer's right-click menu (on Windows 11 also in the main menu) and Send To, a + keyboard shortcut on the Explorer selection, and the drop zone in the main window. +- **Engines you can see.** Settings → Engines lists every engine with its version and what it converts; optional + engines download with speed and time left. - **Soft, animated UI.** Light, dark or system theme, your accent colour, adjustable roundness and a *Reduce animations* switch for older PCs. - **English, 한국어, 简体中文**, following your Windows language by default. @@ -61,20 +65,25 @@ | From | To | |---|---| -| **Images**: JPG, PNG, WEBP, TIFF, BMP, GIF, ICO, AVIF, JPEG XL, JPEG 2000, PSD/PSB, TGA, PPM; HEIC, GIMP XCF, camera RAW, EMF/WMF (read) | any image format, ICNS, PDF | -| **Vector**: SVG, SVGZ, AI, EPS, PS; ICNS | PDF (vector), PNG and other images, SVG ↔ SVGZ, PDF → EPS/PS | -| **PDF** | PNG, JPG, TIFF, merge, split, page ranges | -| **Documents**: DOCX, DOC, ODT, RTF | PDF, HWPX, each other, TXT, HTML | -| **Spreadsheets**: XLSX, XLS, ODS, CSV | PDF, XLSX ↔ CSV, HWPX, HTML | -| **Presentations**: PPTX, PPT, ODP | PDF, PNG, JPG, HWPX | -| **HWP**: HWP, HWPX | PDF, HWPX ↔ HWP, DOCX, TXT, Markdown, HTML | -| **Text**: TXT, Markdown, HTML | DOCX, HWPX, PDF | - -DOCX, XLSX, CSV and PPTX → PDF, everything HWP and Markdown work out of the box: no Microsoft Office, Hancom Office or -LibreOffice needed, and Filee never uses programs installed on your PC. Older formats (DOC, XLS, PPT, OpenDocument) -and saving as DOCX / ODT use LibreOffice, HTML / Markdown ↔ Word use Pandoc, EPS / PostScript use Ghostscript: optional -engines that Filee offers to download on first start. -How HWPX is written and checked: [docs/ENGINES.md](docs/ENGINES.md#hwpx-writer). +| **Images**: JPG, PNG, WEBP, AVIF, TIFF, BMP, GIF, ICO, ICNS, JPEG XL, JPEG 2000, PSD/PSB, TGA, PPM; HEIC, GIMP XCF, camera RAW (CR2, CR3, NEF, ARW, DNG, …) read | any of these, PDF, resized, grayscale | +| **Vector**: SVG, SVGZ, EMF, WMF, AI · EPS, PS¹ · CDR, VSD, CGM, ODG² | PDF (vector), PNG and other images, SVG ↔ SVGZ, PDF → EPS/PS¹ | +| **PDF** | DOCX, HWPX, TXT, PNG, JPG, TIFF, CBZ; merge, split, page ranges | +| **Documents**: DOCX, DOCM, DOTX, EML · DOC, ODT, RTF, WPS, WPD, Pages, …² | PDF, DOCX, HWPX, EPUB, TXT, HTML | +| **Spreadsheets**: XLSX, XLSM, XLS, ODS, CSV, TSV · Numbers, ET² | PDF, XLSX, ODS, CSV, TSV, HWPX, HTML | +| **Presentations**: PPTX, PPTM, POTX, PPSX · PPT, ODP, Keynote² | PDF, PNG, JPG, DOCX, HWPX | +| **HWP**: HWP, HWPX | PDF, PNG, DOCX, HWPX ↔ HWP, TXT, Markdown, HTML | +| **Text**: TXT, Markdown, HTML · reStructuredText, LaTeX³ | PDF, DOCX, HWPX, EPUB | +| **E-books**: EPUB, MOBI, AZW3, AZW, AZW4, FB2, CBZ, CBR, CB7, HTMLZ, TXTZ · LIT, LRF, CHM, PDB, …⁴ | PDF, EPUB, DOCX, TXT, HTML, HWPX · MOBI, AZW3⁴ | +| **Video**⁵: MP4, MOV, MKV, WEBM, AVI, WMV, FLV, MPEG, TS, M2TS, 3GP, OGV, VOB, … | MP4, WEBM, MOV, MKV, AVI, GIF, MP3, M4A, 720p | +| **Audio**⁵: MP3, M4A, AAC, WAV, FLAC, OGG, OPUS, WMA, AIFF, AMR, … | MP3, M4A, WAV, FLAC, OGG, OPUS, AAC | +| **Archives**: ZIP, 7Z, RAR, TAR, TAR.GZ, TAR.BZ2, TAR.XZ, GZ, ISO, CAB, DMG, ALZ, EGG, … | extract, ZIP, 7Z, TAR, TAR.GZ; any files → one ZIP | +| **CAD**: DWG, DXF | PDF, SVG, PNG, DWG ↔ DXF | +| **Fonts**: TTF, OTF, WOFF, WOFF2, EOT | each other | + +Everything without a mark works out of the box: no Microsoft Office, Hancom Office or LibreOffice needed, and Filee +never uses programs installed on your PC. Optional engines Filee offers to download: ¹ Ghostscript, ² LibreOffice, +³ Pandoc, ⁴ calibre, ⁵ FFmpeg. Details, including what each engine keeps and leaves out: +[docs/ENGINES.md](docs/ENGINES.md). ## Screenshots @@ -99,11 +108,14 @@ How HWPX is written and checked: [docs/ENGINES.md](docs/ENGINES.md#hwpx-writer). ## Get started -**Install:** download [`Filee-win-Setup.exe`](https://github.com/KnifeLemon/Filee/releases/latest/download/Filee-win-Setup.exe) -(Windows 10/11, 64-bit) or pick a version on the [Releases](https://github.com/KnifeLemon/Filee/releases) page. +**Install:** download the latest `Filee--win-Setup.exe` from +[Releases](https://github.com/KnifeLemon/Filee/releases/latest) (Windows 10/11, 64-bit). -- **The installer is small.** Images, PDF, HWP/HWPX, Markdown, DOCX / XLSX / PPTX → PDF and XLSX ↔ CSV work right away. -- **Large engines are optional.** On first start Filee offers LibreOffice for older office formats such as DOC, XLS and PPT (~420 MB) and Pandoc for HTML and Markdown ↔ Word (~42 MB). You can install or remove them any time in Settings → Engines. +- **Everything common is in the installer.** Images, PDF, Word, Excel, PowerPoint, HWP, e-books, archives, fonts and + CAD work right away. +- **Large engines are optional.** On first start Filee offers the engines for video and audio (FFmpeg, ~100 MB) and for + rare formats (LibreOffice, calibre, Ghostscript, Pandoc), each with its size. Install or remove them any time in + Settings → Engines, which shows download speed and time left. - **You hear about updates.** When a new release is out, Filee says so at the bottom of the menu, in a notice and in the tray menu, and opens the latest release to download it. Run the new installer; your settings are kept. diff --git a/README.zh-CN.md b/README.zh-CN.md index 28cc568..ccd605f 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -4,12 +4,12 @@

用拖放操作的免费开源 Windows 文件格式转换器。
- 按住 Ctrl 拖动文件,光标处会弹出格式圆环,放到想要的格式上即可。 + 按住一个键(默认 Ctrl)拖动文件,光标处会弹出格式圆环,放到想要的格式上即可。

官网 · - 下载 · + 下载 · 快速开始 · 文档

@@ -26,9 +26,9 @@ - - - + + +
就在光标旁边
无需打开程序窗口。只显示适合当前拖动文件的格式,就在你的光标处。
无需韩文办公软件处理 HWP/HWPX
内置 HWPX 写入器保留 Word 文档的版式;rhwp 负责 HWP ↔ HWPX、PDF 和 PNG。
只在你的电脑上
不上传任何内容。离线也能使用,结果保存在原文件旁边。
就在光标旁
无需打开应用窗口。只显示适合当前拖动文件的格式,就在你所在的位置。
170 多种格式,无需其他软件
图片、PDF、Word、Excel、PowerPoint、HWP、电子书、压缩包、字体和 CAD,无需 Office、韩文办公软件或 LibreOffice。
只在你的电脑上
不上传任何文件。Filee 离线工作,结果保存在原文件旁边。
@@ -41,15 +41,18 @@ ## 功能 -- **光标处的格式圆环。** 按住修饰键拖动文件(默认 Ctrl)。修饰键组合、鼠标按键、拖动距离、长按手势, +- **光标处的格式圆环。** 按住修饰键(默认 Ctrl)拖动文件即可。修饰键组合、鼠标按键、拖动距离、长按手势, 以及对选中文件使用的快捷键都可以自定义。 -- **按文件类型的工具栏。** 图片、PDF、文档、电子表格、演示文稿、HWP/HWPX、文本,以及用于混合文件的通用配置。 - 直接在圆环上拖放来添加、移除和排序预设;右键或 ✎ 编辑预设。 -- **预设。** 质量、缩放、DPI、元数据、TIFF 压缩、ICO 尺寸、PDF 合并与拆分、页码范围、 - 保存位置、文件名模板和重名处理。 -- **批量转换。** 1 个或 100 个文件并行转换,某个文件失败也不影响其余文件。 -- **自动规划路径。** 自动找到多步转换路径(例如 HWPX → PDF → PNG),每一步使用最擅长的引擎。 -- **四种使用方式。** 拖动手势、资源管理器右键和“发送到”、对资源管理器中选中的文件按快捷键、主窗口拖放区。 +- **按文件类型的工具栏。** 图片、PDF、文档、表格、演示文稿、HWP、文本、电子书、视频、音频、矢量图、压缩包、CAD 和字体, + 以及用于混合选择的工具栏。直接在圆环上拖放来排列预设,以标签方式添加扩展名,右键或 ✎ 编辑预设。 +- **预设。** 质量、缩放、DPI、元数据、PDF 合并与拆分、页码范围、视频画质与分辨率、音频码率、压缩级别、保存位置、 + 文件名模板和重名处理。 +- **批量转换。** 1 个或 100 个文件并行转换,某个文件失败也不影响其余文件。"打包成一个 ZIP"可把任意文件压缩为一个压缩包, + "合并 PDF"生成一个 PDF。 +- **自动规划路径。** 自动找到多步转换路径(例如 HWP → HWPX → DOCX、EPUB → HWPX → PDF → PNG),每一步使用最擅长的引擎。 +- **四种使用方式。** 拖动手势、资源管理器右键菜单(Windows 11 也可加入主菜单)和“发送到”、对资源管理器中选中的文件按 + 快捷键、主窗口拖放区。 +- **引擎一目了然。** “设置 → 转换引擎”列出每个引擎的版本和可转换内容;可选引擎下载时显示速度和剩余时间。 - **柔和的动画界面。** 浅色、深色或跟随系统,自定义强调色和圆角,旧电脑可开启“减少动画”。 - **简体中文、English、한국어**,默认跟随 Windows 语言。 @@ -57,19 +60,24 @@ | 源格式 | 目标格式 | |---|---| -| **图片**:JPG、PNG、WEBP、TIFF、BMP、GIF、ICO、AVIF、JPEG XL、JPEG 2000、PSD/PSB、TGA、PPM;HEIC、GIMP XCF、相机 RAW、EMF/WMF(读取) | 任意图片格式、ICNS、PDF | -| **矢量图**:SVG、SVGZ、AI、EPS、PS;ICNS | PDF(保持矢量)、PNG 等图片、SVG ↔ SVGZ、PDF → EPS/PS | -| **PDF** | PNG、JPG、TIFF、合并、拆分、页码范围 | -| **文档**:DOCX、DOC、ODT、RTF | PDF、HWPX、互相转换、TXT、HTML | -| **电子表格**:XLSX、XLS、ODS、CSV | PDF、XLSX ↔ CSV、HWPX、HTML | -| **演示文稿**:PPTX、PPT、ODP | PDF、PNG、JPG、HWPX | -| **HWP**:HWP、HWPX | PDF、HWPX ↔ HWP、DOCX、TXT、Markdown、HTML | -| **文本**:TXT、Markdown、HTML | DOCX、HWPX、PDF | - -DOCX、XLSX、CSV、PPTX → PDF,所有 HWP 转换和 Markdown 装好即用:无需 Microsoft Office、韩文办公软件或 LibreOffice, -Filee 也从不调用电脑上已安装的程序。较旧的格式(DOC、XLS、PPT、OpenDocument)以及保存为 DOCX / ODT 使用 LibreOffice, -HTML 与 Markdown ↔ Word 使用 Pandoc,EPS / PostScript 使用 Ghostscript,这些可选引擎会在首次启动时询问是否下载。 -HWPX 的写入与验证方式见 [docs/ENGINES.md](docs/ENGINES.md#hwpx-writer)。 +| **图片**:JPG、PNG、WEBP、AVIF、TIFF、BMP、GIF、ICO、ICNS、JPEG XL、JPEG 2000、PSD/PSB、TGA、PPM;HEIC、GIMP XCF、相机 RAW(CR2、CR3、NEF、ARW、DNG 等)仅读取 | 上述格式互转、PDF、缩放、灰度 | +| **矢量图**:SVG、SVGZ、EMF、WMF、AI · EPS、PS¹ · CDR、VSD、CGM、ODG² | PDF(矢量)、PNG 等图片、SVG ↔ SVGZ、PDF → EPS/PS¹ | +| **PDF** | DOCX、HWPX、TXT、PNG、JPG、TIFF、CBZ;合并、拆分、页码范围 | +| **文档**:DOCX、DOCM、DOTX、EML · DOC、ODT、RTF、WPS、WPD、Pages 等² | PDF、DOCX、HWPX、EPUB、TXT、HTML | +| **表格**:XLSX、XLSM、XLS、ODS、CSV、TSV · Numbers、ET² | PDF、XLSX、ODS、CSV、TSV、HWPX、HTML | +| **演示文稿**:PPTX、PPTM、POTX、PPSX · PPT、ODP、Keynote² | PDF、PNG、JPG、DOCX、HWPX | +| **HWP**:HWP、HWPX | PDF、PNG、DOCX、HWPX ↔ HWP、TXT、Markdown、HTML | +| **文本**:TXT、Markdown、HTML · reStructuredText、LaTeX³ | PDF、DOCX、HWPX、EPUB | +| **电子书**:EPUB、MOBI、AZW3、AZW、AZW4、FB2、CBZ、CBR、CB7、HTMLZ、TXTZ · LIT、LRF、CHM、PDB 等⁴ | PDF、EPUB、DOCX、TXT、HTML、HWPX · MOBI、AZW3⁴ | +| **视频**⁵:MP4、MOV、MKV、WEBM、AVI、WMV、FLV、MPEG、TS、M2TS、3GP、OGV、VOB 等 | MP4、WEBM、MOV、MKV、AVI、GIF、MP3、M4A、720p | +| **音频**⁵:MP3、M4A、AAC、WAV、FLAC、OGG、OPUS、WMA、AIFF、AMR 等 | MP3、M4A、WAV、FLAC、OGG、OPUS、AAC | +| **压缩包**:ZIP、7Z、RAR、TAR、TAR.GZ、TAR.BZ2、TAR.XZ、GZ、ISO、CAB、DMG、ALZ、EGG 等 | 解压、ZIP、7Z、TAR、TAR.GZ;多个文件 → 一个 ZIP | +| **CAD**:DWG、DXF | PDF、SVG、PNG、DWG ↔ DXF | +| **字体**:TTF、OTF、WOFF、WOFF2、EOT | 互相转换 | + +未标注的格式装好即用:无需 Microsoft Office、韩文办公软件或 LibreOffice,Filee 也从不调用电脑上已安装的程序。首次启动时 +可选择下载的引擎:¹ Ghostscript、² LibreOffice、³ Pandoc、⁴ calibre、⁵ FFmpeg。各引擎保留和不支持的内容见 +[docs/ENGINES.md](docs/ENGINES.md)。 ## 截图 @@ -94,11 +102,12 @@ HWPX 的写入与验证方式见 [docs/ENGINES.md](docs/ENGINES.md#hwpx-writer) ## 快速开始 -**安装:** 下载 [`Filee-win-Setup.exe`](https://github.com/KnifeLemon/Filee/releases/latest/download/Filee-win-Setup.exe) -(Windows 10/11,64 位),或在 [Releases](https://github.com/KnifeLemon/Filee/releases) 页面选择其他版本。 +**安装:** 在 [Releases](https://github.com/KnifeLemon/Filee/releases/latest) 下载最新的 +`Filee-<版本>-win-Setup.exe`(Windows 10/11,64 位)。 -- **安装包很小。** 图片、PDF、HWP/HWPX、Markdown、DOCX / XLSX / PPTX → PDF 以及 XLSX ↔ CSV 装好即用。 -- **大型引擎按需下载。** 首次启动时会询问是否下载 LibreOffice(DOC、XLS、PPT 等旧版办公格式,约 420 MB)和 Pandoc(HTML 与 Markdown ↔ Word,约 42 MB);之后可随时在“设置 → 转换引擎”中安装或删除。 +- **常用格式都已包含在安装包中。** 图片、PDF、Word、Excel、PowerPoint、HWP、电子书、压缩包、字体和 CAD 装好即用。 +- **大型引擎按需下载。** 首次启动时会列出视频/音频引擎(FFmpeg,约 100 MB)和少见格式引擎(LibreOffice、calibre、 + Ghostscript、Pandoc)及其大小;之后可随时在“设置 → 转换引擎”中安装或删除,并显示下载速度和剩余时间。 - **有更新会提醒你。** 新版本发布后,Filee 会在菜单底部、通知和托盘菜单中提示,点击即可打开最新发布页面下载。 运行新的安装程序即可更新,设置会保留。 diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index f8df21c..b25f3f3 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -19,10 +19,12 @@ └──────────────────────────────────────────────┬──────────────────────────────────────┘ ▼ ┌──────────────────────────── Filee.Engines ────────────────────────────────────────┐ - │ Magick (images) · PdfSharp (image→PDF, merge, split) · Pdfium (PDF→image) │ - │ LibreOffice (old formats, HWP via H2Orestart) · rhwp (HWP→PDF, HWP↔HWPX) · Unhwp │ - │ HwpxWriter (DOCX / XLSX / PPTX / Markdown → HWPX) · Spreadsheet · Markdig │ - │ Pandoc (HTML / ODT / RTF, Markdown ↔ DOCX) │ + │ Built in: Magick (images, RAW) · PdfSharp · Pdfium · PdfPig · Svg.Skia · ICNS │ + │ HwpxWriter + DocxWriter over DocumentReaders (DOCX, XLSX, XLS, ODS, PPTX, │ + │ PDF, HTML, EPUB, MOBI, FB2, HWPX, Markdown) · Spreadsheets · OOXML variants │ + │ · E-mail · E-books · CAD · Fonts │ + │ Bundled: rhwp (HWP→PDF, HWP↔HWPX) · 7-Zip (archives) · Unhwp · Markdig │ + │ Optional: FFmpeg · LibreOffice + H2Orestart · calibre · Ghostscript · Pandoc │ └────────────────────────────────────────────────────────────────────────────────────┘ ``` diff --git a/docs/ENGINES.md b/docs/ENGINES.md index 90f4c88..da8bbce 100644 --- a/docs/ENGINES.md +++ b/docs/ENGINES.md @@ -16,7 +16,7 @@ Filee chooses engines automatically. Settings → *Engines* shows their status, | Office Open XML | built in | **DOCM / DOTX / DOTM ↔ DOCX, XLSM / XLTX ↔ XLSX, PPTM / POTX / PPSX ↔ PPTX** (macros removed for macro-free types) | | Fonts | built in | **TTF, OTF, WOFF, WOFF2, EOT ↔ each other**; CFF (PostScript) outlines become TrueType for TTF and EOT | | **HWPX writer** | built in | **DOCX (+ DOCM/DOTX/DOTM), XLSX (+ XLSM/XLTX), XLS, ODS, CSV, TSV, PPTX (+ PPTM/POTX/PPSX), PDF, HTML, EPUB, MOBI/AZW3, FB2, HWPX, TXT, Markdown → HWPX** (and with rhwp → PDF and images); ODT, RTF, reStructuredText, LaTeX → HWPX with Pandoc | -| **DOCX writer** | built in | **Markdown, TXT, XLSX, CSV, PPTX (+ variants), PDF → DOCX** | +| **DOCX writer** | built in | **HWPX (and HWP through rhwp), PDF, HTML, EPUB, MOBI/AZW3, FB2, Markdown, TXT, XLSX, XLS, ODS, CSV, PPTX (+ variants) → DOCX** | | PDF text | built in (PdfPig) | **PDF → TXT** (reading order, also two columns; no OCR) | | E-mail | built in (MimeKit) | **EML → HTML** (headers + body, inline pictures), **TXT**, **ZIP** (the attachments) | | **E-books** | built in | **EPUB, MOBI/AZW/AZW3/PRC, FB2, HTMLZ, TXTZ → EPUB, HWPX (→ PDF), TXT, HTML, Markdown, FB2, HTMLZ, TXTZ**; HTML, Markdown, TXT, DOCX → EPUB/FB2/HTMLZ/TXTZ; HTML → TXT; comics CBZ/CBR/CB7/CBT/CBC → PDF, EPUB, CBZ; PDF → CBZ; AZW4 → PDF | diff --git a/docs/media/engine-setup-en.png b/docs/media/engine-setup-en.png index 6e2876d..d88be04 100644 Binary files a/docs/media/engine-setup-en.png and b/docs/media/engine-setup-en.png differ diff --git a/docs/media/engine-setup-ko.png b/docs/media/engine-setup-ko.png index 0c5b83d..f3147fd 100644 Binary files a/docs/media/engine-setup-ko.png and b/docs/media/engine-setup-ko.png differ diff --git a/docs/media/page-home-en.png b/docs/media/page-home-en.png index 87cb5a6..3f9e65a 100644 Binary files a/docs/media/page-home-en.png and b/docs/media/page-home-en.png differ diff --git a/docs/media/page-home-ko.png b/docs/media/page-home-ko.png index 7a3d1fe..a532aa4 100644 Binary files a/docs/media/page-home-ko.png and b/docs/media/page-home-ko.png differ diff --git a/docs/media/page-home-zh-CN.png b/docs/media/page-home-zh-CN.png index 54c3484..9309b18 100644 Binary files a/docs/media/page-home-zh-CN.png and b/docs/media/page-home-zh-CN.png differ diff --git a/docs/media/page-presets-en.png b/docs/media/page-presets-en.png index 90dbfea..4aa6946 100644 Binary files a/docs/media/page-presets-en.png and b/docs/media/page-presets-en.png differ diff --git a/docs/media/page-presets-zh-CN.png b/docs/media/page-presets-zh-CN.png index 099bbcf..3e862ca 100644 Binary files a/docs/media/page-presets-zh-CN.png and b/docs/media/page-presets-zh-CN.png differ diff --git a/docs/media/page-toolbar-dark.png b/docs/media/page-toolbar-dark.png index 4e99654..9302ef2 100644 Binary files a/docs/media/page-toolbar-dark.png and b/docs/media/page-toolbar-dark.png differ diff --git a/docs/media/page-toolbar-en.png b/docs/media/page-toolbar-en.png index 2c15a17..6ddb5fd 100644 Binary files a/docs/media/page-toolbar-en.png and b/docs/media/page-toolbar-en.png differ diff --git a/docs/media/page-toolbar-ko.png b/docs/media/page-toolbar-ko.png index e55c383..f30becf 100644 Binary files a/docs/media/page-toolbar-ko.png and b/docs/media/page-toolbar-ko.png differ diff --git a/docs/media/page-toolbar-zh-CN.png b/docs/media/page-toolbar-zh-CN.png index 4533e51..af2a0f3 100644 Binary files a/docs/media/page-toolbar-zh-CN.png and b/docs/media/page-toolbar-zh-CN.png differ diff --git a/src/Filee.App/Assets/i18n/en.json b/src/Filee.App/Assets/i18n/en.json index d915090..c0f3885 100644 --- a/src/Filee.App/Assets/i18n/en.json +++ b/src/Filee.App/Assets/i18n/en.json @@ -61,10 +61,10 @@ "engine.rhwp.description": "Renders HWP/HWPX to PDF and converts HWP ↔ HWPX. Every conversion to PDF through the HWPX writer (DOCX, XLSX, PPTX, Markdown, e-books…) is drawn by it.", "engine.unhwp.description": "Extracts text, Markdown and HTML from HWP and HWPX.", "engine.markdown.description": "Markdown → HTML and plain text.", - "engine.spreadsheet.description": "XLSX ↔ CSV, one CSV per sheet, with the numbers and dates Excel shows.", + "engine.spreadsheet.description": "XLSX, XLS, ODS, CSV and TSV into each other (XLS is read only), with the numbers and dates the spreadsheet shows; one CSV per sheet.", "engine.ooxml.description": "Macro-enabled files and templates (DOCM, DOTX, XLSM, XLTX, PPTM, POTX, PPSX) ↔ DOCX, XLSX and PPTX; macros are removed.", - "engine.hwpx-writer.description": "Reads Word, Excel, PowerPoint, PDF, HTML, Markdown and text files and writes HWPX — the first step of every document conversion to PDF, without Office or LibreOffice.", - "engine.docx-writer.description": "Writes Word documents (DOCX) from PDF, HWPX, Markdown, HTML, text and e-books.", + "engine.hwpx-writer.description": "Reads Word, Excel, PowerPoint, PDF, HTML, e-books, Markdown and text and writes HWPX — the first step of every document conversion to PDF, without Office or LibreOffice.", + "engine.docx-writer.description": "Writes Word documents (DOCX) from PDF, HWP/HWPX, Markdown, HTML, text, spreadsheets, slides and e-books.", "engine.pdf-text.description": "Extracts the text of PDFs in reading order, also from two-column pages (no OCR for scans).", "engine.email.description": "E-mails (EML) to HTML and text with sender, recipients and date, pictures included; attachments into a ZIP.", "engine.vector.description": "SVG and SVGZ to vector PDF and to images; Illustrator files saved with PDF content.", @@ -72,12 +72,12 @@ "engine.font.description": "Fonts: TTF, OTF, WOFF, WOFF2 and EOT into each other.", "engine.cad.description": "AutoCAD drawings: DWG ↔ DXF, and both to PDF, SVG and PNG.", "engine.archive.description": "Extracts ZIP, 7Z, RAR, TAR, GZ, ISO and other archives, repacks them as ZIP, 7Z or TAR.GZ and compresses files into one archive (7-Zip).", - "engine.ebook.description": "E-books: EPUB, MOBI, AZW3, FB2 and comics (CBZ, CBR) to PDF, EPUB, DOCX and text; documents to EPUB.", + "engine.ebook.description": "E-books: EPUB, MOBI, AZW3, FB2 and comics (CBZ, CBR) to PDF, EPUB, DOCX and text; documents and Markdown to EPUB; PDF to CBZ.", "engine.ffmpeg.description": "Video and audio: MP4, MOV, MKV, WEBM, AVI, MP3, M4A, WAV, FLAC and more; extracts the sound of videos and makes GIFs.", - "engine.pandoc.description": "Markdown, HTML, reStructuredText and LaTeX ↔ Word, ODT and RTF.", + "engine.pandoc.description": "Markdown and HTML ↔ ODT and RTF, DOCX → Markdown, and reStructuredText and LaTeX ↔ Markdown, HTML, DOCX and ODT.", "engine.ghostscript.description": "EPS, PostScript and older Illustrator files to PDF and images; PDF to EPS and PS.", "engine.calibre.description": "Rare e-book formats (LIT, LRF, CHM, PDB, RB…) and Kindle output (MOBI, AZW3).", - "engine.libreoffice.description": "Older and less common office formats — DOC, XLS, PPT, OpenDocument, Pages, Keynote, WordPerfect, Visio, CorelDRAW… — and saving as DOCX or ODT.", + "engine.libreoffice.description": "Older and less common office formats — DOC, PPT, OpenDocument slides, Pages, Keynote, Numbers, WordPerfect, Works, Publisher, Visio, CorelDRAW… — and saving as DOC, XLS, PPT, ODT or ODP.", "profile.images": "Images", "profile.pdf": "PDF", @@ -324,9 +324,9 @@ "engines.optional_description": "Large engines are only downloaded when you want them. They are kept when Filee updates and removed when you uninstall it.", "engines.all_title": "All engines", "engines.package.libreoffice.name": "LibreOffice (older and rare formats)", - "engines.package.libreoffice.description": "Only needed for older and less common formats: DOC, XLS, PPT and OpenDocument files, WordPerfect, Works, Apple Pages, Numbers and Keynote, Publisher, CorelDRAW and Visio, conversions to ODT, ODS and ODP, and HWP → DOCX (includes the H2Orestart filter and Java). DOCX, XLSX, PPTX, CSV and PDF convert without it.", - "engines.package.pandoc.name": "Pandoc (Markdown, HTML, LaTeX ↔ Word)", - "engines.package.pandoc.description": "DOCX, ODT and RTF → Markdown, reStructuredText and LaTeX ↔ Markdown, HTML and DOCX, and HTML, ODT, RTF, reStructuredText and LaTeX → HWPX. Markdown → PDF, DOCX, HWPX, HTML and TXT work without it.", + "engines.package.libreoffice.description": "Only needed for older and less common formats: DOC and PPT, OpenDocument slides, WordPerfect, Works, Apple Pages, Numbers and Keynote, Publisher, CorelDRAW and Visio, and saving as DOC, XLS, PPT, ODT or ODP (includes the H2Orestart filter and Java). Word, Excel, PowerPoint, PDF, HWP and e-books convert without it.", + "engines.package.pandoc.name": "Pandoc (Markdown, LaTeX, ODT)", + "engines.package.pandoc.description": "Markdown and HTML ↔ ODT and RTF, DOCX → Markdown, and reStructuredText and LaTeX ↔ Markdown, HTML, DOCX and ODT. Markdown, HTML and text → PDF, DOCX and HWPX work without it.", "engines.package.ghostscript.name": "Ghostscript (EPS and PostScript)", "engines.package.ghostscript.description": "EPS, PS and older Illustrator files → PDF, PNG and other images, and PDF or SVG → EPS/PS. SVG and AI files saved with PDF compatibility convert without it.", "engines.package.ffmpeg.name": "FFmpeg (video and audio)", @@ -365,7 +365,7 @@ "common.no": "No", "setup.title": "Choose conversion engines", - "setup.description": "Filee already converts images, PDF, HWP/HWPX, Markdown, and DOCX, XLSX and PPTX to PDF. Download engines only for the formats you need.", + "setup.description": "Filee already converts images, PDF, Word, Excel, PowerPoint, HWP, e-books, archives, fonts and CAD drawings. Download engines only for video and audio or for rare formats.", "setup.note": "You can install or remove engines at any time in Settings → Engines.", "setup.install": "Install selected", "setup.later": "Later", diff --git a/src/Filee.App/Assets/i18n/ko.json b/src/Filee.App/Assets/i18n/ko.json index bff79a7..1498403 100644 --- a/src/Filee.App/Assets/i18n/ko.json +++ b/src/Filee.App/Assets/i18n/ko.json @@ -61,10 +61,10 @@ "engine.rhwp.description": "HWP/HWPX를 PDF로 그리고 HWP ↔ HWPX를 변환해요. HWPX 작성기를 거쳐 PDF가 되는 모든 변환(DOCX, XLSX, PPTX, 마크다운, 전자책…)도 이 엔진이 그려요.", "engine.unhwp.description": "HWP와 HWPX에서 텍스트, 마크다운, HTML을 뽑아내요.", "engine.markdown.description": "마크다운 → HTML, 텍스트.", - "engine.spreadsheet.description": "XLSX ↔ CSV. 시트마다 CSV 하나로, 엑셀에 보이는 숫자와 날짜 그대로 저장해요.", + "engine.spreadsheet.description": "XLSX, XLS, ODS, CSV, TSV를 서로 변환해요(XLS는 읽기만). 시트에 보이는 숫자와 날짜 그대로, CSV는 시트마다 하나씩 만들어요.", "engine.ooxml.description": "매크로 포함 파일과 서식 파일(DOCM, DOTX, XLSM, XLTX, PPTM, POTX, PPSX) ↔ DOCX, XLSX, PPTX. 매크로는 지워요.", - "engine.hwpx-writer.description": "워드, 엑셀, 파워포인트, PDF, HTML, 마크다운, 텍스트 파일을 읽어 HWPX로 써요. 오피스나 LibreOffice 없이 문서를 PDF로 바꾸는 첫 단계예요.", - "engine.docx-writer.description": "PDF, HWPX, 마크다운, HTML, 텍스트, 전자책으로 워드 문서(DOCX)를 만들어요.", + "engine.hwpx-writer.description": "워드, 엑셀, 파워포인트, PDF, HTML, 전자책, 마크다운, 텍스트를 읽어 HWPX로 써요. 오피스나 LibreOffice 없이 문서를 PDF로 바꾸는 첫 단계예요.", + "engine.docx-writer.description": "PDF, HWP/HWPX, 마크다운, HTML, 텍스트, 스프레드시트, 슬라이드, 전자책으로 워드 문서(DOCX)를 만들어요.", "engine.pdf-text.description": "PDF의 글자를 읽는 순서대로 뽑아내요. 2단 편집도 순서대로 읽어요(스캔 이미지 글자 인식은 안 해요).", "engine.email.description": "이메일(EML)을 보낸 사람·받는 사람·날짜와 본문 그림까지 HTML·텍스트로, 첨부 파일은 ZIP으로 모아요.", "engine.vector.description": "SVG·SVGZ를 벡터 PDF와 이미지로, PDF 내용이 들어 있는 일러스트레이터 파일도 변환해요.", @@ -72,12 +72,12 @@ "engine.font.description": "글꼴: TTF, OTF, WOFF, WOFF2, EOT를 서로 변환해요.", "engine.cad.description": "오토캐드 도면: DWG ↔ DXF, 그리고 둘 다 PDF, SVG, PNG로.", "engine.archive.description": "ZIP, 7Z, RAR, TAR, GZ, ISO 등 압축 파일을 풀고, ZIP·7Z·TAR.GZ로 다시 묶거나 여러 파일을 압축 파일 하나로 만들어요(7-Zip).", - "engine.ebook.description": "전자책: EPUB, MOBI, AZW3, FB2와 만화책(CBZ, CBR)을 PDF, EPUB, DOCX, 텍스트로, 문서는 EPUB으로 변환해요.", + "engine.ebook.description": "전자책: EPUB, MOBI, AZW3, FB2와 만화책(CBZ, CBR)을 PDF, EPUB, DOCX, 텍스트로 바꾸고, 문서와 마크다운은 EPUB으로, PDF는 CBZ로 만들어요.", "engine.ffmpeg.description": "동영상·오디오: MP4, MOV, MKV, WEBM, AVI, MP3, M4A, WAV, FLAC 등. 동영상에서 소리만 뽑거나 GIF도 만들어요.", - "engine.pandoc.description": "마크다운, HTML, reStructuredText, LaTeX ↔ 워드, ODT, RTF.", + "engine.pandoc.description": "마크다운·HTML ↔ ODT·RTF, DOCX → 마크다운, reStructuredText·LaTeX ↔ 마크다운·HTML·DOCX·ODT.", "engine.ghostscript.description": "EPS, 포스트스크립트, 예전 일러스트레이터 파일을 PDF와 이미지로, PDF를 EPS·PS로.", "engine.calibre.description": "드문 전자책 형식(LIT, LRF, CHM, PDB, RB…)과 킨들용 출력(MOBI, AZW3).", - "engine.libreoffice.description": "DOC, XLS, PPT, 오픈도큐먼트, Pages, Keynote, 워드퍼펙트, Visio, CorelDRAW 같은 오래되었거나 드문 오피스 형식, 그리고 DOCX·ODT로 저장하기.", + "engine.libreoffice.description": "DOC, PPT, 오픈도큐먼트 프레젠테이션, Pages, Keynote, Numbers, 워드퍼펙트, Works, Publisher, Visio, CorelDRAW 같은 오래되었거나 드문 형식, 그리고 DOC·XLS·PPT·ODT·ODP로 저장하기.", "profile.images": "이미지", "profile.pdf": "PDF", @@ -324,9 +324,9 @@ "engines.optional_description": "용량이 큰 엔진은 원할 때만 내려받습니다. Filee를 업데이트해도 유지되고, 제거하면 함께 지워집니다.", "engines.all_title": "전체 엔진", "engines.package.libreoffice.name": "LibreOffice (오래되었거나 드문 형식)", - "engines.package.libreoffice.description": "오래되었거나 흔하지 않은 형식에만 필요해요: DOC·XLS·PPT·OpenDocument 파일, 워드퍼펙트·Works, Apple Pages·Numbers·Keynote, Publisher·CorelDRAW·Visio, ODT·ODS·ODP로 변환, HWP → DOCX (H2Orestart 필터와 Java 포함). DOCX·XLSX·PPTX·CSV·PDF는 없어도 변환돼요.", - "engines.package.pandoc.name": "Pandoc (마크다운·HTML·LaTeX ↔ 워드)", - "engines.package.pandoc.description": "DOCX·ODT·RTF → 마크다운, reStructuredText·LaTeX ↔ 마크다운·HTML·DOCX, HTML·ODT·RTF·reStructuredText·LaTeX → HWPX 변환을 추가해요. 마크다운 → PDF·DOCX·HWPX·HTML·TXT는 없어도 돼요.", + "engines.package.libreoffice.description": "오래되었거나 흔하지 않은 형식에만 필요해요: DOC·PPT, 오픈도큐먼트 프레젠테이션, 워드퍼펙트·Works, Apple Pages·Numbers·Keynote, Publisher·CorelDRAW·Visio, 그리고 DOC·XLS·PPT·ODT·ODP로 저장하기(H2Orestart 필터와 Java 포함). 워드·엑셀·파워포인트·PDF·HWP·전자책은 없어도 변환돼요.", + "engines.package.pandoc.name": "Pandoc (마크다운·LaTeX·ODT)", + "engines.package.pandoc.description": "마크다운·HTML ↔ ODT·RTF, DOCX → 마크다운, reStructuredText·LaTeX ↔ 마크다운·HTML·DOCX·ODT 변환을 추가해요. 마크다운·HTML·텍스트 → PDF·DOCX·HWPX는 없어도 돼요.", "engines.package.ghostscript.name": "Ghostscript (EPS·PostScript)", "engines.package.ghostscript.description": "EPS·PS 파일과 예전 일러스트레이터 파일을 PDF·PNG 등 이미지로, PDF·SVG를 EPS·PS로 변환해요. SVG와 PDF 호환으로 저장한 AI 파일은 없어도 변환돼요.", "engines.package.ffmpeg.name": "FFmpeg (동영상·오디오)", @@ -365,7 +365,7 @@ "common.no": "아니요", "setup.title": "변환 엔진 선택", - "setup.description": "Filee는 지금 바로 이미지, PDF, HWP/HWPX, 마크다운, DOCX·XLSX·PPTX → PDF를 변환할 수 있습니다. 더 필요한 형식이 있을 때만 엔진을 내려받으세요.", + "setup.description": "Filee는 지금 바로 이미지, PDF, 워드, 엑셀, 파워포인트, HWP, 전자책, 압축 파일, 글꼴, CAD 도면을 변환할 수 있어요. 동영상·오디오나 드문 형식이 필요할 때만 엔진을 내려받으세요.", "setup.note": "엔진은 언제든 설정 → 변환 엔진에서 설치하거나 제거할 수 있습니다.", "setup.install": "선택한 엔진 설치", "setup.later": "나중에", diff --git a/src/Filee.App/Assets/i18n/zh-CN.json b/src/Filee.App/Assets/i18n/zh-CN.json index 483a336..7f98ba8 100644 --- a/src/Filee.App/Assets/i18n/zh-CN.json +++ b/src/Filee.App/Assets/i18n/zh-CN.json @@ -61,10 +61,10 @@ "engine.rhwp.description": "将 HWP/HWPX 渲染为 PDF,并在 HWP ↔ HWPX 之间转换。所有经 HWPX 写入器转为 PDF 的文件(DOCX、XLSX、PPTX、Markdown、电子书…)也由它渲染。", "engine.unhwp.description": "从 HWP 和 HWPX 中提取文本、Markdown 和 HTML。", "engine.markdown.description": "Markdown → HTML 和纯文本。", - "engine.spreadsheet.description": "XLSX ↔ CSV,每个工作表一个 CSV,数字和日期与 Excel 中显示的一致。", + "engine.spreadsheet.description": "XLSX、XLS、ODS、CSV 和 TSV 互相转换(XLS 仅读取),数字和日期与表格中显示的一致;每个工作表一个 CSV。", "engine.ooxml.description": "启用宏的文件和模板(DOCM、DOTX、XLSM、XLTX、PPTM、POTX、PPSX)↔ DOCX、XLSX、PPTX,宏会被移除。", - "engine.hwpx-writer.description": "读取 Word、Excel、PowerPoint、PDF、HTML、Markdown 和文本文件并写成 HWPX——无需 Office 或 LibreOffice 将文档转为 PDF 的第一步。", - "engine.docx-writer.description": "用 PDF、HWPX、Markdown、HTML、文本和电子书生成 Word 文档(DOCX)。", + "engine.hwpx-writer.description": "读取 Word、Excel、PowerPoint、PDF、HTML、电子书、Markdown 和文本并写成 HWPX——无需 Office 或 LibreOffice 将文档转为 PDF 的第一步。", + "engine.docx-writer.description": "用 PDF、HWP/HWPX、Markdown、HTML、文本、表格、幻灯片和电子书生成 Word 文档(DOCX)。", "engine.pdf-text.description": "按阅读顺序提取 PDF 中的文字,双栏页面也能正确排序(不对扫描件做文字识别)。", "engine.email.description": "将电子邮件(EML)连同发件人、收件人、日期和图片转为 HTML 和文本,附件打包为 ZIP。", "engine.vector.description": "将 SVG、SVGZ 转为矢量 PDF 和图片;也支持包含 PDF 内容的 Illustrator 文件。", @@ -72,12 +72,12 @@ "engine.font.description": "字体:TTF、OTF、WOFF、WOFF2 和 EOT 互相转换。", "engine.cad.description": "AutoCAD 图纸:DWG ↔ DXF,并可转为 PDF、SVG 和 PNG。", "engine.archive.description": "解压 ZIP、7Z、RAR、TAR、GZ、ISO 等压缩文件,重新打包为 ZIP、7Z 或 TAR.GZ,或把多个文件压缩成一个(7-Zip)。", - "engine.ebook.description": "电子书:EPUB、MOBI、AZW3、FB2 和漫画(CBZ、CBR)转为 PDF、EPUB、DOCX 和文本;文档转为 EPUB。", + "engine.ebook.description": "电子书:EPUB、MOBI、AZW3、FB2 和漫画(CBZ、CBR)转为 PDF、EPUB、DOCX 和文本;文档和 Markdown 转为 EPUB;PDF 转为 CBZ。", "engine.ffmpeg.description": "视频和音频:MP4、MOV、MKV、WEBM、AVI、MP3、M4A、WAV、FLAC 等;可提取视频中的声音,也能制作 GIF。", - "engine.pandoc.description": "Markdown、HTML、reStructuredText、LaTeX ↔ Word、ODT、RTF。", + "engine.pandoc.description": "Markdown 和 HTML ↔ ODT、RTF,DOCX → Markdown,以及 reStructuredText、LaTeX ↔ Markdown、HTML、DOCX、ODT。", "engine.ghostscript.description": "EPS、PostScript 和旧版 Illustrator 文件转为 PDF 和图片;PDF 转为 EPS 和 PS。", "engine.calibre.description": "少见的电子书格式(LIT、LRF、CHM、PDB、RB…)以及 Kindle 输出(MOBI、AZW3)。", - "engine.libreoffice.description": "较旧或少见的办公格式——DOC、XLS、PPT、OpenDocument、Pages、Keynote、WordPerfect、Visio、CorelDRAW 等——以及保存为 DOCX 或 ODT。", + "engine.libreoffice.description": "较旧或少见的办公格式——DOC、PPT、OpenDocument 演示文稿、Pages、Keynote、Numbers、WordPerfect、Works、Publisher、Visio、CorelDRAW 等——以及保存为 DOC、XLS、PPT、ODT 或 ODP。", "profile.images": "图片", "profile.pdf": "PDF", @@ -324,9 +324,9 @@ "engines.optional_description": "体积较大的引擎仅在需要时下载。更新 Filee 时会保留,卸载时一并删除。", "engines.all_title": "全部引擎", "engines.package.libreoffice.name": "LibreOffice(旧版和少见格式)", - "engines.package.libreoffice.description": "仅用于较旧或不常见的格式:DOC、XLS、PPT 和 OpenDocument 文件,WordPerfect、Works,Apple Pages、Numbers 和 Keynote,Publisher、CorelDRAW 和 Visio,转换为 ODT、ODS 和 ODP,以及 HWP → DOCX(含 H2Orestart 过滤器和 Java)。DOCX、XLSX、PPTX、CSV 和 PDF 无需它即可转换。", - "engines.package.pandoc.name": "Pandoc(Markdown、HTML、LaTeX ↔ Word)", - "engines.package.pandoc.description": "支持 DOCX、ODT、RTF → Markdown,reStructuredText 和 LaTeX ↔ Markdown、HTML、DOCX,以及 HTML、ODT、RTF、reStructuredText、LaTeX → HWPX。Markdown → PDF、DOCX、HWPX、HTML 和 TXT 无需此引擎。", + "engines.package.libreoffice.description": "仅用于较旧或不常见的格式:DOC 和 PPT、OpenDocument 演示文稿、WordPerfect、Works、Apple Pages、Numbers 和 Keynote、Publisher、CorelDRAW 和 Visio,以及保存为 DOC、XLS、PPT、ODT 或 ODP(含 H2Orestart 过滤器和 Java)。Word、Excel、PowerPoint、PDF、HWP 和电子书无需它即可转换。", + "engines.package.pandoc.name": "Pandoc(Markdown、LaTeX、ODT)", + "engines.package.pandoc.description": "Markdown 和 HTML ↔ ODT、RTF,DOCX → Markdown,以及 reStructuredText、LaTeX ↔ Markdown、HTML、DOCX、ODT。Markdown、HTML 和文本 → PDF、DOCX、HWPX 无需它。", "engines.package.ghostscript.name": "Ghostscript(EPS 与 PostScript)", "engines.package.ghostscript.description": "EPS、PS 和旧版 Illustrator 文件 → PDF、PNG 等图片,以及 PDF 或 SVG → EPS/PS。SVG 和以 PDF 兼容方式保存的 AI 文件无需它即可转换。", "engines.package.ffmpeg.name": "FFmpeg(视频和音频)", @@ -365,7 +365,7 @@ "common.no": "否", "setup.title": "选择转换引擎", - "setup.description": "Filee 现在即可转换图片、PDF、HWP/HWPX、Markdown,以及 DOCX、XLSX、PPTX → PDF。仅在需要其他格式时才下载引擎。", + "setup.description": "Filee 现在即可转换图片、PDF、Word、Excel、PowerPoint、HWP、电子书、压缩文件、字体和 CAD 图纸。只有视频、音频或少见格式才需要下载引擎。", "setup.note": "可随时在 设置 → 转换引擎 中安装或删除引擎。", "setup.install": "安装所选引擎", "setup.later": "稍后", diff --git a/src/Filee.Core/Formats/FormatRegistry.cs b/src/Filee.Core/Formats/FormatRegistry.cs index 31ac1b0..a24c7ec 100644 --- a/src/Filee.Core/Formats/FormatRegistry.cs +++ b/src/Filee.Core/Formats/FormatRegistry.cs @@ -40,8 +40,8 @@ public static class FormatRegistry new("eps", "EPS", FormatCategory.Vector, ["eps", "epsf", "epsi"]), new("ps", "PS", FormatCategory.Vector, ["ps"]), new("ai", "AI", FormatCategory.Vector, ["ai"], Writable: false), - new("emf", "EMF", FormatCategory.Vector, ["emf"]), - new("wmf", "WMF", FormatCategory.Vector, ["wmf"]), + new("emf", "EMF", FormatCategory.Vector, ["emf"], Writable: false), + new("wmf", "WMF", FormatCategory.Vector, ["wmf"], Writable: false), new("cdr", "CDR", FormatCategory.Vector, ["cdr"], Writable: false), new("cgm", "CGM", FormatCategory.Vector, ["cgm"], Writable: false), new("vsd", "VSD", FormatCategory.Vector, ["vsd", "vsdx"], Writable: false), @@ -66,8 +66,6 @@ public static class FormatRegistry new("pages", "Pages", FormatCategory.Document, ["pages"], Writable: false), new("sdw", "SDW", FormatCategory.Document, ["sdw"], Writable: false), new("pub", "PUB", FormatCategory.Document, ["pub"], Writable: false), - new("xps", "XPS", FormatCategory.Document, ["xps", "oxps"], Writable: false), - new("djvu", "DjVu", FormatCategory.Document, ["djvu", "djv"], Writable: false), new("eml", "EML", FormatCategory.Document, ["eml"], Writable: false), // Korean word processor (Hancom) @@ -184,14 +182,12 @@ public static class FormatRegistry new("txz", "TAR.XZ", FormatCategory.Archive, ["tar.xz", "txz"]), new("tar7z", "TAR.7Z", FormatCategory.Archive, ["tar.7z"], Writable: false), new("tlz", "TAR.LZ", FormatCategory.Archive, ["tar.lz", "tlz"], Writable: false), - new("tzo", "TAR.LZO", FormatCategory.Archive, ["tar.lzo", "tzo"], Writable: false), new("tz", "TAR.Z", FormatCategory.Archive, ["tar.z", "tz"], Writable: false), new("gz", "GZ", FormatCategory.Archive, ["gz"]), new("bz2", "BZ2", FormatCategory.Archive, ["bz2", "bz"]), new("xz", "XZ", FormatCategory.Archive, ["xz"]), new("lz", "LZ", FormatCategory.Archive, ["lz"], Writable: false), new("lzma", "LZMA", FormatCategory.Archive, ["lzma"], Writable: false), - new("lzo", "LZO", FormatCategory.Archive, ["lzo"], Writable: false), new("z", "Z", FormatCategory.Archive, ["z"], Writable: false), new("jar", "JAR", FormatCategory.Archive, ["jar"], Writable: false), new("cab", "CAB", FormatCategory.Archive, ["cab"], Writable: false), diff --git a/src/Filee.Engines/Hwp/Hwpx/DocumentReaders.cs b/src/Filee.Engines/Hwp/Hwpx/DocumentReaders.cs index 7534e5d..ee586cc 100644 --- a/src/Filee.Engines/Hwp/Hwpx/DocumentReaders.cs +++ b/src/Filee.Engines/Hwp/Hwpx/DocumentReaders.cs @@ -72,6 +72,12 @@ internal static class DocumentReaders /// Formats read without any optional engine. public static IEnumerable BuiltInFormats => BuiltIn.Keys; + /// + /// Extra cost of reading a PDF: its text is rebuilt from positioned words, so a route that keeps the source's own + /// structure wins (HWP → HWPX → DOCX rather than HWP → PDF → DOCX), while PDF files themselves still convert. + /// + public const int PdfPenalty = 6; + /// Formats that need Pandoc (those without a built-in reader). public static IEnumerable PandocFormats => ThroughPandoc.Keys.Where(f => !BuiltIn.ContainsKey(f)); diff --git a/src/Filee.Engines/Hwp/Hwpx/HwpxConverter.cs b/src/Filee.Engines/Hwp/Hwpx/HwpxConverter.cs index 883f0d1..9c79247 100644 --- a/src/Filee.Engines/Hwp/Hwpx/HwpxConverter.cs +++ b/src/Filee.Engines/Hwp/Hwpx/HwpxConverter.cs @@ -28,7 +28,7 @@ public sealed class HwpxConverter : IConverter public IReadOnlyList Edges => DocumentReaders.Formats(_pandoc ?? PandocConverter.Locate() is not null) .Where(from => from != "hwpx") // HWPX is read only to write other formats (DOCX, HTML, EPUB, ...) - .Select(from => new ConversionEdge(from, "hwpx")).ToList(); + .Select(from => new ConversionEdge(from, "hwpx", from == "pdf" ? 10 + DocumentReaders.PdfPenalty : 10)).ToList(); public EngineStatus GetStatus() { diff --git a/src/Filee.Engines/Office/DocxWriterConverter.cs b/src/Filee.Engines/Office/DocxWriterConverter.cs index a4ec81c..0b2deb2 100644 --- a/src/Filee.Engines/Office/DocxWriterConverter.cs +++ b/src/Filee.Engines/Office/DocxWriterConverter.cs @@ -23,7 +23,8 @@ public sealed class DocxWriterConverter : IConverter public int MaxParallelism => 0; public IReadOnlyList Edges { get; } = - DocumentReaders.BuiltInFormats.Where(f => !WordFormats.Contains(f)).Select(f => new ConversionEdge(f, "docx", Cost)).ToList(); + DocumentReaders.BuiltInFormats.Where(f => !WordFormats.Contains(f)) + .Select(f => new ConversionEdge(f, "docx", f == "pdf" ? Cost + DocumentReaders.PdfPenalty : Cost)).ToList(); public EngineStatus GetStatus() => EngineStatus.Available(string.Join(", ", Edges.Select(e => e.From.ToUpperInvariant())) + " → DOCX", EngineVersions.BuiltIn); diff --git a/src/Filee.Engines/Office/SpreadsheetConverter.cs b/src/Filee.Engines/Office/SpreadsheetConverter.cs index fec814b..7b0e042 100644 --- a/src/Filee.Engines/Office/SpreadsheetConverter.cs +++ b/src/Filee.Engines/Office/SpreadsheetConverter.cs @@ -20,7 +20,9 @@ public sealed class SpreadsheetConverter : IConverter public int MaxParallelism => 0; public IReadOnlyList Edges { get; } = - [.. Sources.SelectMany(from => Targets.Where(to => to != from).Select(to => new ConversionEdge(from, to)))]; + // XLSM / XLTX → XLSX is left to the ooxml engine, which keeps the whole package instead of rewriting the sheets. + [.. Sources.SelectMany(from => Targets.Where(to => to != from && !(to == "xlsx" && from is "xlsm" or "xltx")) + .Select(to => new ConversionEdge(from, to)))]; public EngineStatus GetStatus() => EngineStatus.Available("XLSX, XLS, ODS, CSV, TSV → XLSX, ODS, CSV, TSV", diff --git a/tests/Filee.Engines.Tests/EbookTests.cs b/tests/Filee.Engines.Tests/EbookTests.cs index 0dc08c4..8045f04 100644 --- a/tests/Filee.Engines.Tests/EbookTests.cs +++ b/tests/Filee.Engines.Tests/EbookTests.cs @@ -57,8 +57,9 @@ public void E_book_routes_use_the_built_in_engine() { var planner = BuiltInPlanner("rhwp"); - Assert.Equal(["ebook", "rhwp"], planner.Plan("epub", "pdf")!.Steps.Select(s => s.Converter.Id)); - Assert.Equal(["ebook", "rhwp", "pdfium"], planner.Plan("mobi", "png")!.Steps.Select(s => s.Converter.Id)); + // E-book readers are also registered with the HWPX writer, which comes first in the default engine order. + Assert.Equal(["hwpx-writer", "rhwp"], planner.Plan("epub", "pdf")!.Steps.Select(s => s.Converter.Id)); + Assert.Equal(["hwpx-writer", "rhwp", "pdfium"], planner.Plan("mobi", "png")!.Steps.Select(s => s.Converter.Id)); foreach (var (from, to) in new[] { ("mobi", "epub"), ("azw3", "epub"), ("fb2", "epub"), ("epub", "fb2"), ("md", "epub"), ("docx", "epub"), ("epub", "txt"), ("cbr", "pdf"), ("pdf", "cbz"), ("azw4", "pdf"), ("htmlz", "txtz") }) Assert.Equal("ebook", Assert.Single(planner.Plan(from, to)!.Steps).Converter.Id); Assert.Null(planner.Plan("epub", "mobi")); // needs calibre diff --git a/tests/Filee.Engines.Tests/GraphicsBuilders.cs b/tests/Filee.Engines.Tests/GraphicsBuilders.cs index a8bb5f2..06e9b46 100644 --- a/tests/Filee.Engines.Tests/GraphicsBuilders.cs +++ b/tests/Filee.Engines.Tests/GraphicsBuilders.cs @@ -320,13 +320,13 @@ public static void Wmf(string path, int widthMm, int heightMm) private static void DrawSample(IntPtr dc, int widthMm, int heightMm) { - // Device units of the reference DC (the screen): convert millimetres with its resolution. - var pixelsX = GetDeviceCaps(dc, 88 /* LOGPIXELSX */) / 25.4; - var pixelsY = GetDeviceCaps(dc, 90 /* LOGPIXELSY */) / 25.4; - var w = (int)(widthMm * pixelsX); - var h = (int)(heightMm * pixelsY); - Fill(dc, 0, 0, w, h, 0x7F9E1D); // teal (COLORREF is 0x00BBGGRR) - Fill(dc, 0, 0, w / 3, h, 0x1E7FFF); // orange + // Draw in 0.01 mm (MM_HIMETRIC, y grows upwards) so the picture fills the frame whatever screen the metafile is + // recorded against: device units would follow the display's resolution and scaling at the time of the test. + _ = SetMapMode(dc, 3 /* MM_HIMETRIC */); + var w = widthMm * 100; + var h = heightMm * 100; + Fill(dc, 0, 0, w, -h, 0x7F9E1D); // teal (COLORREF is 0x00BBGGRR) + Fill(dc, 0, 0, w / 3, -h, 0x1E7FFF); // orange static void Fill(IntPtr dc, int left, int top, int right, int bottom, uint color) { @@ -349,6 +349,9 @@ private struct Rect [DllImport("gdi32.dll")] private static extern IntPtr CloseEnhMetaFile(IntPtr dc); + [DllImport("gdi32.dll")] + private static extern int SetMapMode(IntPtr dc, int mode); + [DllImport("gdi32.dll")] private static extern bool DeleteEnhMetaFile(IntPtr metafile);