开源 MIT · Manifest V3 · 零网络请求Open source (MIT) · Manifest V3 · zero network requests

离线文件格式转换扩展
14 种格式在浏览器里互转,一个字节也不上传。
Offline file format converter for Chrome
14 formats converted in your browser, without uploading a byte.

文件格式任意转换助手是一款完全离线的 Chrome 扩展。Markdown、Word、PDF、Excel、CSV、JSON、HTML 与图片在你自己的电脑上完成转换:批量混合格式、自动多步链路、预览与内联编辑、ZIP 打包。无账号、无上传、无网络请求。 Transfer Any File is an offline file format converter for Chrome. Markdown, Word, PDF, Excel, CSV, JSON, HTML and images convert on your own machine — mixed-format batches, automatic multi-step chains, preview and inline editing, ZIP download. No account, no uploads, no network requests.

免费、开源、只申请 storage 一项权限,文件不出本机。走源码的话需要先构建,再在 chrome://extensions 加载未打包目录。点击工具栏图标即在新标签页打开转换工作台。 Free, open source, one permission ( storage ), and your files never leave the machine. The source route means building first, then loading the unpacked folder in chrome://extensions. Clicking the toolbar icon opens the workbench in a new tab.

chrome-extension://••••••••/options.html — 转换工作台 / Conversion workbench
The workbench converting a Markdown file to HTML: Markdown source on the left, rendered HTML result on the right, with Rendered, Source, Edit and Copy controls above and a Download button below.
0 次网络请求0 network requests 文件不出这台设备files never leave this device
14 文件格式file formats
48 条直接转换路径direct routes
116 个可选组合selectable combinations
0 次网络请求network requests
1 项权限(storage)permission (storage)
3.90 MB 完整包体whole bundle
在线试用Try it now

先转一张,再决定要不要装 Convert one image here, then decide

选一张图片、挑一个输出格式,画布在本地重新编码。这个页面没有后端,也不会把文件发到任何地方——和扩展里的单张转换是同一条原则。 Pick an image, choose an output format, and let the canvas re-encode it locally. There is no backend here and the file never leaves this page — the same rule the extension follows.

拖一张图片进来,或点此选择 Drop an image here, or click to choose

PNG · JPEG · WebP · BMP · GIF,单张不超过 20 MB PNG · JPEG · WebP · BMP · GIF, 20 MB max per image

文件不出这台设备Stays on this device
输出格式Output format
85%

这里只转一张位图。14 种格式互转、批量、多步链、预览编辑与 ZIP 打包都在扩展里。 This demo handles one bitmap. 14 formats, batches, multi-step routes, preview editing and ZIP packaging live in the extension. 需要压到指定 KB?用独立压缩工具 →Need a target KB? Use the standalone compressor → 去安装 →Install →

问题The problem

为什么人们会离开在线转换网站 Why people leave online converters

跑在你自己电脑上的转换器,相对跑在别人服务器上的转换器只有一个结构性优势:你的文件不会变成它的副本。 A converter running on your machine has one structural advantage over one running on someone else's server: your file never becomes their copy.

默认机密Confidential by default

合同、工资表、体检报告、未发布的稿件——转换过程中不会在第三方基础设施或其访问日志里留下任何副本。 Contracts, payroll sheets, medical reports, unpublished drafts — converted without a copy ever existing on third-party infrastructure or in its access logs.

无配额、无账号No quota, no account

不用登录、没有每日次数限制、没有「前 3 次免费」门槛、不加水印;除了你浏览器内存能承受的上限(单文件 100 MB、单批 200 个文件)之外没有天花板。 No sign-in, no daily limit, no "3 free conversions" gate, no watermark, and no size ceiling beyond what your browser can hold in memory: 100 MB per file, 200 files per batch.

断网也能用Works with the wifi off

转换器和整个界面都打在扩展包里,文字用的是系统自带字体,没有一样东西需要现取。在飞机上、在内网管控环境里、在运营商故障时,行为完全一致。 Every converter and the whole interface ship inside the extension, and the text is set in your own system fonts, so there is nothing left to fetch. On a plane, inside a locked-down network, or during an outage, behaviour is identical.

比上传更快Faster than an upload

一次往返从「内存 → 数据中心 → 内存」变成「内存 → 内存」。一个 3 MB 的文档在不到一秒内完成转换。 The round trip is memory-to-memory rather than memory-to-datacenter-and-back, so a 3 MB document converts in well under a second.

支持的格式Supported formats

哪种格式能转成哪种 Which formats convert to which

14 种格式分属文档 / 数据 / 图片三大类。每个转换器在注册表里建成图的一条边,能转到的目标由广度优先搜索得出,因此多步链路是自动发现的,而不是写死的。 Fourteen formats in three families. Every converter registers as an edge in a graph and the selectable targets come from a breadth-first search over it, so multi-step routes are discovered rather than hard-coded.

  • 文档Documents
  • Markdown
  • HTML
  • DOCX
  • PDF
  • TXT
  • 数据Data
  • CSV
  • XLSX
  • JSON
  • 图片Images
  • PNG
  • JPEG
  • WebP
  • BMP
  • GIF
  • SVG
一句话答案:能读入 14 种格式,能写出 11 种(SVG、BMP、GIF 只能读,因为浏览器未提供它们的编码器)。注册表里有 48 条直接转换路径;对任意一种源格式,除自身以外的 11 种可写目标在图上都可达,合计 143 个可达组合;其中 27 个(24 个图片→文本/数据、3 个 PDF→数据)必然失败或只产出占位内容,被格式下拉置灰并写明原因,因此真正 可选的是 116 个。下表的「直接」列是已注册转换器数,「可达」列是含自动多步后能到达的目标数,「可选」列是置灰之后仍然能选的数量。内联 SVG 进入 Word 或 Markdown 时会栅格成 PNG 嵌进结果文件——图形不丢,但它是位图不是矢量。 Short answer: it reads 14 formats and writes 11 — SVG, BMP and GIF are input-only because browsers expose no encoders for them. The registry holds 48 direct conversion routes; from any source format, all 11 writable targets except itself are reachable in the graph, which is 143 reachable combinations. 27 of them (24 image→text/data and 3 PDF→data) would always fail or produce a placeholder, so the picker greys them out with a reason and 116 remain selectable. In the table below, "Direct" counts registered converters, "Reachable" counts the targets a source can reach including automatic multi-step chains, and "Selectable" counts what stays enabled after that policy. An inline SVG converted into Word or Markdown is rasterized into an embedded PNG: the drawing survives, but it is a bitmap, not a vector.
文件格式任意转换助手 1.9.1 的实际转换能力(从 utils/converters/ 注册表直接推导,非估计值)。三个格式列互不重叠,相加正好等于「可达」:「一步直达」是已注册转换器的目标,「经链路到达」只列链路可达且仍然可选的目标,「被置灰」列同样链路可达、但被语义策略禁用的组合(图片 → 文本 / 数据:没有文字层,除非接 OCR;PDF → 表格 / JSON:PDF 不携带表格结构)。被置灰的全部是多步链路目标,因为没有任何一条已注册的直连转换被策略禁用。去掉「被置灰」即为「可选」。 Actual conversion capability in Transfer Any File 1.9.1, derived from the converter registry rather than estimated. The three format columns do not overlap, and together they add up to "Reachable": "Direct targets" are registered converters, "Reached via a chain" lists only chain-reachable targets that stay selectable, and "Greyed out" holds the chain-reachable pairs the semantic policy disables (image → text / data: no text layer without OCR; PDF → spreadsheet / JSON: a PDF carries no table structure). Every greyed pair is chain-only, because no registered direct converter is disabled by the policy. Drop the greyed ones and what is left is "Selectable".
源格式Source 一步直达目标(已注册转换器)Direct targets (registered converters) 经链路到达Reached via a chain 被置灰Greyed out 直接Direct 可达Reachable 可选 Selectable
Markdown
  • HTML
  • Word
  • PDF
  • JSON
  • PNG
  • TXT
  • CSV
  • JPEG
  • WebP
  • Excel
  • —
1 10 10
HTML
  • Markdown
  • Word
  • PDF
  • JSON
  • TXT
  • PNG
  • CSV
  • JPEG
  • WebP
  • Excel
  • —
6 10 10
Word
  • HTML
  • Markdown
  • PDF
  • JSON
  • PNG
  • TXT
  • CSV
  • JPEG
  • WebP
  • Excel
  • —
1 10 10
PDF
  • HTML
  • PNG
  • Markdown
  • Word
  • TXT
  • JPEG
  • WebP
  • JSON
  • CSV
  • Excel
