はじめる
インストールから、最初のページをアプリに表示するまで。たいていは5分ほどで終わります。
1. 使い方を選ぶ
全部入れる必要はありません。どこから呼び出したいかで、ひとつ選んでください。
npm はプロジェクトの node_modules に、pip は使っている環境の site-packages に入ります。cargo install なら docsvg が ~/.cargo/bin に入ります。
コマンドで使う
ターミナルやCIでファイルを変換したいとき。Rust があれば cargo で入ります。なければ、リリースページから自分のOS用のファイルをダウンロードできます。
cargo install document-svg --lockedNode.js / TypeScript
WebアプリやElectronアプリの中で変換したいとき。型定義も入っています。
npm install document-svgPython
スクリプトやデータ処理の中で変換したいとき。Python 3.10 以降で使えます。
python -m pip install document-svgRust
Rust のプログラムに組み込みたいとき。
cargo add document-svgnpm のパッケージページ →PyPI のパッケージページ →crates.io のページ →Rust の API リファレンス(docs.rs) →ビルド済みのコマンドをダウンロード(リリース) →
2. 最初のファイルを変換する
同じ変換を、どこからでも同じように呼べます。どの例も、書いてあるとおりに動きます。
ファイルをSVGのページに変換するbash
docsvg report.pdf --output output/report
docsvg slides.pptx --output output/slides
docsvg architecture.drawio --output output/diagram --stencils path/to/stencils.xmlPDFのページを並列変換するbash
docsvg report.pdf --output output/report --jobs 4 --max-pages 100SVGのページを PowerPoint や Word などのファイルに戻すbash
docsvg reverse output/slides --output slides.pptx
docsvg reverse output/diagram --output diagram.drawio
docsvg reverse output/drawing --output drawing.dxf手元のSVGを、使う場所に合わせて整えるbash
docsvg transform diagram.svg --output diagram.min.svg \
--minify --monochrome "#1e293b" --responsive --precision 1変換してSVGファイルを保存するjavascript
const { convert } = require('document-svg')
const report = await convert('report.docx', 'output/report', { maxPages: 100 })
const needsReview = report.warnings.length > 0 ||
report.pages.some((page) => page.warnings.length > 0)
console.log(report.pageCount, needsReview)アプリ内プレビュー用に完全なSVG文字列を取得するtypescript
import { preview } from 'document-svg'
const report = await preview('slides.pptx', { maxPages: 100 })
for (const page of report.pages) {
console.log(page.number, page.widthPoints, page.heightPoints)
// page.svg is the complete SVG XML string
}
console.log('review required:', report.needsReview)ネイティブコードを読み込まずブラウザで表示するtsx
import { createSvgPreviewUrl, revokeSvgPreviewUrl } from 'document-svg/preview-ui'
const url = createSvgPreviewUrl(svgMarkup)
// <img src={url} alt="Office document preview" />
// when replacing the image or disposing of the view:
revokeSvgPreviewUrl(url)SVGのページを PowerPoint や Word などのファイルに戻すjavascript
const { reverse } = require('document-svg')
const report = await reverse('output/diagram', 'diagram.drawio')
console.log(report.pageCount, report.warnings)ファイルをSVGのページに変換するpython
from document_svg import convert
report = convert("input.pptx", "output/pptx", jobs=1, max_pages=500)
needs_review = bool(report["warnings"]) or any(
page["warnings"] for page in report["pages"]
)
print(report["page_count"], needs_review)SVGのページを PowerPoint や Word などのファイルに戻すpython
from document_svg import reverse
report = reverse("output/slides", "slides.pptx")
print(report["page_count"], report["warnings"])ファイルをSVGのページに変換するrust
use document_svg::{convert_path, ConvertOptions};
let options = ConvertOptions { jobs: 4, max_pages: 500, ..ConvertOptions::default() };
let report = convert_path("input.pdf", "output/pdf", &options)?;
println!("{} pages", report.page_count);自作の図形やテキストからSVGページを組み立てるrust
use document_svg::ir::{IDENTITY, Node, Page, Paint, Stroke};
use document_svg::svg::write_page;
let mut page = Page::new(1, 320.0, 180.0, "custom");
page.nodes.push(Node::Path {
id: "card".into(),
d: "M 20 20 H 300 V 160 H 20 Z".into(),
fill_rule: "nonzero".into(),
fill: Paint::solid("#E8F1FF"),
stroke: Stroke { paint: Paint::solid("#246BCE"), width: 2.0, ..Stroke::default() },
transform: IDENTITY,
clip_id: None,
meta: Default::default(),
});
write_page(&mut std::fs::File::create("out.svg")?, &page)?;SVGのページを PowerPoint や Word などのファイルに戻すrust
use document_svg::{svg_to_document, ReverseOptions};
let report = svg_to_document("output/slides", "slides.pptx", &ReverseOptions::default())?;
println!("{} pages", report.page_count);3. 結果を確かめる
出力先には、新しいフォルダか空のフォルダを指定します。中には、ページごとのSVGと、変換の記録(conversion.json)が1つできます。
output/slides/
├── page-0001.svg
├── page-0002.svg
└── conversion.json- 記録には、そのまま再現できなかった部分が「警告」として書かれます。
- エラーなく終わっても、完璧とは限りません。警告があれば、人の目でページを確かめてください。
- 警告がなくても、Office で開いたときと1ピクセル単位で同じとは限りません。たとえば文字は、SVGを表示する環境にあるフォントで描かれます。
4. アプリに表示する
SVGは画像として表示してください(img 要素など)。SVGの中身を、ページのHTMLに直接貼り込むのは避けてください。
付属の表示用ヘルパーは簡単な確認はしますが、どんなSVGでも無害にするフィルターではありません。
5. いつもの道具から使う
GitHub Actions
プルリクエストで変わった文書を、自動で変換します。
Claude Code / Codex
AIアシスタントに、プラグインとして追加します。
GitHub CLI
リポジトリを手元に置いてインストーラーを実行すると、gh docsvg コマンドとして使えます。
6. うまくいかないとき
- Windows、macOS、Linux の x64 と ARM64 向けに、ビルド済みのパッケージを用意しています。
- Alpine Linux の Python にはビルド済みのパッケージがないので、Rust と開発ツールが必要です。
- npm で入れたのに読み込めないときは、オプションの依存パッケージが入っているか、Node.js とマシンのCPUの種類が合っているかを確かめてください。node_modules を別のOSにコピーしても動きません。
- 変換したSVGは、最近のブラウザ、resvg、librsvg 2.46 以降で表示できます。