
Research
/Security News
737 Chrome VPN Extensions Linked to Brand Impersonation and Browser Traffic Redirection
The campaign amassed more than 75,000 installs by targeting Russian-speaking users seeking access to blocked services.
@file-viewer/doc
Advanced tools
Browser-native legacy MS-DOC (.doc) parser and HTML renderer extracted from the public msdoc-viewer 0.2.0 line.
一个面向 MS-DOC(.doc 二进制 Word) 的 TypeScript 严格类型 解析与预览库。它把旧版 Word 文档解析为结构化 AST,再渲染为可直接嵌入任意项目的 HTML + CSS,同时提供 DOM Viewer 与 Web Worker 通道。
本项目处理的是
.doc,不是.docx。 本包基于 npm 已公开的msdoc-viewer@0.2.0旧版源码维护,不包含新版私有文档引擎实现。
strict 模式dist/*.d.ts,便于社区阅读、联想、二次开发已经覆盖的主要能力:
FibBase / FibRgLw / FibRgFcLcb)解析sprmTDefTable、单元格宽度、横向/纵向合并、边框、垂直对齐、nowrap、fitTextsrc/
core/
binary.ts # 二进制读取器
cfb.ts # CFB/OLE 容器解析
inflate.ts # OfficeArt 压缩 metafile 的 zlib/deflate 解压
utils.ts # 字节、编码、范围等底层工具
msdoc/
fib.ts # FIB 读取
clx.ts # CLX / Piece Table
fkp.ts # FKP 页读取
sprm.ts # SPRM 操作数解码
properties.ts # PAPX / CHPX / TAPX 到状态对象的归并
styles.ts # STSH / 样式继承
fonts.ts # 字体表
officeart.ts # OfficeArt 内联 shape / BLIP 辅助解析
objects.ts # PICF / OfficeArt 图片与 OLE / ObjectPool
vector.ts # EMF/WMF 转 SVG
parser.ts # 主解析流程,输出 AST
render/
html.ts # AST -> HTML/CSS
types.ts # 完整类型声明与公共接口
viewer.ts # DOM Viewer
worker-client.ts # Worker 客户端
worker.ts # Worker 入口
index.ts # 公共导出
demo/
index.html
test/
smoke.mjs
npm install @file-viewer/doc
历史 msdoc-viewer 包名会通过兼容别名继续导出同一套 API。
pnpm install
pnpm --filter @file-viewer/doc type-check
pnpm --filter @file-viewer/doc build
pnpm --filter @file-viewer/doc verify:github-34
构建产物输出到 dist/:
dist/index.jsdist/index.d.tsdist/worker.jsimport { parseMsDoc, renderMsDoc } from '@file-viewer/doc';
const buffer = await file.arrayBuffer();
const parsed = parseMsDoc(buffer);
const rendered = renderMsDoc(parsed);
document.getElementById('app')!.innerHTML = `
<style>${rendered.css}</style>
<div class="msdoc-root">${rendered.html}</div>
`;
import { createMsDocViewer } from '@file-viewer/doc';
const container = document.getElementById('app')!;
const viewer = createMsDocViewer(container);
await viewer.load(file);
import { createMsDocViewer, MsDocWorkerClient } from '@file-viewer/doc';
const workerClient = MsDocWorkerClient.create(
new URL('./node_modules/@file-viewer/doc/dist/worker.js', import.meta.url)
);
const viewer = createMsDocViewer(document.getElementById('app')!, {
workerClient,
});
await viewer.load(file);
parseMsDoc(input, options?)把 .doc 解析成结构化结果:
import type { MsDocParseResult } from '@file-viewer/doc';
核心字段:
warnings: 解析期告警meta: 文档元数据与统计fonts: 字体表摘要styles: 样式表摘要blocks: 结构化块级 AST(段落、表格、附件)assets: 图片 / 附件资产renderMsDoc(parsed, options?)把 AST 渲染为:
htmlcsswarningsmetaassetsparsedparseMsDocToHtml(input, options?)一步完成解析与渲染。
createMsDocViewer(container, config?)返回一个面向浏览器的 viewer:
load(input, options?)mount(rendered)clear()destroy()valueMsDocWorkerClient为 Worker 提供强类型 RPC 包装:
parse(input, options?)render(parsed, options?)parseToHtml(input, options?)destroy()所有公共类型都从根入口导出,例如:
import type {
MsDocParseResult,
MsDocRenderResult,
MsDocBlock,
ParagraphBlock,
TableBlock,
MsDocAsset,
MsDocParseOptions,
MsDocRenderOptions,
MsDocViewer,
} from '@file-viewer/doc';
这意味着:
AST 与 asset 数据自行渲染这次重构的重点不只是把文件后缀改成 .ts,而是把整条主链路都显式类型化:
同时给关键模块补充了注释,尤其是:
BinaryReader 的边界读取行为npm run smoke
这个命令会:
test/test.doctest/rendered-sample.html如果你要手工打开 demo:
npm run build
# 然后用任意静态服务器打开 demo/index.html
MS-DOC 是历史包袱很重的二进制格式,虽然主链路已经完整重构,但以下场景仍建议用更多真实样本持续压测:
这些场景并不影响当前的整体架构,后续继续扩展时可直接在现有 TS 类型体系上增量补强。
MIT
FAQs
Browser-native legacy MS-DOC (.doc) parser and HTML renderer extracted from the public msdoc-viewer 0.2.0 line.
The npm package @file-viewer/doc receives a total of 7,015 weekly downloads. As such, @file-viewer/doc popularity was classified as popular.
We found that @file-viewer/doc demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
/Security News
The campaign amassed more than 75,000 installs by targeting Russian-speaking users seeking access to blocked services.

Company News
Open source maintainers are under more pressure than ever. We're raising our open source program from the Team plan to the Business plan, free.

Security News
The supply chain control that delays freshly published gems now covers lockfile generation and gem vendoring in Ruby projects.