2 10 7
TXT
  • HTML
  • Markdown
  • Word
  • PDF
  • JSON
  • PNG
  • CSV
  • JPEG
  • WebP
  • Excel
  • —
2 10 10
CSV
  • Excel
  • JSON
  • HTML
  • Markdown
  • Word
  • PDF
  • PNG
  • TXT
  • JPEG
  • WebP
  • —
3 10 10
Excel
  • CSV
  • JSON
  • HTML
  • Markdown
  • Word
  • PDF
  • PNG
  • TXT
  • JPEG
  • WebP
  • —
3 10 10
JSON
  • HTML
  • CSV
  • Markdown
  • Word
  • PDF
  • PNG
  • TXT
  • Excel
  • JPEG
  • WebP
  • —
2 10 10
PNG
  • WebP
  • JPEG
  • PDF
  • HTML
  • Markdown
  • Word
  • JSON
  • TXT
  • CSV
  • Excel
4 10 6
JPEG
  • PNG
  • WebP
  • HTML
  • PDF
  • Markdown
  • Word
  • JSON
  • TXT
  • CSV
  • Excel
4 10 6
WebP
  • PNG
  • JPEG
  • HTML
  • PDF
  • Markdown
  • Word
  • JSON
  • TXT
  • CSV
  • Excel
4 10 6
BMP 只读input only
  • PNG
  • WebP
  • JPEG
  • HTML
  • PDF
  • Markdown
  • Word
  • JSON
  • TXT
  • CSV
  • Excel
5 11 7
GIF 只读input only
  • PNG
  • WebP
  • JPEG
  • HTML
  • PDF
  • Markdown
  • Word
  • JSON
  • TXT
  • CSV
  • Excel
5 11 7
SVG 只读input only
  • PNG
  • JPEG
  • WebP
  • HTML
  • PDF
  • Markdown
  • Word
  • JSON
  • TXT
  • CSV
  • Excel
4 11 7

典型多步链路(一次点击,自动串跑) Typical multi-step routes (one click, chained automatically)

Markdown→HTML→PDF 2 步2 steps
Word→HTML→Markdown 2 步2 steps
JSON→CSV→Excel 2 步2 steps
SVG→PNG→PDF 2 步2 steps
Word→HTML→JSON→CSV 3 步3 steps
TXT→HTML→JSON→CSV→Excel 4 步4 steps

它有意不做的事 What it deliberately does not do

不做 OCR。No OCR. 图片无法变成 TXT / CSV / Excel——那需要 OCR 模型,会多几十 MB 体量并引入模型下载,破坏离线承诺。这些目标在选择框里直接置灰并写明原因,而不是点了转换才失败。 Images cannot become TXT, CSV or Excel — that needs an OCR model, which would add tens of megabytes and a download, breaking the offline guarantee. Those targets are greyed out with the reason shown, rather than failing after you press Convert.

PDF 输出是图片。PDF output is image-based. 转出的 PDF 逐页渲染为图片,不含文字层,里面没有可被搜索或提取的真实字符。你在查看器里选中复制出的文字,是那个查看器自己识别的,不在这个文件里。 Converted PDFs are rendered page by page as images, so they carry no text layer and hold no real characters to search or extract. Text you manage to select and copy in a viewer was recognised by that viewer — it is not in the file.

PDF 输入只取文本。PDF input is text-only. 排版与内嵌图片不会保留。多工作表的 Excel 转 CSV、多页 PDF 转图片时,结果自动打包成 ZIP。 Layout and embedded images are not preserved. Multi-sheet workbooks to CSV and multi-page PDFs to images come back as a ZIP.

不做视频 / 音频 / 电子书。No video, audio or e-books. 也不做压缩优化。ZIP 只用于打包结果,不是目标格式。需要这些格式时,在线服务仍是更好的选择——下面的对比表说清了边界。 No image compression either. ZIP bundles results; it is not a target format. For those, online services remain the better tool — the comparison below states the boundary honestly.

按配对查Pair by pair

同样是「能转」,每个配对的差别写在各自的页面上 Two pairs can both be "supported" and still differ — each one has its own page

这些页面不是把上面的话再说一遍:每条链路给出「会保留什么」「不做什么」「实操提示」和该配对特有的问题。页面由 scripts/render-site-pages.mjs 从代码里的注册表与 scripts/__baseline__/conversion-paths.json 生成,链路对不上时生成脚本会直接失败——页面上画的走法就是工作台真正会执行的走法。 These pages do not repeat the section above: every route gets "what carries over", "what it does not do", working notes and the questions specific to that pair. They are generated by scripts/render-site-pages.mjs from the registry in the code and scripts/__baseline__/conversion-paths.json, and the generator fails when the two disagree — so the chain drawn on a page is the chain the workbench actually runs.

Markdown → Word.md → .docx Word → Markdown.docx → .md Markdown → PDF.md → .pdf Markdown → HTML.md → .html HTML → PDF.html → .pdf Word → PDF.docx → .pdf PDF → Text.pdf → .txt PDF → HTML.pdf → .html PDF → Word.pdf → .docx Word → HTML.docx → .html TXT → Markdown.txt → .md HTML → Word.html → .docx HTML → Markdown.html → .md HTML → Text.html → .txt PDF → PNG.pdf → .png PDF → JPEG.pdf → .jpg PDF → WebP.pdf → .webp Excel → PDF.xlsx → .pdf HTML → PNG.html → .png Excel → CSV.xlsx → .csv CSV → Excel.csv → .xlsx Excel → JSON.xlsx → .json CSV → JSON.csv → .json JSON → CSV.json → .csv JSON → Excel.json → .xlsx Excel → HTML.xlsx → .html PNG → WebP.png → .webp PNG → JPEG.png → .jpg JPEG → PNG.jpg → .png JPEG → WebP.jpg → .webp WebP → JPEG.webp → .jpg WebP → PNG.webp → .png WebP → PDF.webp → .pdf PNG → PDF.png → .pdf PNG → HTML.png → .html JPEG → PDF.jpg → .pdf SVG → PNG.svg → .png SVG → JPEG.svg → .jpg SVG → WebP.svg → .webp GIF → PNG.gif → .png GIF → JPEG.gif → .jpg GIF → HTML.gif → .html GIF → Markdown.gif → .md BMP → PNG.bmp → .png BMP → JPEG.bmp → .jpg CSV → PDF.csv → .pdf Excel → Word.xlsx → .docx PDF → Markdown.pdf → .md SVG → PDF.svg → .pdf Word → PNG.docx → .png WebP → Word.webp → .docx TXT → PDF.txt → .pdf Word → TXT.docx → .txt GIF → PDF.gif → .pdf SVG → HTML.svg → .html CSV → HTML.csv → .html CSV → Markdown.csv → .md Markdown → CSV.md → .csv HTML → CSV.html → .csv Excel → Markdown.xlsx → .md TXT → Word.txt → .docx JSON → PDF.json → .pdf JSON → TXT.json → .txt CSV → TXT.csv → .txt JSON → Word.json → .docx Markdown → TXT.md → .txt TXT → HTML.txt → .html JSON → HTML.json → .html HTML → JSON.html → .json Markdown → JSON.md → .json Markdown → Excel.md → .xlsx TXT → JSON.txt → .json TXT → CSV.txt → .csv JSON → Markdown.json → .md JPG → HTML.jpg → .html JPG → Markdown.jpg → .md PNG → Word.png → .docx BMP → HTML.bmp → .html BMP → Word.bmp → .docx BMP → PDF.bmp → .pdf SVG → Word.svg → .docx WebP → HTML.webp → .html WebP → Markdown.webp → .md BMP → Markdown.bmp → .md PNG → Markdown.png → .md Word → WebP.docx → .webp Excel → JPG.xlsx → .jpg GIF → Word.gif → .docx TXT → PNG.txt → .png Word → JSON.docx → .json GIF → WebP.gif → .webp TXT → JPG.txt → .jpg TXT → WebP.txt → .webp CSV → WebP.csv → .webp Excel → WebP.xlsx → .webp JSON → WebP.json → .webp BMP → WebP.bmp → .webp SVG → Markdown.svg → .md JPG → Word.jpg → .docx TXT → Excel.txt → .xlsx Word → JPG.docx → .jpg Word → CSV.docx → .csv Word → Excel.docx → .xlsx HTML → WebP.html → .webp Markdown → WebP.md → .webp HTML → JPG.html → .jpg Markdown → JPG.md → .jpg CSV → JPG.csv → .jpg Excel → PNG.xlsx → .png CSV → Word.csv → .docx CSV → PNG.csv → .png Markdown → PNG.md → .png JSON → PNG.json → .png JSON → JPG.json → .jpg HTML → Excel.html → .xlsx Excel → TXT.xlsx → .txt

