@embedpdf/plugin-measurement

中文文档
3.2.0发布于 2026/11/12Apache-2.0TypeScriptESM + CJS近 30 天下载 1万

Page calibration and distance measurement workflows for EmbedPDF.

原始使用文档

@embedpdf/plugin-measurement

Document-scoped page calibration, measurement authoring, and measurement readouts. Install alongside annotationPlugin() and interactionPlugin():

import { measurementPlugin, MeasurementToken } from '@embedpdf/plugin-measurement';

const plugins = [
  /* interaction, annotation, ... */
  measurementPlugin({ defaultScale: 'metric' }),
];

const measurements = viewer.get(MeasurementToken);
await measurements.calibrate({ page, from, to, distance: { value: 5, unit: 'm' } });

calibrate points are page space, like the CalibrationRequest the calibrate tool produces; the plugin converts them to PDF user space, and the line's length is rounded through the engine's float32 coordinate rules. UserUnit participates in ratio presets; a calibration from a known length already expresses the full conversion.

The annotation plugin supplies the distance, perimeter, area, and calibrate tools. A measurement captures the last viewport containing its first point. A foreign or invalid winning viewport prevents creation; the default scale is used only outside all viewports. Until the page's viewport reads finish, measurement creation is unavailable. createMeasurement({ kind, page, points }) creates the same annotations from code, resolves { annotation }, and rejects with not-ready before the page's scale is known. A page is a ref or an index everywhere. startCalibration() arms the calibrate tool, and throws permission-denied without doc.annotate.modify; its two points arrive as onCalibrationRequested (and getCalibrationRequest()) awaiting the real length, and dismissCalibration() drops the request.

setScale, setPreset, setUnit, setAreaUnit, setPrecision, and clearScale take a page target — one page, an array of pages, or 'all' — and { recalculate?: boolean }. calibrate writes its input page unless applyTo names a wider target. Recalculation defaults to true. Every annotation stores its own scale snapshot. Setting recalculate: false changes subsequent measurements while preserving existing values.

Each scale change resolves to one report per page listing updated, skipped, and failed annotations; listLastReports() keeps the last set and onScaleChanged fires per page. A page-wide annotation read failure appears as error. A single-page viewport write failure rejects before annotation writes; multi-page operations (several pages or 'all') return per-page scaleError results and finish the remaining pages. Page scales persist in the PDF when the engine provides page.measure; without it they last for the session (getPageScale(page).persistent === false).

canCalibrate() mirrors doc.annotate.modify; canMeasure(page) combines annotation creation authority and viewport readiness. Per-record permissions and PDF flags gate recalculation and caption dragging. Measurement contents are derived and cannot be edited as comment text. getReadout(ref) formats a measurement annotation; measureDistance and measureArea convert page-space points in the page's scale without creating anything.

The settings, defaultScale and presets, change while the app runs: updateSettings(), resetSettings() and onSettingsChanged, shared by every document.

React consumers import measurementPlugin, useMeasurement (the capability), useMeasurementState (busy, calibrationRequest, lastReports), useMeasurementSettings, usePageScale, useMeasurementReadout and useMeasurementEvent from @embedpdf/react/measurement. The full viewer includes a Measure toolbar (distance, perimeter, area, calibrate), a scale sidebar, and a known-length calibration dialog.

Distance captions use standard PDF line-axis offsets. Their live layout uses an estimated Helvetica advance; committed annotations render the native PDF appearance.

版本与发布记录

@embedpdf/plugin-measurement 共发布 13 个版本,首次发布于 2026/09/20;过去 12 个月发布了 13 个版本。

版本发布日期距今
3.2.0latest2026/11/121 天前
3.1.02026/11/094 天前
3.0.02026/11/076 天前
3.0.0-next.23next2026/11/076 天前
3.0.0-next.222026/11/049 天前
3.0.0-next.212026/11/0310 天前

关于 @embedpdf/plugin-measurement 的常见问题

@embedpdf/plugin-measurement 是什么?

Page calibration and distance measurement workflows for EmbedPDF.

如何安装 @embedpdf/plugin-measurement?

在项目目录运行 npm install @embedpdf/plugin-measurement,或使用 pnpm add / yarn add / bun add。

@embedpdf/plugin-measurement 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@embedpdf/plugin-measurement 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@embedpdf/plugin-measurement 可以商用吗?

@embedpdf/plugin-measurement 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@embedpdf/plugin-measurement 的下载量有多少?

根据 npm 官方下载统计,@embedpdf/plugin-measurement 在 2026/10/14 – 2026/11/12 这 30 天内被下载 10,146 次,日均约 338 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@embedpdf/plugin-measurement 还在维护吗?

最新版本 3.2.0 发布于 2026/11/12(1 天前);至今共发布 13 个版本,其中过去 12 个月发布了 13 个;首次发布于 2026/09/20。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。