開発者リファレンス
すべての関数とオプション、戻ってくるもの、Webページでの表示方法をまとめました。例はそのまま動くように書いています。
どれを使えばいい?
どれも、あなたのマシンの、あなたのプロセスの中で動きます。Node.js 版は裏のスレッドで変換するので、イベントループは止まりません。Python 版は変換中に GIL を手放します。サーバーもアカウントも通信も要りません。
| やりたいこと | 使うもの |
|---|---|
| ターミナルやスクリプト、CIでファイルを変換する | docsvg |
| Webアプリや Electron アプリで、アップロードされた文書を見せる | Node.js preview() + document-svg/preview-ui |
| Python から変換する(スクリプト、ノートブック、Web API) | Python preview() / convert() |
| Rust のプログラムに組み込む | convert_path() / convert_bytes() |
| ブラウザの中だけで変換する(PDF、Word、Excel、PowerPoint) | <docsvg-viewer> (WebAssembly) |
コマンド:docsvg
形式はファイルの拡張子で決まります。拡張子がないときや汎用的なときは、ファイルの先頭の内容も見て判断します。成功すると終了コード0、失敗すると1で終わり、理由を標準エラーに出します。
docsvg <INPUT> --output <FOLDER> [options]
docsvg reverse <SVG or FOLDER> --output <FILE>
docsvg transform <SVG or -> --output <SVG or -> [options]変換:docsvg <INPUT> --output <FOLDER>
| オプション | 既定値 | 意味 |
|---|---|---|
-o, --output DIR | 必須 | ページと conversion.json を書き出す、新しいフォルダか空のフォルダ。 |
--jobs N | 1 | PDFを何ページ同時に変換するか。ほかの形式は1ページずつ変換します。 |
--max-input-mib N | 512 MiB | 受け付ける入力ファイルの大きさの上限。 |
--max-entry-mib N | 128 MiB | PDFやZIP形式のファイル(Office、EPUB、3MF、CBZ)の中身を展開したとき、部品1つあたりに許す大きさ。 |
--max-pages N | 10,000 | 書き出すページ・スライド・シートの数の上限。 |
--max-xml-events N | 5,000,000 | 1つの部品で読むXMLの量の上限。巨大なXMLや悪意のあるXMLを止めます。 |
--no-metadata | メタデータあり | 各SVGに入る出所のメタデータを省きます。 |
--precision N | 5 | 座標に残す小数点以下の桁数。小さいほどファイルが小さくなります。 |
--outline-embedded-pdf-text | オフ | PDFの埋め込みフォントの文字を図形として描きます。見た目は元どおりになりますが、文字は選択できなくなります。フォントのライセンスで許されているか確かめてください。 |
--embed-drawio-source | オフ | draw.io の元データを各SVGに残し、あとで編集できる図に戻せるようにします。サイズはおよそ2倍になります。 |
--stencils PATH | なし | draw.io の図形ライブラリのファイルやフォルダ。指定しないと、ライブラリの図形はラベル付きの仮の形になります。 |
書き戻し:docsvg reverse
| オプション | 既定値 | 意味 |
|---|---|---|
-o, --output FILE | 必須 | 作るファイル。拡張子で形式が決まります(.pptx、.docx、.xlsx、.pdf、.drawio、.dxf、.gcode、.stl、.html、.webp など)。 |
--max-input-mib N | 512 MiB | 入力SVGの合計の大きさの上限。 |
--max-pages N | 10,000 | 読むSVGページ数の上限。 |
整形:docsvg transform
| オプション | 既定値 | 意味 |
|---|---|---|
--minify | オフ | コメントと余分な空白を取り除きます。 |
--monochrome COLOR | オフ | 塗りと線をすべて1色にします(例:"#1e293b")。 |
--responsive | オフ | 固定のサイズを外し、置いた場所の大きさに合わせて伸び縮みするようにします。 |
--precision N | なし | 座標を小数点以下N桁に丸めます。 |
--remove-metadata | オフ | <metadata>、<desc>、data-* 属性を取り除きます。 |
--clean-paths | オフ | パスのデータを整理します(長さ0の線分や重複した閉じを除く)。 |
--strip-empty-groups | オフ | 何も描かないグループを取り除きます。 |
変換で書き出されるもの
出力先は新しいフォルダか空のフォルダでなければいけません。既存のファイルを上書きすることはありません。conversion.json は変換全体の記録です。convert() や preview() の戻り値にも同じ項目が入ります(Node.js ではキャメルケースの名前になります)。
out/
├── page-0001.svg
├── page-0002.svg
└── conversion.json| 項目 | 意味 |
|---|---|
page_count | 書き出したページ数。 |
warnings | 文書全体で近似・省略したことの知らせ。空でも1ピクセル単位の一致は保証されません。 |
pages[].svg | ページのファイル名(convert)、またはSVGの中身そのもの(preview)。 |
pages[].width_points, height_points | ページの大きさ(ポイント単位、1pt = 1/72インチ)。 |
pages[].warnings | そのページだけの知らせ。 |
source_format | 判定された形式(pptx、pdf など)。 |
needs_review | preview() のみ:文書かどのページかに警告があれば true。 |
elapsed_ms, input_bytes, version | かかった時間、入力の大きさ、作ったバージョン。 |
Node.js
エラーは Promise の reject として届きます。Error のメッセージは問題の種類で始まります("invalid input"、"unsupported input"、"safety limit exceeded"、"I/O error")。
const { convert, preview, reverse, transform } = require('document-svg')
async function main() {
const result = await preview('slides.pptx', { maxPages: 50 })
console.log(result.pageCount, result.needsReview)
const firstPageSvg = result.pages[0].svg
const report = await convert('slides.pptx', 'out/slides', { jobs: 2 })
await reverse('out/slides', 'slides-copy.pptx')
const small = transform(firstPageSvg, { minify: true })
}
main().catch(console.error)| 関数 | 戻り値 | 意味 |
|---|---|---|
preview(file, options?) | Promise<PreviewReport> | 全ページをSVGの文字列でメモリ上に受け取ります。ディスクには何も残りません。 |
convert(file, folder, options?) | Promise<ConversionReport> | ページと conversion.json をフォルダに書き出します。 |
reverse(svgOrFolder, file, options?) | Promise<ReverseReport> | SVGのページを別の形式のファイルにまとめます。オプション:maxInputBytes、maxPages。 |
transform(svg, options?) | string | SVGの文字列を整えます(同期処理)。 |
preview() と convert() のオプション
| オプション | 既定値 | 意味 |
|---|---|---|
jobs | 1 | PDFを何ページ同時に変換するか。ほかの形式は1ページずつ変換します。 |
maxInputBytes | 512 MiB | 受け付ける入力ファイルの大きさの上限。 |
maxZipEntryBytes | 128 MiB | PDFやZIP形式のファイル(Office、EPUB、3MF、CBZ)の中身を展開したとき、部品1つあたりに許す大きさ。 |
maxPages | 10,000 | 書き出すページ・スライド・シートの数の上限。 |
maxXmlEvents | 5,000,000 | 1つの部品で読むXMLの量の上限。巨大なXMLや悪意のあるXMLを止めます。 |
includeMetadata: false | メタデータあり | 各SVGに入る出所のメタデータを省きます。 |
precision | 5 | 座標に残す小数点以下の桁数。小さいほどファイルが小さくなります。 |
outlineEmbeddedPdfText | オフ | PDFの埋め込みフォントの文字を図形として描きます。見た目は元どおりになりますが、文字は選択できなくなります。フォントのライセンスで許されているか確かめてください。 |
embedDrawioSource | オフ | draw.io の元データを各SVGに残し、あとで編集できる図に戻せるようにします。サイズはおよそ2倍になります。 |
stencilPaths | なし | draw.io の図形ライブラリのファイルやフォルダ。指定しないと、ライブラリの図形はラベル付きの仮の形になります。 |
maxSvgBytes | 64 MiB | preview() のみ:1ページ分のSVGの大きさの上限。 |
maxTotalSvgBytes | 256 MiB | preview() のみ:全ページのSVGの合計の上限。 |
transform() のオプション
| オプション | 既定値 | 意味 |
|---|---|---|
minify | オフ | コメントと余分な空白を取り除きます。 |
monochrome | オフ | 塗りと線をすべて1色にします(例:"#1e293b")。 |
responsive | オフ | 固定のサイズを外し、置いた場所の大きさに合わせて伸び縮みするようにします。 |
precision | なし | 座標を小数点以下N桁に丸めます。 |
removeMetadata | オフ | <metadata>、<desc>、data-* 属性を取り除きます。 |
cleanPaths | オフ | パスのデータを整理します(長さ0の線分や重複した閉じを除く)。 |
stripEmptyGroups | オフ | 何も描かないグループを取り除きます。 |
document-svg/preview-ui(ブラウザで動きます。ネイティブコードなし)
| 関数 | 戻り値 | 意味 |
|---|---|---|
createSvgPreviewUrl(svg) | string | <img> 用の Blob URL。先にSVGを確認します。 |
revokeSvgPreviewUrl(url) | void | 画像が不要になったら Blob URL を解放します。 |
createSvgPreviewDataUrl(svg) | string | 別のウィンドウやプロセスへ渡すための data: URL。 |
copySvgToClipboard(svg) | Promise<'image/svg+xml' | 'text/plain'> | 画像をコピーします。できない環境ではソースをコピーします。クリックから呼びます。 |
copySvgSourceToClipboard(svg) | Promise<void> | 常にSVGのソースを文字としてコピーします。 |
Python
インストールは document-svg、import は document_svg です。戻り値は conversion.json と同じ項目を持つ普通の辞書です。
from document_svg import convert, preview, reverse, transform
result = preview("report.docx", max_pages=50)
print(result["page_count"], result["needs_review"])
first_page_svg = result["pages"][0]["svg"]
report = convert("report.docx", "out/report", jobs=2)
reverse("out/report", "report-copy.docx")
small = transform(first_page_svg, minify=True)| 関数 | 戻り値 | 意味 |
|---|---|---|
preview(path, **options) | dict | 全ページをSVGの文字列でメモリ上に受け取ります。max_svg_bytes と max_total_svg_bytes も指定できます。 |
convert(path, folder, **options) | dict | ページと conversion.json をフォルダに書き出します。 |
reverse(svg_or_folder, path, *, max_input_bytes=None, max_pages=None) | dict | SVGのページを別の形式のファイルにまとめます。 |
transform(svg, **options) | str | bytes | SVGを整えます。str を渡せば str、bytes を渡せば bytes が戻ります。 |
preview() と convert() のオプション(キーワード引数)
| オプション | 既定値 | 意味 |
|---|---|---|
jobs | 1 | PDFを何ページ同時に変換するか。ほかの形式は1ページずつ変換します。 |
max_input_bytes | 512 MiB | 受け付ける入力ファイルの大きさの上限。 |
max_zip_entry_bytes | 128 MiB | PDFやZIP形式のファイル(Office、EPUB、3MF、CBZ)の中身を展開したとき、部品1つあたりに許す大きさ。 |
max_pages | 10,000 | 書き出すページ・スライド・シートの数の上限。 |
max_xml_events | 5,000,000 | 1つの部品で読むXMLの量の上限。巨大なXMLや悪意のあるXMLを止めます。 |
include_metadata=False | メタデータあり | 各SVGに入る出所のメタデータを省きます。 |
precision | 5 | 座標に残す小数点以下の桁数。小さいほどファイルが小さくなります。 |
outline_embedded_pdf_text | オフ | PDFの埋め込みフォントの文字を図形として描きます。見た目は元どおりになりますが、文字は選択できなくなります。フォントのライセンスで許されているか確かめてください。 |
embed_drawio_source | オフ | draw.io の元データを各SVGに残し、あとで編集できる図に戻せるようにします。サイズはおよそ2倍になります。 |
stencil_paths | なし | draw.io の図形ライブラリのファイルやフォルダ。指定しないと、ライブラリの図形はラベル付きの仮の形になります。 |
例外
| エラー | 起きるとき |
|---|---|
ValueError | 入力が不正か未対応、または安全上の上限に達したとき。 |
OSError | ファイルを読めない・書けないとき(出力フォルダが空でないときなど)。 |
RuntimeError | そのほか(PDF、ZIP、XMLの構造が壊れているときなど)。 |
Rust
公開APIは、クレートの直下(上の関数、そのオプションとレポートの型、Error)と ir・svg モジュールだけです。内部の読み込み処理はリリースごとに変わりえます。
use document_svg::{convert_path, ConvertOptions};
fn main() -> Result<(), document_svg::Error> {
let options = ConvertOptions { jobs: 2, ..ConvertOptions::default() };
let report = convert_path("report.pdf", "out/report", &options)?;
println!("{} pages, {} warnings", report.page_count, report.warnings.len());
Ok(())
}| 関数 | 戻り値 | 意味 |
|---|---|---|
convert_path(input, folder, &ConvertOptions) | Result<ConversionReport> | ファイルを変換し、ページと conversion.json を書き出します。 |
convert_bytes(name, &bytes, &ConvertOptions, ByteConvertLimits, on_page) | Result<ByteConversionReport> | 一時ファイルを使わずにメモリ上で変換します。できたページから順に SvgPage が on_page に渡されます。wasm32 でも動きます。 |
svg_to_document(input, output, &ReverseOptions) | Result<ReverseReport> | SVGのページを別の形式のファイルにまとめます(コマンドの reverse と同じ)。 |
transform_svg(&bytes, &TransformOptions) | Result<Vec<u8>> | SVGを整えます(コマンドの transform と同じ)。 |
ConvertOptions の項目
| オプション | 既定値 | 意味 |
|---|---|---|
jobs | 1 | PDFを何ページ同時に変換するか。ほかの形式は1ページずつ変換します。 |
max_input_bytes | 512 MiB | 受け付ける入力ファイルの大きさの上限。 |
max_zip_entry_bytes | 128 MiB | PDFやZIP形式のファイル(Office、EPUB、3MF、CBZ)の中身を展開したとき、部品1つあたりに許す大きさ。 |
max_pages | 10,000 | 書き出すページ・スライド・シートの数の上限。 |
max_xml_events | 5,000,000 | 1つの部品で読むXMLの量の上限。巨大なXMLや悪意のあるXMLを止めます。 |
include_metadata: false | メタデータあり | 各SVGに入る出所のメタデータを省きます。 |
precision | 5 | 座標に残す小数点以下の桁数。小さいほどファイルが小さくなります。 |
outline_embedded_pdf_text | オフ | PDFの埋め込みフォントの文字を図形として描きます。見た目は元どおりになりますが、文字は選択できなくなります。フォントのライセンスで許されているか確かめてください。 |
embed_drawio_source | オフ | draw.io の元データを各SVGに残し、あとで編集できる図に戻せるようにします。サイズはおよそ2倍になります。 |
stencil_paths | なし | draw.io の図形ライブラリのファイルやフォルダ。指定しないと、ライブラリの図形はラベル付きの仮の形になります。 |
Error の種類
| エラー | 起きるとき |
|---|---|
InvalidInput | 入力や引数が不正なとき(出力フォルダが空でないときなど)。 |
Unsupported | 形式を判定できないとき、または対応していない機能のとき。 |
LimitExceeded | 安全上の上限に達したとき。 |
Io, Pdf, Xml, Zip, Json | その層での読み込みや解析に失敗したとき。 |
Webページで表示する
できます。ページはふつうのSVG画像なので、どのブラウザでも表示できます。画面に出す方法は2つあります。
1. サーバーや Electron のメインプロセスで Node.js を使って変換し、SVGを画面に送り、preview-ui で表示します(Node.js の節とプレビューガイドを参照)。対応しているすべての形式で使えます。
2. WebAssembly 版でブラウザの中だけで変換し、用意された <docsvg-viewer> 要素で表示します。アップロードもサーバーも要りません。対象は PDF、Word、Excel、PowerPoint で、サムネイル、拡大縮小、幅・ページに合わせる、回転、全画面、文字検索、表示中のページの保存ができます。
<script type="module" src="/bindings/wasm/web/docsvg-viewer.js"></script>
<docsvg-viewer thumbnails></docsvg-viewer>
<script type="module">
const viewer = document.querySelector('docsvg-viewer')
viewer.options = { maxPages: 200 } // optional limits
fileInput.addEventListener('change', () => viewer.openFile(fileInput.files[0]))
</script><docsvg-viewer> の早見表
| 関数 | 意味 |
|---|---|
thumbnails | 属性:ページのサムネイルの列を表示します。 |
openFile(file) | メソッド:File を変換して表示します(ファイル選択やドラッグ&ドロップの File。要素自身もこれらを受け付けます)。 |
options | プロパティ:maxInputBytes(既定 64 MiB)、maxPages(既定 1,000)、precision などの上限。 |
キーボード | 矢印キーと Page Up/Down でページ移動、+ と − で拡大縮小、f で幅に合わせる、r で回転。 |
- WebAssembly 版はパッケージとして配布していません。bindings/wasm からビルドし(Rust と wasm-bindgen が必要)、bindings/wasm/web を自分のサイトから配信します。
- HTTP で配信してください。file:// で開いても動きません。Content-Security-Policy を使うなら、script に 'wasm-unsafe-eval'、worker に 'self' が必要です。
- ページは <img> の Blob URL で表示され、ビューアが文書のSVGをページに差し込むことはありません。
上限の一覧
どの上限も、巨大なファイルや壊れたファイルからマシンを守るためのものです。用途に合わせて下げるのはかまいません。難しいファイルを通すためだけに上げないでください。
| 上限 | コマンド、Node.js、Python、Rust | ブラウザ(WebAssembly) |
|---|---|---|
| 入力ファイル | 512 MiB | 64 MiB(最大 256 MiB) |
| 展開した部品1つ(PDFのストリーム、ZIPの中身) | 128 MiB | 32 MiB |
| ページ数 | 10,000 | 1,000 |
| 部品ごとのXMLの量 | 5,000,000 | 2,000,000 |
| 1ページ分のSVG(メモリ上のプレビュー) | 64 MiB | 16 MiB |
| 全ページのSVG(メモリ上のプレビュー) | 256 MiB | 128 MiB |
| 座標の小数点以下の桁数 | 5 | 4 |