看完整转换一览Browse all conversions · 设计手记:为什么把转换器做成一张图,以及批量场景踩过的坑 Design notes: why the converters became a graph, and the batch pitfalls that followed

工作原理How it works

一次转换走过的六步 The six steps inside one conversion

你只点四下:拖进来、选格式、按开始、拿结果。中间真正跑起来的是下面这六步,全程在浏览器标签页内完成——没有任何一步会把文件发给别处。 You click four times: drop, pick, start, download. These are the six steps that actually run in between, and every one of them happens inside the tab — none of them sends a file anywhere.

  1. 01

    识别Identify

    先看扩展名,看不清再退到 MIME 类型;两者都对不上就不猜,直接说明无法识别。 The extension decides first; a MIME type is the fallback. If neither matches, it says so instead of guessing.

  2. 02

    取交集Narrow

    混合批次只保留对每个文件都可达的目标格式。14 种格式、48 条直连路径构成一张有向图。 A mixed batch keeps only the targets reachable from every file. 14 formats and 48 direct routes form one directed graph.

  3. 03

    置灰Screen out

    图上能走通、语义上没意义的 27 个组合(比如图片转 XLSX)会置灰并写出原因,而不是悄悄藏掉。 The 27 combinations that are routable but meaningless (image to XLSX, say) are greyed out with a reason rather than quietly hidden.

  4. 04

    寻路Route

    宽度优先搜索找最短链路。没有直连时自动串多步,例如 MD → HTML → PDF,每一步在界面上都看得见。 A breadth-first search finds the shortest chain. With no direct edge it stacks steps — MD → HTML → PDF — and shows you each one.

  5. 05

    执行Convert

    逐个文件独立跑,重依赖首次用到才加载。一个文件失败不影响同批其它文件,中途可按取消。 Files run one at a time and heavy libraries load on first use. One failure never stops the rest of the batch, and cancel works mid-run.

  6. 06

    交付Deliver

    单文件直接下,多结果打包成 ZIP。历史只记名字、格式、大小这类元数据,不存文件内容。 One result downloads directly, several get bundled into a ZIP. History stores metadata — name, format, size — never the content.

取消不是失败Cancelling is not failing

按取消之后,界面会区分「已经跑完」和「中途停下」:已完成的结果照样可以下载,剩下的标记为已取消,不会出现一份看不清状态的清单。 After you cancel, the UI still separates "finished" from "stopped halfway": completed results stay downloadable, the rest are labelled cancelled, so you never stare at a list of unknown status.

没有手工维护的转换矩阵No hand-maintained matrix

每个转换器只声明自己「从哪来、到哪去」,多步链路由搜索自动发现。加一个新格式不用补一张表,新链路会自己出现在下拉框里。 Each converter only declares where it comes from and where it goes; chains are discovered by the search. Adding a format never means patching a table — new routes show up in the selector on their own.

核心能力Core capabilities

单文件转换之外的那些事 What it does beyond a single conversion

当任务是「把这一批全转了」而不是「转这一个文件」时,真正起作用的是下面这些能力。 The capabilities that matter when the job is "all of these files", not "this one file".

混合格式批量Mixed-format batches

一次拖 40 个不同类型的文件。每个文件各自解析到自己的最短路径;目标格式下拉框只列出对批次内全部文件都可达的格式,上限 200 个。 Drop 40 files of different types. Each resolves its own route to the shared target, and only formats reachable from every selected file are offered — up to 200 files per batch.

内置示例与目标建议Samples and suggested targets

空工作台自带 Markdown / CSV / 图片三个示例,点一下直接载入并选好对应目标;还没选目标时,按源格式给出最多 3 个推荐目标。推荐不会自动生效,点一下才等于一次普通的目标选择。 The empty workbench ships three samples (Markdown / CSV / image); one click stages one and picks its target. While the picker is empty, up to three targets are suggested for the source format — a suggestion never applies on its own, and clicking one is an ordinary target selection.

长批次也能找到那一条Find one row in a long batch

结果超过 8 条或出现失败时,结果卡顶部出现按文件名搜索与「全部 / 成功 / 失败」筛选。搜索同时匹配输出名与源文件名;失败视图只留失败,下载与 ZIP 仍按整批计算。 Once a batch has more than eight rows or any failure, the result card gains a file-name search and All / Succeeded / Failed filters. Search matches the produced name and the source name; the failure view hides successes, while downloads and the ZIP still count the whole batch.

自动多步链路Automatic multi-step chains

不存在 Markdown 直达 PDF 的转换器,但工作台会用广度优先搜索求出最短链路并逐步执行,Markdown → PDF 实际按 Markdown → HTML → PDF 两步跑完,路径在选择框下方展示。 There is no Markdown-to-PDF converter, but the workbench finds the shortest chain with BFS and runs it step by step: Markdown → PDF executes as Markdown → HTML → PDF, with the route printed under the picker.

失败隔离、可取消、可撤销Failure isolation, cancel, undo

一个读不了的文件不会阻断其余部分:失败按文件列出原因,还能展开看到它尝试的转换路径与出错的那一步,并一键复制诊断信息。长批次能随时取消,已完成的结果保留;上一轮结果误操作可一键撤销。 One unreadable file never blocks the rest — failures are listed per file with the reason, expand to the route each one tried and the step that broke, and copy that diagnostic with one click. A long batch is cancellable with finished results kept, and the last result can be undone.

对比、同步滚动、可拖分隔条Side-by-side, sync scroll, draggable divider

源文件与结果左右并排,分隔条可拖拽,滚动可同步;也能切到仅原文件 / 仅结果,或用 1 / 2 / 3 直接切换、← / → 微调分隔条。渲染视图与源码视图一键切换,结果可直接复制;分隔条位置会被记住。 Source and result sit side by side with a draggable divider and synchronised scrolling; you can also switch to source-only or result-only, with 1 / 2 / 3 jumping between the modes and ← / → nudging the divider. Rendered and source views toggle in one click, results copy to the clipboard, and the divider position is remembered.

下载前可编辑结果Edit the result before download

文本类结果(Markdown / HTML / TXT / JSON / CSV)能在对比视图里直接改,改完再下载,不必回到编辑器绕一圈。 Text results (Markdown, HTML, TXT, JSON, CSV) are editable inline in the comparison view, so a small fix never sends you back to another editor.

JSON 按结构看,不按字符看JSON read as a structure, not as characters

JSON 的预览有树、数组表与原文三个视图:树逐层展开,数组表把对象数组摊成行列并可点单元格在树里展开定位,原文保留缩进。树内可按键名、路径或值搜索(三项任意组合、可区分大小写),命中处高亮并支持上一处 / 下一处跳转,任意一行都能复制它的 JSONPath。解析预算为 10 万节点 / 128 层嵌套,单屏最多渲染 5 000 行、数组表最多 2 000 行且单元格上限 2 万、匹配上限 5 000 处——任何一项触顶都会在界面上写明实际读了多少,半棵树不会冒充整个文档。 JSON previews in three views — a tree that expands level by level, an array table that lays objects out as rows and columns (a cell click opens that node in the tree), and the raw indented text. Inside the tree you can search keys, paths, or values (any combination, case sensitivity optional); hits highlight, previous / next steps through them, and any row copies its JSONPath with one click. The budget is 100 000 nodes and 128 levels, 5 000 painted rows, a 2 000-row table capped at 20 000 cells, and 5 000 matches — and when any budget is reached the interface says how much of the document it actually read, so a half-parsed tree never passes itself off as the whole file.

粘贴、文件夹与压缩包入口Paste, folder and archive intake

Ctrl/⌘+V 直接粘剪贴板里的图片或文本开始转换;文件也能丢到工作台任意位置,不必命中上传区,丢一个文件夹进来 会把里面能转换的文件一起收进批次;拖一个 .zip 进来会自动展开,把其中支持的条目加入批次。 Ctrl/⌘+V converts a clipboard image or text block; files can be dropped anywhere on the workbench rather than only on the upload zone, a dropped folder contributes the convertible files inside it, and dropping a .zip expands it and adds every supported entry to the batch.

一个 ZIP,压缩策略按条目定One ZIP, per-entry compression

文本结果 deflate 后约小 10 倍;图片按页面内容而定——12 页真实 PDF 导出实测 PNG 条目小 39%,而一页以纯色为主的文档,PNG 与 WebP 各小一半、JPEG 小 91%。PDF / XLSX / DOCX 这类自带容器的产物直接 stored,不浪费 CPU。单文件则直接下载,不会强塞进 ZIP。 Text results deflate to roughly a tenth of the size; images depend on what is on the page — a real 12-page PDF export measured its PNG entries 39% smaller, and a mostly flat document page gives 50% as PNG or WebP and 91% as JPEG. Outputs that carry their own container — PDF, XLSX, DOCX — are stored as-is so no CPU is wasted. A single result downloads on its own rather than being forced into an archive.

图片输出参数Image output parameters

目标是 PNG / JPEG / WebP 时,面板给出真正的编码器旋钮:质量 40–90%、最长边 800–4096 px、目标体积 20 KB–2 MB(质量与目标体积仅 JPEG / WebP),源里有 PDF 时还能选 96–300 DPI。目标体积靠质量阶梯反复编码逼近。每一项默认「不动」,一键恢复默认,参数本身持久化到本机。同一行的「页码范围」是另一回事:它只栅格化你点名的那几页(如 1-3, 5),说的是这份文件的哪几页,因此不出本机、也不进预设。 A PNG / JPEG / WebP target exposes the real encoder knobs: quality 40–90% and a target size of 20 KB–2 MB for JPEG and WebP, longest edge 800–4096 px for all three, plus 96–300 DPI when a PDF is in the batch. The size ceiling is met by walking a quality ladder. Every knob starts untouched, one control restores the defaults, and the settings persist on your machine. The Pages field beside them is a different kind of thing: it rasterizes only the pages you name (1-3, 5), and because it states which pages this file means it is never stored and never part of a preset.

转换预设Conversion presets

把「目标格式 + 输出参数」存成一个命名快捷方式(最多 12 个),下次一键恢复。预设不绑定源格式,所以「1280 px 的 PNG」对来自 PDF、HTML 还是 SVG 的批次都成立;工作台里没有文件时它会先被记住,等文件一落地就自动应用。存下来的只有格式与参数,不含任何文件内容。 Save a target format together with its output parameters as a named shortcut — up to 12 of them — and restore the whole setup in one click. A preset is not bound to a source format, so "PNG at 1280 px" works for a batch arriving from PDF, HTML or SVG alike; with no files loaded yet it is remembered and applied the moment the next batch lands. Only the format and its parameters are stored, never file content.

输出文件名由你定Names you can write yourself

结果默认叫 原名_20260914_153012.pdf:日期加时间精确到秒,同一天转两批不会互相覆盖。偏好设置里这一串可以改写,{name} (源文件名去掉后缀)、{date}、{time}、{index}(本批序号)、{target} (目标格式)任意组合,输入框下方实时给出示例。路径分隔符与控制字符会被清掉,扩展名始终由实际产物决定,所以再离谱的模板也写不出路径、写不出说谎的后缀;写错的占位符按普通文字保留并当场提示。这套写法只存在扩展自己的本地存储里。 A result is called original_20260914_153012.pdf by default — date plus time to the second, so two batches on one day never overwrite each other. Preferences lets you rewrite that string from any mix of {name} (the source name without its extension), {date}, {time}, {index} (position in the batch) and {target} (the output format), with a live example under the field. Path separators and control characters get stripped and the extension always comes from the artifact itself, so no pattern can produce a path or a suffix that is not true; a mis-typed placeholder stays literal and is pointed out on the spot. The pattern is written only to the extension's own local storage.

只存元数据的历史History with metadata only

保留最近 50 次转换的文件名、格式与体积——不含文件内容。可按文件名搜索、按源/目标筛选、一键复用格式组合,也能导出 JSON 到新设备导入。最近用过的目标格式(最多 6 个)还会以下拉顶部的「最近使用」分组呈现,同样只记格式名。 Keeps the last 50 conversions as names, formats and sizes — never file contents. Search by file name, filter by source or target, reuse a combination in one click, export as JSON and import it on another device. The formats you convert to most often (up to 6) also lead the target dropdown as a "recently used" group — format names only, again.

中文表格不乱码Chinese spreadsheets stay readable

CSV 读取先认出 UTF-16(含 Excel「Unicode 文本」那种没写 BOM 的),再试 UTF-8, 失败依次回退 GB18030 与 GBK;写出时带 BOM。国内系统导出的老编码表格能打开,转出的 CSV 在 Excel 里也不会变方块。 CSV reads detect UTF-16 first — including the BOM-less "Unicode Text" variant Excel writes — then fall back UTF-8 → GB18030 → GBK automatically, and write UTF-8 with BOM, so legacy-encoded exports open correctly and converted CSVs land in Excel without mojibake.

不可用就写清原因Unusable targets say why

选不了的目标不是静默消失,而是置灰并给出具体原因:与源格式相同、需 OCR、PDF 无法可靠转为结构化数据等——避免点了转换才发现不行。图上有 143 个可达组合,其中 27 个属于这类语义无效,被屏蔽后下拉实际提供 116 个。 Disabled targets are greyed out with a specific reason rather than silently missing: same as source, needs OCR, or PDF cannot be reliably turned into structured data. Of the 143 combinations reachable in the graph, 27 are semantically invalid, so the picker offers 116.

6 种主题色 × 浅色/深色/系统6 accent colours × light / dark / system

主题在页面挂载前应用,不会闪白。语言、主题、快捷键、大批次确认与后台完成通知的开关,以及历史卡片的折叠状态都记在本地;开始转换的 Ctrl/⌘+Enter 可改绑。 The theme is applied before mount, so there is no flash of the wrong palette. Language, theme, shortcut, the large-batch confirmation and completion-notification switches, and the collapsed state of the history card all persist locally; the Ctrl/⌘+Enter convert shortcut is rebindable.

键盘可达与无障碍Keyboard and accessibility

跳转主内容链接、可见焦点环、prefers-reduced-motion 降级;转换进度与文件列表的增减通过 role="status" 区域播报,删除历史后 5 秒内还可以撤销。端到端套件在 6 主题 × 浅/深共 12 种组合下逐项实测五组承担对比度契约的颜色。卡片上的文字全部达标:拖放提示与文件大小这类正文信息文字对各自底色 ≥ 4.5:1,Element Plus 浅色效果的警示框标题与文件行的格式标签——它们用同一支语义色既当墨又当底——对各自的浅色底 ≥ 4.5:1,焦点环对卡片背景 ≥ 3:1。彩色表面上的白字是刻意的取舍:主按钮文字在常态 / 悬停 / 按下三种状态下,紫、玫瑰、石板与全部深色主题 ≥ 4.5:1(读数取自确实可点击的按钮,文本规则豁免禁用控件),而晴空蓝 / 森林绿 / 活力橙为 2.78→2.22、2.54→1.92、3.56→2.80;顶栏品牌字 2.78 / 2.54 / 3.56,版本号芯片与两枚玻璃按钮在白色薄膜上 2.36 / 2.22 / 3.00——为与作者的另外两个扩展共用同一套皮肤,这些读数作为明示的已知限制逐主题钉住下限,而不是当作已达标呈现。 Skip link to the main content, visible focus rings and a prefers-reduced-motion fallback. The end-to-end suite measures the five colour pairs that carry the contrast contract — informational text such as the drop hint and file sizes at 4.5:1 or better on their own backdrop, the light-effect alerts and per-file format tags, whose semantic colour serves as both ink and fill, at 4.5:1 or better against the tint underneath them, and the focus ring on a card at 3:1 or better — in all 12 theme × light/dark combinations. White on the coloured surfaces is the deliberate trade: the primary button's label clears 4.5:1 under purple, rose, slate and every dark theme (read off the enabled button, because the text rule exempts disabled controls), while sky blue, forest green and orange run 2.78 → 2.22, 2.54 → 1.92 and 3.56 → 2.80 from rest to hover, and the topbar wordmark measures 2.78 / 2.54 / 3.56 with its chip and two glass buttons at 2.36 / 2.22 / 3.00 on the white film. Those readings are stated known limitations, pinned per theme so they cannot quietly widen — not a pass.

不用先装也能试:在自己的浏览器里比较两个文件,行级与词级差异、并排与统一视图。不上传、不需要联网。Try something before installing: diff two files inside your own browser — line and word-level changes, split or unified view. Nothing is uploaded and it needs no network.

界面Interface

工作台长什么样 The workbench, screen by screen

下列截图由 pnpm assets:capture 直接从构建产物驱动浏览器生成,因此它们不会与实际界面漂移。 Every screenshot below is captured from the built bundle by pnpm assets:capture, so it cannot drift from what the extension actually shows.

安装与使用Install & use

安装一次点击,日常四步 One click to install, four steps a day

商店条目已上线:装上就是稳定版,之后自动跟随更新,不需要开启开发者模式。要审阅构建产物或改代码, 走下面的源码四步(需要 Node.js 20.12 或更新版本与 pnpm)。 The listing is live: installing from the store gives you the stable build and its updates, with no Developer mode needed. To review the built artifact or change the code, use the four source steps below (Node.js 20.12 or later and pnpm).

从 Chrome 应用商店安装Install from the Chrome Web Store

从源码安装(4 步) From source, four steps

01

装工具链Install the toolchain

Node.js 20.12 及以上,包管理器固定为 pnpm。 Node.js 20.12 or later, plus pnpm (the repo pins it via packageManager).

02

克隆并构建Clone and build

下方命令产出 .output/chrome-mv3;依赖装好后,构建本身只需几秒。 The commands below produce .output/chrome-mv3. Once dependencies are installed, the build itself takes a few seconds.

03

加载扩展Load it

打开 chrome://extensions,右上角开启「开发者模式」,点「加载未打包的扩展」,选上一步的 .output/chrome-mv3。 Open chrome://extensions, switch on Developer mode, click Load unpacked and choose the .output/chrome-mv3 folder.

04

点图标Click the icon

工作台在新标签页打开。它没有弹窗、没有侧边栏——所有事都在那一页里完成。 The workbench opens in a new tab. There is no popup and no side panel — everything happens on that page.

git clone https://github.com/liaolongdong/transfer-any-file.git
cd transfer-any-file
pnpm install
pnpm build

平常一天的四步 The daily flow, four steps

1

拖入、选择或粘贴文件(也能拖一个 ZIP 进来自动展开)。 Drop, pick or paste files — a dropped ZIP is expanded for you.

2

选目标格式,不可达的会自动置灰并写出原因。 Choose the target format — unreachable ones are greyed out with a reason.

3

按「开始转换」或 Ctrl/⌘+Enter,多步链路自动串跑。 Press Convert (or Ctrl/⌘+Enter); multi-step chains run themselves.

4

预览、必要时改一下,然后下载单文件或整批 ZIP。 Preview, edit if needed, then download one file or the whole batch as a ZIP.

横向对比Comparison

本地扩展 vs 在线转换网站 vs 命令行工具 Local extension vs online converter vs command-line tool

行按本扩展那一列排序:前九行是 ✅ ——多数是对在线网站的净胜,与命令行工具互有胜负;后四行是它明确让位给在线服务或命令行的维度。诚实的权衡:在线服务能覆盖更多格式(视频、音频、电子书、CAD),因为它们能跑重型服务器;命令行工具能处理成百上千个文件且可编排;在浏览器能解码的格式上,本地扩展胜在隐私、限制与开箱即用。三者不是替代关系。 Rows are ordered by our own column: the first nine are ✅ — outright wins over online services in most cases, a split against a CLI — and the last four are where an online service or a command-line tool plainly does better. An honest trade-off: online services cover far more formats (video, audio, e-books, CAD) because they can run heavy servers; command-line tools handle thousands of files and script well. Where a browser can decode the format, a local extension wins on privacy, limits and convenience. The three are not substitutes.

基于各类型工具的共同行为总结,而非某个具体厂商;Pandoc / ImageMagick 作为命令行工具的代表列出。 Based on the typical behaviour of each class of tool rather than one specific vendor; Pandoc / ImageMagick stand in for the command-line column.
维度Dimension 文件格式任意转换助手Transfer Any File 在线转换网站Online converter 命令行工具CLI tool
文件离开设备Your file leaves the device 从不Never 总是(机制如此)Always (that is the mechanism) 从不Never
离线 / 飞行可用Works offline / on a plane 是Yes 否No 是Yes
价格与账号Price and account 免费,无需注册,无付费版Free, no sign-up, no paid tier 免费额度,订阅才能解除限制Free quota, subscription lifts the limits 通常免费Usually free
预览与转换后微调Preview and tweak the result 内置对比视图 + 内联编辑Built-in comparison view and inline editing 通常只有缩略图Usually a thumbnail at best 无None
混合格式批次Batch of mixed formats 是,整批共用一个目标Yes, one target for the whole batch 通常付费或排队Usually paid or queue-bound 是,且可编排Yes, and scriptable
免费额度限制Free-tier limits 单文件 100 MB、单批 200 个100 MB per file, 200 files per batch 每日配额、体积上限、水印Daily quotas, size caps, watermarks 无None
使用门槛Learning curve 拖文件、选格式Drop a file, pick a format 上传、等下载Upload, wait, download 需记参数与格式名Flags and format names
源码Source code 开源(MIT)Open source (MIT) 闭源Closed 开源Open source
中文界面与编码Chinese interface and encoding 中英双语界面;CSV 输出带 BOM,Excel 打开不乱码Bilingual UI; CSV written with a BOM so Excel opens it cleanly 视具体服务而定Depends on the service 编码需自行处理Encoding is left to you
安装成本Setup cost 构建一次,加载未打包目录Build once, load the unpacked folder 零,打开链接即可None, it is a web page 需包管理器与 PATHPackage manager and PATH
格式广度Format breadth 14 种文档 / 数据 / 图片14 document / data / image formats 数百种,含视频音频Hundreds, including video and audio Pandoc 40+ 文档格式,ImageMagick 数百图像格式Pandoc 40+ document formats, ImageMagick hundreds of image formats
OCR / 复杂排版修复OCR, complex PDF layout repair 未内置Not bundled 常见Commonly offered 需额外装 Tesseract 等Requires a separate Tesseract install
可编排 / CIScriptable / CI 无命令行入口No CLI entry point 无官方 API(有则付费)No official API (paid when offered) 天生为脚本设计Designed for it
隐私与权限Privacy & permissions

“不上传”不是口号,是可验证的结构 "No uploads" is a verifiable structure, not a claim

扩展只申请一项权限:storage,用于历史记录与偏好设置。它不声明任何 host_permissions,自身代码中也不发起任何网络调用,因此不存在能把文件发出去的代码路径。界面上的对外地址除顶栏的版本号芯片直达 GitHub 最新发布页外,都集中在「关于」抽屉里——使用说明、商店、源码、反馈、隐私政策等十条;每一条都是普通链接,点了才由浏览器打开,扩展既不检查更新也不预取任何东西。完整政策:隐私政策(中英双语)。 The extension requests exactly one permission, storage, for history and preferences. It declares no host_permissions and issues no network call of its own, so there is no path by which a file could be transmitted. Apart from the version chip in the top bar, which opens the latest GitHub release, every off-site address lives in the About drawer — usage guide, store listing, source, feedback, privacy policy and so on, ten in all: each is a plain link the browser opens when you click it, and the extension neither checks for updates nor prefetches anything. Full text: privacy policy (bilingual).

你能自己核对的四件事Four things you can check yourself

  • .output/chrome-mv3/manifest.json 里 permissions 只有 ["storage"],无 host_permissions 字段。 In .output/chrome-mv3/manifest.json, permissions is just ["storage"] and there is no host_permissions key.
  • 源码(entrypoints/、components/、composables/、utils/)里没有 fetch、XMLHttpRequest、WebSocket、EventSource 或 sendBeacon 调用。 The source in entrypoints/, components/, composables/ and utils/ contains no fetch, XMLHttpRequest, WebSocket, EventSource or sendBeacon call.
  • 关掉 Wi-Fi 再转一个文件:行为完全一致,因为本来就无需网络。 Turn off Wi-Fi and convert a file: behaviour is identical, because none is required.
  • 历史面板可导出 JSON,看到存的就是文件名、格式与体积——没有内容字段。 Export history as JSON and read it: names, formats and sizes only — there is no content field.
数据存在哪、会不会传输。 What is kept, where it lives, and whether it is transmitted.
数据Data 存放位置Where it lives 是否传输Transmitted?
你的文件Your files 仅转换期间存在于此标签页内存Memory of the extension tab, only while converting 从不Never
历史(名称、格式、体积)History (names, formats, sizes) chrome.storage.local 从不Never
偏好(主题、语言、快捷键)Preferences (theme, language, shortcuts) chrome.storage.local 从不Never
分析 / 遥测 / 广告Analytics / telemetry / ads 未实现Not implemented 不适用n/a
常见问题FAQ

使用前后你可能会问的 Questions people ask before and after installing

每一条都是展开即读的普通文本(不靠 JavaScript 注入),所以禁用脚本、屏幕阅读器与搜索引擎都能读到同样内容。 Every answer is plain markup that is already in the document — nothing is injected by JavaScript, so no-script readers, screen readers and search engines all read the same text.

安全与隐私Security & privacy

文件格式任意转换助手会把我的文件上传到服务器吗? Does Transfer Any File upload my files?
不会。所有转换器都是打包进扩展的 JavaScript,清单只声明 storage 权限且没有 host_permissions,entrypoints/、components/、composables/ 与 utils/ 下的第一方源码不存在 fetch、XMLHttpRequest、WebSocket、EventSource 或 sendBeacon 调用,CI 会在每次推送时重新校验这一断言。打包进来的第三方转换库保留了一些从不被调用的请求路径,但没有 host 权限时浏览器会直接拦下这些调用。没有可供上传的服务器,关闭网络也能正常使用。 No. Every converter is JavaScript bundled into the extension, the manifest declares only the storage permission with no host_permissions, and the first-party source in entrypoints/, components/, composables/ and utils/ contains no fetch, XMLHttpRequest, WebSocket, EventSource or sendBeacon call — CI re-checks that assertion on every push. Bundled third-party conversion libraries keep some request paths they never call, but with no host permission the browser blocks those calls outright. There is no server to upload to, and the extension works with networking disabled.
它只要求一项权限,为什么? Why does it ask for only one permission?
因为只需要这些。历史与偏好需要 storage;转换本身靠文件选择器与页面内的 File/Blob API 完成,不需要标签页访问、不需要后台脚本、也不需要任何主机权限。没用的权限一律不申请。 Because nothing else is needed. History and preferences need storage; conversion itself uses the file picker and the in-page File/Blob APIs, so it needs no tab access, no background scripts and no host permissions. Unused permissions are simply not requested.
历史记录里到底存了什么? What exactly does the history store?
最近 50 次成功转换的元数据:文件名、源格式、目标格式、体积与时间。不存文件内容,也不存转换结果。写入是尽力而为的:保存失败不会阻断转换流程;你可以搜索、筛选、复用,或导出 JSON 自行查看与删除。 Metadata for the last 50 successful conversions: file name, source format, target format, size and timestamp. No file contents and no results are stored. Writing history is best-effort — a storage failure never blocks a conversion. You can search, filter, reuse, or export it as JSON to read and delete it yourself.

格式与能力Formats & capability

它能转换哪些文件格式? Which file formats can it convert?
三大类共 14 种:文档(Markdown、HTML、Word .docx、PDF、TXT)、数据(CSV、Excel .xlsx、JSON)与图片(PNG、JPEG、WebP、BMP、GIF、SVG)。其中 11 种可写出;注册表里有 48 条直接路径,经广度优先搜索可到达 143 个组合,格式下拉实际提供 116 个——另外 27 个(图片→文本/数据、PDF→数据)会置灰并说明原因。上面的格式表逐行列出了每种源格式的可达与可选目标数。 Fourteen formats across three families: documents (Markdown, HTML, Word .docx, PDF, TXT), data (CSV, Excel .xlsx, JSON) and images (PNG, JPEG, WebP, BMP, GIF, SVG). Eleven of them can be written; the registry holds 48 direct routes and BFS over that graph makes 143 combinations reachable. The picker offers 116 of them — the other 27 (image→text/data and PDF→data) are greyed out with a reason. The format table above lists the reachable and selectable counts for every source format row by row.
为什么 Markdown 转 PDF 会显示两步? Why does Markdown to PDF show two steps?
因为不存在 Markdown 直达 PDF 的转换器。每种转换是图上的一条边,工作台用广度优先搜索求最短链路并逐步执行,所以 Markdown → PDF 实际按 Markdown → HTML → PDF 两步完成。路径会显示在选择框下方,不需要你手工串联;经过新格式的路径会自动被发现,无需改代码。这条链路上的图片要单独说:文档引用的网络图片与相对路径图片,离线转换取不到它们的字节,结果里那些位置会留空或以虚线方框标出,结果卡片按张数说明有多少处;要让图片一起转出,请先把它内嵌为 data URI。 Because there is no Markdown-to-PDF converter. Each conversion is an edge in a graph, and the workbench finds the shortest chain with breadth-first search and runs it step by step, so Markdown → PDF executes as Markdown → HTML → PDF. The route is printed under the picker; you never chain it by hand, and routes through a newly added format are discovered automatically without code changes. The pictures on this route are a separate case: an image the document references over the network or by a path next to the file has no bytes an offline conversion can reach, so those positions come out empty or marked with an outlined box, and the result card counts how many positions were affected. Embed the image as a data URI if it has to come through.
能把 PDF 转成可编辑的 Word 吗? Can it convert a PDF into an editable Word document?
不能无损。PDF 输入只提取文本,排版与内嵌图片不保留;反过来,PDF 输出是逐页渲染的图片,不含文字层。Word 与 Excel 都以 HTML 作为中心格式中转。如果你需要保留排版的 PDF 互转,请选用专业桌面工具或在线服务。 Not losslessly. PDF input extracts text only, dropping layout and embedded images; conversely PDF output is rendered page by page as images, so it carries no text layer. Word and Excel convert through HTML as the hub format. If you need layout-faithful PDF conversion, reach for a dedicated desktop tool or an online service.
为什么图片不能转成 TXT 或 CSV? Why can't I convert an image to text or CSV?
那需要 OCR。内置 OCR 模型会多出几十 MB 体量并引入模型下载,与离线承诺冲突,因此没做。这些目标在格式选择器里直接置灰并写明原因,而不是你点了转换才发现不行。 That requires OCR. Bundling an OCR model would add tens of megabytes and a model download, which conflicts with the offline guarantee, so it is not included. Those targets are greyed out in the format picker with the reason shown, rather than failing after you press Convert.
图片转成的 PDF 为什么还能复制出文字? Why can I copy text out of a PDF converted from an image?
那是 PDF 查看器做的,不是本扩展。转出的 PDF 是逐页位图,文件里既没有文字层也没有真实字符;部分查看器会在展示时自行识别图上的文字,所以你复制出的字符来自查看器,识别结果也不在这个文件里。本扩展不内置 OCR,既读不到也写不出这些字符,所以图片 → TXT / CSV 照旧置灰。 Because the viewer did it, not this extension. A PDF written here is a page image with no text layer and no real characters. Some viewers recognise the text on a page as they display it, so the characters you copied came from the viewer and are not stored in the file. No OCR is bundled, so this extension can neither read nor write them — which is why image → TXT / CSV stays greyed out.
多个不同格式的文件能一次转换吗? Can I convert several different formats in one run?
可以,一次最多 200 个文件。每个文件各自解析自己的转换路径并逐步执行,所以 Markdown、CSV 与 Excel 混在一起投进来、统一转成 HTML 是一条动作。目标格式下拉框只提供对批次内全部文件都可达的格式,因此不会出现选了之后一半文件转不了的组合。 Yes — up to 200 files in one run. Each file resolves and walks its own route step by step, so dropping Markdown, CSV and Excel together and converting them all to HTML is a single action. The target picker lists only formats reachable from every file in the batch, so you can never pick a target that half the batch cannot reach.
怎么把 Markdown 转成 Word?图片会跟过去吗? How do I convert Markdown to Word — and what happens to its images?
把 .md 投进工作台、目标选 Word,会按 Markdown → HTML → Word 两步走完,产出的文字在 Word 里可选中、可改写、可加批注。图片的命运取决于它在源文件里怎么写:以 data URI 内嵌的随文档一起打包;相对路径按相对保留,图片文件要和 .docx 放在同一目录 Word 才显示得出来;指向 http(s) 的外链图片在打包前被剥掉——Word 打开你的文件时不该替你发起网络请求。每条链路各自保留了什么、丢掉了什么,单独写在 Markdown 转 Word 那一页。 Drop the .md in and pick Word: the route runs Markdown → HTML → Word in two steps, and the text lands as real Word paragraphs you can select, rewrite and comment on. What happens to an image depends on how it is written in the source — a data URI travels inside the document, a relative path stays relative (so the image files must sit next to the .docx for Word to show them), and an http(s) image is stripped before packing, because Word must not issue a network request while opening your file. What each route keeps and drops is spelled out on its own page, here Markdown to Word.
Word 转 Markdown 会保留图片吗? Does Word to Markdown keep the images?
保留,但以 data URI 的形式写进 .md,文件因此明显变大——要提交进 Git 的话,建议转完再把图片外链化。搬过来的是内容与层级:标题、列表、加粗与斜体、链接、表格单元格;Markdown 表达不了的东西不会过来,包括页眉页脚、批注、修订记录、目录域、分栏与文本框,表格的合并信息也不保留。老式 .doc(97-2003 二进制)不在支持的 14 种格式里,先在 Word 里另存为 .docx。细节见 Word 转 Markdown。 Yes, but written into the .md as data URIs, which makes the file noticeably heavier — externalise the images again before committing to a repository. What crosses over is content and hierarchy: headings, lists, emphasis, links and table cells. Whatever Markdown cannot express stays behind, so headers and footers, comments, tracked changes, table-of-contents fields, columns and text boxes do not come, and table merges do not either. Legacy .doc (97-2003 binary) is outside the 14 supported formats, so save it as .docx first. Details on the Word to Markdown page.
Excel 转 CSV 会不会把 00123 变成 123、把日期变成 45296? Will Excel to CSV turn 00123 into 123, or a date into 45296?
既不会输出显示文本,也不会输出序列号。单元格按存储值序列化,所以格式化成 "1,234.50" 的那个仍然写 1234.5、按百分比显示的 0.25 仍然写 0.25;日期在读取期统一成 yyyy-mm-dd hh:mm:ss(只含日期的落成 YYYY-MM-DD),不受所在时区影响——这就是 45296 这类日序列不会出现在结果里的原因。以 = + - @ 或制表符开头的文本会加转义,Excel 重新打开时不会把它当公式执行。多个工作表给出每表一份 CSV、一起装进 ZIP。见 Excel 转 CSV。 Neither. Cells serialise from the stored value, so a cell formatted "1,234.50" still writes 1234.5 and a percentage-displayed 0.25 still writes 0.25. Dates are normalised while reading, to yyyy-mm-dd hh:mm:ss (a date-only cell lands as YYYY-MM-DD), independent of your timezone — which is why a day serial like 45296 never reaches the artifact. Text beginning with = + - @ or a tab is escaped, so Excel cannot re-execute it as a formula on open. A multi-sheet workbook yields one CSV per sheet inside a ZIP. See Excel to CSV.
能把多张图片合成一份 PDF 吗? Can several images become one PDF?
能,勾选「合并为一份 PDF」即可。整批都是 PNG / JPEG / WebP / BMP / GIF 且目标为 PDF 时,目标选择器下方会出现这个开关;勾上之后整批按列表顺序写成一份 PDF,每张一页(最多 200 页),文件名带 -merged;不勾选仍是每张一份 PDF,与以前完全一样。任一张解码失败时整批都不产出,失败清单会点名是哪个文件。细节见 PNG 转 PDF。 Yes — tick “Merge into one PDF”. The box appears when every file is a PNG / JPEG / WebP / BMP / GIF and the target is PDF; the whole batch then becomes one PDF, one page per image in list order (up to 200 pages), named with a -merged suffix. Left unticked you still get one PDF per image, exactly as before. If any image fails to decode, nothing is produced and the failure list names the file. Details on the PNG to PDF page.

使用与限制Usage & limits

单文件与批次的大小上限是多少? What are the file size and batch limits?
单文件最大 100 MB(超过 20 MB 时界面会提醒可能较慢),单批最多 200 个文件。超过 5 个文件或总计 20 MB 时,会先弹一次确认;这个开关可在偏好设置里关掉。 A single file up to 100 MB is accepted (the UI warns above 20 MB), and a batch is capped at 200 files. Batches larger than 5 files or 20 MB in total ask for confirmation first, and you can switch that prompt off in Preferences.
多个工作表的 Excel 转 CSV 会怎样? What happens when a multi-sheet Excel file becomes CSV?
CSV 只能装一个表,所以每个工作表各出一个 CSV,结果以 ZIP 交付。同理,多页 PDF 转图片时逐页出图并打包 ZIP;GIF 取首帧,SVG 会先被展平再栅格化。 CSV holds one sheet, so each worksheet becomes its own CSV and the result arrives as a ZIP. For the same reason a multi-page PDF turned into images yields one file per page inside a ZIP; a GIF uses its first frame, and an SVG is flattened before rasterising.
为什么某个文件转换失败,整批却没停? Why did one file fail without stopping the batch?
故意的。每个文件独立解析路径并执行,失败不传播;失败清单会逐文件列出原因,已成功的文件照常可预览与下载。长批次中途可取消,已完成的保留,最近一轮结果还能撤销。 On purpose. Each file resolves and runs its own path in isolation, so a failure never propagates; failures are listed per file with reasons while successful files stay previewable and downloadable. A long batch can be cancelled midway, finished results are kept, and the most recent result can be undone.
中文 CSV 在 Excel 里打开乱码吗? Does a Chinese CSV open correctly in Excel?
两个方向都处理了:读取时先认出 UTF-16(包括 Excel「Unicode 文本」那种没写 BOM 的),再试 UTF-8,失败依次回退 GB18030 与 GBK(GB18030 覆盖 GBK 表示不了的字符,GBK 兜住两者唯一 分歧的那一个字节),所以国内系统导出的表格能正常读入;写出时带 BOM,所以转出的 CSV 双击进 Excel 不会变方块。 Both directions are handled: reading recognises UTF-16 first, including the BOM-less "Unicode Text" variant Excel writes, then tries UTF-8 and falls back to GB18030 and GBK in order — GB18030 covers characters GBK cannot represent, while GBK stays last for the single byte the two disagree on — so exports from domestic Chinese software open correctly; writing emits a BOM, so a converted CSV opens in Excel without mojibake.
能把图片压到指定体积,或者保存常用的转换组合吗? Can I shrink an image to a target size, or save a conversion setup for reuse?
都能。目标为 PNG / JPEG / WebP 时会多出输出参数:质量 40–90%、最长边 800–4096 px、目标体积 20 KB–2 MB(质量与目标体积仅 JPEG / WebP,后者靠质量阶梯反复编码逼近),批次里有 PDF 时还能选 96–300 DPI。每一项默认「不动」,此时就是浏览器的默认编码行为。调好的「目标格式 + 参数」可以存成最多 12 个命名预设,一键恢复;预设不绑定源格式,所以同一张「1280 px 的 PNG」对来自 PDF、HTML 或 SVG 的批次都成立。参数与预设只写在扩展的本地存储里,不产生任何网络请求。 Both. A PNG / JPEG / WebP target gains output parameters: quality 40–90%, longest edge 800–4096 px, and a target size of 20 KB–2 MB (quality and target size are JPEG and WebP only, the size met by walking a quality ladder), plus 96–300 DPI when a PDF is in the batch. Every knob starts untouched, which is the browser's default encoding behaviour. A tuned format-and-parameters pair can be saved as one of up to 12 named presets and restored in one click; a preset is not bound to a source format, so the same "PNG at 1280 px" chip works for a batch arriving from PDF, HTML or SVG. Parameters and presets live in the extension's local storage and issue no network request.

安装与兼容Install & compatibility

怎么安装?商店里有吗? How do I install it — is it on the Store?
有。条目已上线 Chrome 应用商店,点一次装好即为稳定版,之后自动跟随更新,不需要开启开发者模式。另一条路是源码构建:用 Node.js 20.12+ 与 pnpm 执行 pnpm install 和 pnpm build,然后打开 chrome://extensions、开启开发者模式、点「加载未打包的扩展」并选择 .output/chrome-mv3。两种方式都是点击工具栏图标即在新标签页打开工作台。 It is on the Store: the listing gives you the stable build and its updates, with no Developer mode needed. The other route is a source build — Node.js 20.12 or later plus pnpm: run pnpm install then pnpm build, open chrome://extensions, enable Developer mode, click Load unpacked and select the .output/chrome-mv3 folder. Either way, clicking the toolbar icon opens the workbench in a new tab.
它在 Edge / Firefox 上能跑吗? Does it work in Edge or Firefox?
构建目标是 Chrome Manifest V3,所以在 Chrome 与其他 Chromium 浏览器(如 Edge)上可跑。Firefox 目前不是支持目标——尽管除了标准的 storage 与 action 之外,扩展并未使用 Chrome 专有 API。 The build targets Chrome Manifest V3, so it runs in Chrome and other Chromium browsers such as Edge. Firefox is not a supported target today, although beyond the standard storage and action APIs the extension uses no Chrome-only ones.
手机上能用吗? Can I use it on mobile?
不能。Chrome 在 Android 上不支持扩展,iOS 上的 Chrome 也只支持少数几种。它也不提供网页版——网页版意味着文件要上传,而那就是这个项目存在的理由本身。 No. Chrome on Android does not support extensions, and Chrome on iOS supports only a handful. There is no web version either — a web version would mean uploading files, which is precisely what this project exists to avoid.
我能要求加一种格式吗? Can I ask for a new format?
可以,开 issue 提需求即可。新增一个转换器就是一个实现 Converter 接口的模块(from / to / convert(blob),重型依赖内部动态引入);只要浏览器能解码,它就能进入图,所有经过它的新链路会自动由 BFS 发现。若涉及新的输入格式,还需扩展枚举、格式元数据、后缀与 MIME 映射,并补中英双语文案。 Yes — open an issue. Adding a converter means one module implementing the Converter interface (from / to / convert(blob), with heavy dependencies dynamically imported); as long as a browser can decode it, it joins the graph and every new route through it is discovered by BFS automatically. A genuinely new input format also extends the enum, the format metadata, the extension and MIME maps, plus the Chinese and English copy.
它免费吗?有没有付费版? Is it free, and is there a paid version?
免费,而且没有付费版。项目以 MIT 协议开源,没有账号、没有订阅、没有广告,也没有任何被锁在付费墙之后的功能。它同样没有可以上报使用量的代码路径——第一方源码中不存在任何网络调用。 It is free, with no paid tier. The project is open source under the MIT licence: no account, no subscription, no advertising, and no feature gated behind anything. There is also no code path that could report usage — first-party source contains no network call at all.
技术细节Technical details

它是怎么构建与验证的 How it is built and verified

技术栈Built with

WXT · Vue 3 · TypeScript · Element Plus · Vite。重型转换库(marked、turndown、mammoth、pdf.js、SheetJS、jsPDF、html-to-image、DOMPurify)按转换器动态引入,打包用的 fflate 也一样在真正要用的那一刻才加载,首屏不背着它;Element Plus 按需引入,不整包导入。 WXT · Vue 3 · TypeScript · Element Plus · Vite. Heavy conversion libraries (marked, turndown, mammoth, pdf.js, SheetJS, jsPDF, html-to-image, DOMPurify) are dynamically imported per converter, and the ZIP packer (fflate) loads the same way at the call site that needs it rather than with the workbench, so the first paint stays small; Element Plus is tree-shaken rather than imported whole.

运行要求Requirements

Google Chrome 88 及以上,或任何支持 Manifest V3 的 Chromium 浏览器(含 Edge)。从源码构建需 Node.js ≥ 20.12 与 pnpm。 Google Chrome 88 or later, or any Chromium browser that supports Manifest V3 (Edge included). Building from source needs Node.js ≥ 20.12 and pnpm.

测试覆盖Verified by tests

一套 Playwright 端到端套件加载真正的构建产物,用仓库内的夹具跑完各类转换场景、批量与 ZIP、取消与改键、预览与编辑、图片输出参数与转换预设、PDF 选页、输出文件名模板、历史与偏好,共 504 项断言全部通过(1.9.1 构建,2026-11-03 实测);另在 6 主题 × 浅/深共 12 种组合下逐项校验五组对比度:主按钮文字(常态 / 悬停 / 按下)、焦点环、正文信息文字,以及 Element Plus 浅色效果的警示框与格式标签。顶栏品牌字除晴空蓝外均达标;晴空蓝按另外两个扩展的同款白字配色 呈现(2.78:1),作为已知限制单列,断言为其钉了下限。CI 每次推送跑 lint + build + e2e。 A Playwright end-to-end suite drives the actual build output over the repository fixtures — every conversion scenario, batching and ZIP handling, cancellation and shortcut rebinding, preview and editing, image output parameters and conversion presets, PDF page selection, output file-name patterns, history and preferences — with 504/504 assertions passing (the 1.9.1 build, measured 2026-11-03). It also checks five contrast pairs — the primary button's label in its rest, hover and pressed states, the focus ring, informational text such as the drop hint and file sizes, and the ink Element Plus paints on its light-effect alerts and per-file format tags — in all 12 theme × light/dark combinations. Topbar brand text clears the threshold in 11 of them; light sky blue carries the sibling extensions' white pairing (2.78:1) and is listed as a known limitation with its own pinned floor. CI runs lint, build and e2e on every push.

不可信输入的处理Untrusted input handling

上传文件、剪贴板内容、ZIP 条目与存储数据均视为不可信输入:边界处校验类型、格式与体积;任何由用户文件生成的 HTML、SVG 与 Markdown 在渲染前都经 DOMPurify 净化,预览跑在沙箱化环境里。 Uploaded files, clipboard content, ZIP entries and stored data are all treated as untrusted: type, format and size are validated at the boundary, every HTML, SVG and Markdown produced from a user file is sanitised with DOMPurify before rendering, and previews run sandboxed.

版本 1.9.1 · 本页最后更新 2026-11-03。文中全部数字从代码取证:14 种格式来自 FileFormat 枚举,48 条路径与 143 个可达组合来自转换器注册表的邻接图,116 个可选组合是 143 减去 utils/core/conversion-policy.ts 置灰的 27 个,3.90 MB 来自 pnpm build 输出,权限与上限来自 manifest 与源码常量。截图与推广图由 pnpm assets:capture 从构建产物生成;docs/convert/ 的 116 张配对页、14 张来源格式页与 1 个索引页由 pnpm pages:render 生成,与 docs/sitemap.xml 同步;本页上方那张文件对比是 tools/file-diff.html 的逐字节副本,由同一条命令发布到 docs/diff/。 Version 1.9.1 · page last updated 2026-11-03. Every number on this page is taken from the code: 14 formats from the FileFormat enum, 48 routes and 143 reachable combinations from the converter registry's adjacency graph, and 116 selectable combinations — that is 143 minus the 27 pairs utils/core/conversion-policy.ts greys out. 3.90 MB comes from pnpm build output, permissions and limits from the manifest and source constants. Screenshots are generated from the built bundle by pnpm assets:capture, and the per-pair pages — 116 of them, plus 14 source-format hub pages and an index — come from pnpm pages:render, which writes the sitemap they are listed in. The file-diff page above is a byte-for-byte copy of tools/file-diff.html, published to docs/diff/ by that same command.

同作者工具More by the author

同一位作者的另外两个本地优先扩展 Two more local-first extensions by the same author

三个扩展遵循同一套原则:开源、离线、数据不出本机。各自的产品页有演示与安装说明。 All three share the same principles: open source, offline, data stays on your machine. Each product page carries its own demo and install instructions.

账号密码管理助手Account Password Helper 主推Featured

为开发者与测试人员量身打造的 Chrome 密码管理扩展:按下 Ctrl+Shift+F 一键登录(填充+勾选+点击),精确域名匹配隔离 dev/test/staging/prod 多环境账号;内置 TOTP 两步验证、安全体检与密码生成器,所有数据本地 AES-256-GCM 加密,永远不离开你的电脑。 A Chrome password manager built for developers and testers: press Ctrl+Shift+F for one-click login (fill + check + submit), exact domain matching isolates dev/test/staging/prod accounts; TOTP two-factor, a security audit and a password generator are built in — all data encrypted locally with AES-256-GCM, never leaving your computer.

跨域代理助手Cross-origin Proxy

一款开源 Chrome 扩展(Manifest V3),把页面发出的 API 请求代理到另一个后端环境。重写 URL、请求头与响应,条件化 Mock、注入延迟、阻断请求、失败重试、转发 WebSocket——全部在浏览器里配置,数据只存在你的电脑上。 An open-source Chrome extension (Manifest V3) that proxies a page's API requests to another backend environment. Rewrite URLs, headers and responses, mock conditionally, inject delays, block requests, retry failures and forward WebSocket — all configured in the browser, with data stored only on your computer.

联系Contact

报问题、提格式、进交流群 Report a bug, request a format, join the group

四个渠道都通到同一个人。Issue 优先——群里得到的结论会回填到可检索的地方。 All four reach the same person. Issues first — whatever a chat concludes gets written back somewhere searchable.

  • 微信WeChat :lld_1025,备注「taf」(英文名 Transfer Any File 的首字母)。问题反馈、格式需求、新版本试用都在群里。 : lld_1025, with the note "taf" (the initials of Transfer Any File). Bugs, format requests and pre-release testing all go through the group.
  • 邮箱Email :924902324@qq.com,与商店列表公开的联系邮箱是同一个地址。 : 924902324@qq.com — the same address published on the store listing.
  • IssueIssues :缺陷与格式需求,可检索,也最不容易被漏掉。 : Bugs & format requests, searchable and the least likely to be lost.
  • 关于扫码About scanning :页面底部那张码是添加个人微信的二维码,不是群码,所以不存在群码 7 天过期那一说。安全漏洞请走私密渠道,不要开公开 Issue。 : the code at the bottom of this page adds the author personally rather than a group chat, so it does not expire after seven days the way group codes do. Security issues go through a private channel, never a public issue.