@laminapdf/sdk 0.0.0-stage → 0.2.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (478) hide show
  1. package/README.md +243 -2
  2. package/dist/api.d.ts +26 -0
  3. package/dist/api.d.ts.map +1 -0
  4. package/dist/api.js +12 -0
  5. package/dist/api.js.map +1 -0
  6. package/dist/builder.d.ts +335 -0
  7. package/dist/builder.d.ts.map +1 -0
  8. package/dist/builder.js +574 -0
  9. package/dist/builder.js.map +1 -0
  10. package/dist/defined.d.ts +5 -0
  11. package/dist/defined.d.ts.map +1 -0
  12. package/dist/defined.js +7 -0
  13. package/dist/defined.js.map +1 -0
  14. package/dist/document.d.ts +267 -0
  15. package/dist/document.d.ts.map +1 -0
  16. package/dist/document.js +472 -0
  17. package/dist/document.js.map +1 -0
  18. package/dist/entry/node.d.ts +30 -0
  19. package/dist/entry/node.d.ts.map +1 -0
  20. package/dist/entry/node.js +37 -0
  21. package/dist/entry/node.js.map +1 -0
  22. package/dist/entry/workerd.d.ts +30 -0
  23. package/dist/entry/workerd.d.ts.map +1 -0
  24. package/dist/entry/workerd.js +37 -0
  25. package/dist/entry/workerd.js.map +1 -0
  26. package/dist/errors.d.ts +102 -0
  27. package/dist/errors.d.ts.map +1 -0
  28. package/dist/errors.js +131 -0
  29. package/dist/errors.js.map +1 -0
  30. package/dist/explain.d.ts +20 -0
  31. package/dist/explain.d.ts.map +1 -0
  32. package/dist/explain.js +14 -0
  33. package/dist/explain.js.map +1 -0
  34. package/dist/extract.d.ts +57 -0
  35. package/dist/extract.d.ts.map +1 -0
  36. package/dist/extract.js +5 -0
  37. package/dist/extract.js.map +1 -0
  38. package/dist/font.d.ts +73 -0
  39. package/dist/font.d.ts.map +1 -0
  40. package/dist/font.js +133 -0
  41. package/dist/font.js.map +1 -0
  42. package/dist/generated/builder-enums.d.ts +29 -0
  43. package/dist/generated/builder-enums.d.ts.map +1 -0
  44. package/dist/generated/builder-enums.js +80 -0
  45. package/dist/generated/builder-enums.js.map +1 -0
  46. package/dist/generated/codes.d.ts +109 -0
  47. package/dist/generated/codes.d.ts.map +1 -0
  48. package/dist/generated/codes.js +508 -0
  49. package/dist/generated/codes.js.map +1 -0
  50. package/dist/generated/explain.d.ts +6 -0
  51. package/dist/generated/explain.d.ts.map +1 -0
  52. package/dist/generated/explain.js +155 -0
  53. package/dist/generated/explain.js.map +1 -0
  54. package/dist/generated/extract.d.ts +235 -0
  55. package/dist/generated/extract.d.ts.map +1 -0
  56. package/dist/generated/extract.js +4 -0
  57. package/dist/generated/extract.js.map +1 -0
  58. package/dist/index.d.ts +30 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +37 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/init.d.ts +88 -0
  63. package/dist/init.d.ts.map +1 -0
  64. package/dist/init.js +139 -0
  65. package/dist/init.js.map +1 -0
  66. package/dist/internal/handle.d.ts +58 -0
  67. package/dist/internal/handle.d.ts.map +1 -0
  68. package/dist/internal/handle.js +113 -0
  69. package/dist/internal/handle.js.map +1 -0
  70. package/dist/internal/instance.d.ts +56 -0
  71. package/dist/internal/instance.d.ts.map +1 -0
  72. package/dist/internal/instance.js +125 -0
  73. package/dist/internal/instance.js.map +1 -0
  74. package/dist/loader/fetch.d.ts +3 -0
  75. package/dist/loader/fetch.d.ts.map +1 -0
  76. package/dist/loader/fetch.js +2 -0
  77. package/dist/loader/fetch.js.map +1 -0
  78. package/dist/loader/node.d.ts +3 -0
  79. package/dist/loader/node.d.ts.map +1 -0
  80. package/dist/loader/node.js +9 -0
  81. package/dist/loader/node.js.map +1 -0
  82. package/dist/loader/workerd.d.ts +3 -0
  83. package/dist/loader/workerd.d.ts.map +1 -0
  84. package/dist/loader/workerd.js +15 -0
  85. package/dist/loader/workerd.js.map +1 -0
  86. package/dist/matrix.d.ts +16 -0
  87. package/dist/matrix.d.ts.map +1 -0
  88. package/dist/matrix.js +36 -0
  89. package/dist/matrix.js.map +1 -0
  90. package/dist/path.d.ts +34 -0
  91. package/dist/path.d.ts.map +1 -0
  92. package/dist/path.js +49 -0
  93. package/dist/path.js.map +1 -0
  94. package/dist/source/http.d.ts +36 -0
  95. package/dist/source/http.d.ts.map +1 -0
  96. package/dist/source/http.js +211 -0
  97. package/dist/source/http.js.map +1 -0
  98. package/dist/source/range.d.ts +75 -0
  99. package/dist/source/range.d.ts.map +1 -0
  100. package/dist/source/range.js +100 -0
  101. package/dist/source/range.js.map +1 -0
  102. package/dist/text.d.ts +90 -0
  103. package/dist/text.d.ts.map +1 -0
  104. package/dist/text.js +127 -0
  105. package/dist/text.js.map +1 -0
  106. package/dist/transaction.d.ts +36 -0
  107. package/dist/transaction.d.ts.map +1 -0
  108. package/dist/transaction.js +47 -0
  109. package/dist/transaction.js.map +1 -0
  110. package/dist/types.d.ts +79 -0
  111. package/dist/types.d.ts.map +1 -0
  112. package/dist/types.js +2 -0
  113. package/dist/types.js.map +1 -0
  114. package/dist/version.d.ts +3 -0
  115. package/dist/version.d.ts.map +1 -0
  116. package/dist/version.js +6 -0
  117. package/dist/version.js.map +1 -0
  118. package/dist/worker/client.d.ts +88 -0
  119. package/dist/worker/client.d.ts.map +1 -0
  120. package/dist/worker/client.js +407 -0
  121. package/dist/worker/client.js.map +1 -0
  122. package/dist/worker/emitter.d.ts +12 -0
  123. package/dist/worker/emitter.d.ts.map +1 -0
  124. package/dist/worker/emitter.js +34 -0
  125. package/dist/worker/emitter.js.map +1 -0
  126. package/dist/worker/entry.d.ts +2 -0
  127. package/dist/worker/entry.d.ts.map +1 -0
  128. package/dist/worker/entry.js +4 -0
  129. package/dist/worker/entry.js.map +1 -0
  130. package/dist/worker/index.d.ts +7 -0
  131. package/dist/worker/index.d.ts.map +1 -0
  132. package/dist/worker/index.js +4 -0
  133. package/dist/worker/index.js.map +1 -0
  134. package/dist/worker/protocol.d.ts +82 -0
  135. package/dist/worker/protocol.d.ts.map +1 -0
  136. package/dist/worker/protocol.js +11 -0
  137. package/dist/worker/protocol.js.map +1 -0
  138. package/dist/worker/server.d.ts +51 -0
  139. package/dist/worker/server.d.ts.map +1 -0
  140. package/dist/worker/server.js +493 -0
  141. package/dist/worker/server.js.map +1 -0
  142. package/dist/worker/support.d.ts +43 -0
  143. package/dist/worker/support.d.ts.map +1 -0
  144. package/dist/worker/support.js +26 -0
  145. package/dist/worker/support.js.map +1 -0
  146. package/dist/worker/transfer.d.ts +3 -0
  147. package/dist/worker/transfer.d.ts.map +1 -0
  148. package/dist/worker/transfer.js +13 -0
  149. package/dist/worker/transfer.js.map +1 -0
  150. package/dist/worker/types.d.ts +50 -0
  151. package/dist/worker/types.d.ts.map +1 -0
  152. package/dist/worker/types.js +2 -0
  153. package/dist/worker/types.js.map +1 -0
  154. package/docs/AGENTS.md +14 -0
  155. package/docs/api/README.md +147 -0
  156. package/docs/api/classes/Builder.md +467 -0
  157. package/docs/api/classes/Document.md +742 -0
  158. package/docs/api/classes/Font.md +74 -0
  159. package/docs/api/classes/Image.md +140 -0
  160. package/docs/api/classes/LaminaPdfError.md +189 -0
  161. package/docs/api/classes/Page.md +178 -0
  162. package/docs/api/classes/PageRef.md +253 -0
  163. package/docs/api/classes/PageText.md +129 -0
  164. package/docs/api/classes/PageTextRun.md +167 -0
  165. package/docs/api/classes/PendingPath.md +97 -0
  166. package/docs/api/classes/SaveJob.md +205 -0
  167. package/docs/api/classes/Surface.md +326 -0
  168. package/docs/api/classes/Transaction.md +111 -0
  169. package/docs/api/functions/callbackSource.md +33 -0
  170. package/docs/api/functions/httpRangeSource.md +48 -0
  171. package/docs/api/functions/init.md +36 -0
  172. package/docs/api/functions/isExtractLoaded.md +21 -0
  173. package/docs/api/functions/isInitialized.md +19 -0
  174. package/docs/api/functions/isLaminaPdfError.md +41 -0
  175. package/docs/api/functions/isTextLoaded.md +19 -0
  176. package/docs/api/functions/loadExtract.md +28 -0
  177. package/docs/api/functions/loadText.md +28 -0
  178. package/docs/api/functions/onLeak.md +29 -0
  179. package/docs/api/functions/reset.md +22 -0
  180. package/docs/api/functions/wasmMemory.md +22 -0
  181. package/docs/api/interfaces/BuilderOptions.md +108 -0
  182. package/docs/api/interfaces/ByteRange.md +29 -0
  183. package/docs/api/interfaces/ChunkOptions.md +37 -0
  184. package/docs/api/interfaces/Diagnostic.md +67 -0
  185. package/docs/api/interfaces/ExtractOptions.md +92 -0
  186. package/docs/api/interfaces/ExtractResult.md +37 -0
  187. package/docs/api/interfaces/FontInfo.md +37 -0
  188. package/docs/api/interfaces/HttpRangeOptions.md +78 -0
  189. package/docs/api/interfaces/InitOptions.md +40 -0
  190. package/docs/api/interfaces/Leak.md +21 -0
  191. package/docs/api/interfaces/Location.md +53 -0
  192. package/docs/api/interfaces/OpLog.md +25 -0
  193. package/docs/api/interfaces/OpenOptions.md +37 -0
  194. package/docs/api/interfaces/PageTextOptions.md +21 -0
  195. package/docs/api/interfaces/PathBuilder.md +195 -0
  196. package/docs/api/interfaces/QuadPoint.md +25 -0
  197. package/docs/api/interfaces/RangeOptions.md +54 -0
  198. package/docs/api/interfaces/RangeSource.md +59 -0
  199. package/docs/api/interfaces/StrokeStyle.md +61 -0
  200. package/docs/api/interfaces/TagSpec.md +69 -0
  201. package/docs/api/interfaces/TextBoxOptions.md +93 -0
  202. package/docs/api/interfaces/TextGlyph.md +29 -0
  203. package/docs/api/interfaces/TextOptions.md +101 -0
  204. package/docs/api/interfaces/WasmMemory.md +37 -0
  205. package/docs/api/type-aliases/AfRelationship.md +15 -0
  206. package/docs/api/type-aliases/Align.md +15 -0
  207. package/docs/api/type-aliases/ArtifactKind.md +15 -0
  208. package/docs/api/type-aliases/AttachmentOptions.md +15 -0
  209. package/docs/api/type-aliases/BlendMode.md +15 -0
  210. package/docs/api/type-aliases/BoxRect.md +15 -0
  211. package/docs/api/type-aliases/BuildOptions.md +15 -0
  212. package/docs/api/type-aliases/Cell.md +71 -0
  213. package/docs/api/type-aliases/Chunk.md +79 -0
  214. package/docs/api/type-aliases/Color.md +16 -0
  215. package/docs/api/type-aliases/Coordinates.md +55 -0
  216. package/docs/api/type-aliases/Direction.md +15 -0
  217. package/docs/api/type-aliases/DocumentInfo.md +15 -0
  218. package/docs/api/type-aliases/DropReason.md +15 -0
  219. package/docs/api/type-aliases/Dropped.md +59 -0
  220. package/docs/api/type-aliases/Edited.md +15 -0
  221. package/docs/api/type-aliases/ErrorCode.md +15 -0
  222. package/docs/api/type-aliases/ErrorKind.md +15 -0
  223. package/docs/api/type-aliases/ExtractFormat.md +15 -0
  224. package/docs/api/type-aliases/ExtractedBlock.md +82 -0
  225. package/docs/api/type-aliases/ExtractedPage.md +65 -0
  226. package/docs/api/type-aliases/ExtractedSource.md +48 -0
  227. package/docs/api/type-aliases/Extraction.md +22 -0
  228. package/docs/api/type-aliases/FillRule.md +15 -0
  229. package/docs/api/type-aliases/Fit.md +15 -0
  230. package/docs/api/type-aliases/Flags.md +15 -0
  231. package/docs/api/type-aliases/Generator.md +41 -0
  232. package/docs/api/type-aliases/GlyphQuad.md +15 -0
  233. package/docs/api/type-aliases/InfoPatch.md +15 -0
  234. package/docs/api/type-aliases/LaminaPdfWarning.md +16 -0
  235. package/docs/api/type-aliases/LimitName.md +15 -0
  236. package/docs/api/type-aliases/Limits.md +15 -0
  237. package/docs/api/type-aliases/LineBox.md +15 -0
  238. package/docs/api/type-aliases/LineCap.md +15 -0
  239. package/docs/api/type-aliases/LineJoin.md +15 -0
  240. package/docs/api/type-aliases/LinkTarget.md +15 -0
  241. package/docs/api/type-aliases/Metadata.md +15 -0
  242. package/docs/api/type-aliases/Op.md +15 -0
  243. package/docs/api/type-aliases/OutlineEntry.md +15 -0
  244. package/docs/api/type-aliases/Overflow.md +15 -0
  245. package/docs/api/type-aliases/PageInfo.md +15 -0
  246. package/docs/api/type-aliases/PageLabel.md +15 -0
  247. package/docs/api/type-aliases/PageSizeName.md +15 -0
  248. package/docs/api/type-aliases/Point.md +15 -0
  249. package/docs/api/type-aliases/Profile.md +15 -0
  250. package/docs/api/type-aliases/Progress.md +15 -0
  251. package/docs/api/type-aliases/ReadingOrder.md +15 -0
  252. package/docs/api/type-aliases/Rect.md +15 -0
  253. package/docs/api/type-aliases/Region.md +31 -0
  254. package/docs/api/type-aliases/RenderMode.md +15 -0
  255. package/docs/api/type-aliases/Rotation.md +15 -0
  256. package/docs/api/type-aliases/SaveOptions.md +15 -0
  257. package/docs/api/type-aliases/SaveReport.md +15 -0
  258. package/docs/api/type-aliases/Span.md +63 -0
  259. package/docs/api/type-aliases/SplitOn.md +15 -0
  260. package/docs/api/type-aliases/Standard14.md +15 -0
  261. package/docs/api/type-aliases/StructRef.md +41 -0
  262. package/docs/api/type-aliases/StructSource.md +17 -0
  263. package/docs/api/type-aliases/TableDetector.md +15 -0
  264. package/docs/api/type-aliases/TableMode.md +15 -0
  265. package/docs/api/type-aliases/TableScope.md +15 -0
  266. package/docs/api/type-aliases/Tag.md +15 -0
  267. package/docs/api/type-aliases/TagName.md +15 -0
  268. package/docs/api/type-aliases/TextLayout.md +15 -0
  269. package/docs/api/type-aliases/TextRange.md +33 -0
  270. package/docs/api/type-aliases/TextRunInfo.md +15 -0
  271. package/docs/api/type-aliases/Transform.md +15 -0
  272. package/docs/api/type-aliases/UndoOutcome.md +15 -0
  273. package/docs/api/type-aliases/ViewerPreferences.md +15 -0
  274. package/docs/api/type-aliases/WarningCode.md +15 -0
  275. package/docs/api/type-aliases/WasmSource.md +16 -0
  276. package/docs/api/variables/Matrix.md +99 -0
  277. package/docs/api/variables/PAGE_SIZES.md +15 -0
  278. package/docs/api/variables/TAG_NAMES.md +15 -0
  279. package/docs/errors/README.md +156 -0
  280. package/docs/errors/aes-padding-invalid.md +34 -0
  281. package/docs/errors/already-initialized.md +34 -0
  282. package/docs/errors/binary-output-to-terminal.md +35 -0
  283. package/docs/errors/builder-finished.md +35 -0
  284. package/docs/errors/cancelled.md +35 -0
  285. package/docs/errors/cmap-invalid.md +42 -0
  286. package/docs/errors/collection-index.md +33 -0
  287. package/docs/errors/color-components.md +33 -0
  288. package/docs/errors/content-bad-operands.md +36 -0
  289. package/docs/errors/content-path-unpainted.md +36 -0
  290. package/docs/errors/content-resource-missing.md +37 -0
  291. package/docs/errors/content-syntax.md +36 -0
  292. package/docs/errors/content-unbalanced-bt.md +36 -0
  293. package/docs/errors/content-unbalanced-marked.md +36 -0
  294. package/docs/errors/content-unbalanced-q.md +36 -0
  295. package/docs/errors/content-unknown-operator.md +37 -0
  296. package/docs/errors/data-pending.md +34 -0
  297. package/docs/errors/decompress.md +34 -0
  298. package/docs/errors/device-color-without-output-intent.md +33 -0
  299. package/docs/errors/direct-page.md +34 -0
  300. package/docs/errors/disposed.md +34 -0
  301. package/docs/errors/document-changed.md +34 -0
  302. package/docs/errors/embedded-file-forbidden.md +35 -0
  303. package/docs/errors/embedded-file-without-mime-type.md +36 -0
  304. package/docs/errors/encoding-full.md +34 -0
  305. package/docs/errors/encrypted-base.md +33 -0
  306. package/docs/errors/extract-limit-blocks.md +35 -0
  307. package/docs/errors/extract-module-not-loaded.md +37 -0
  308. package/docs/errors/extract-reading-order-ambiguous.md +32 -0
  309. package/docs/errors/extract-struct-tree-ignored.md +32 -0
  310. package/docs/errors/extract-table-ambiguous.md +32 -0
  311. package/docs/errors/extract-table-limit.md +35 -0
  312. package/docs/errors/extract-untagged-content.md +32 -0
  313. package/docs/errors/fetch-failed.md +34 -0
  314. package/docs/errors/flate-truncated.md +34 -0
  315. package/docs/errors/font-invalid.md +36 -0
  316. package/docs/errors/font-mismatch.md +34 -0
  317. package/docs/errors/font-not-embeddable.md +34 -0
  318. package/docs/errors/font-not-embedded.md +35 -0
  319. package/docs/errors/font-not-shapable.md +33 -0
  320. package/docs/errors/glyph-out-of-range.md +34 -0
  321. package/docs/errors/glyph-without-unicode.md +35 -0
  322. package/docs/errors/heading-level-skipped.md +36 -0
  323. package/docs/errors/image-data-length.md +33 -0
  324. package/docs/errors/image-too-large.md +32 -0
  325. package/docs/errors/inline-image-unterminated.md +36 -0
  326. package/docs/errors/input-unreadable.md +37 -0
  327. package/docs/errors/instance-reset.md +34 -0
  328. package/docs/errors/invalid-argument.md +33 -0
  329. package/docs/errors/invalid-axis-value.md +32 -0
  330. package/docs/errors/invalid-box.md +34 -0
  331. package/docs/errors/invalid-color.md +32 -0
  332. package/docs/errors/invalid-command-line.md +44 -0
  333. package/docs/errors/invalid-date.md +34 -0
  334. package/docs/errors/invalid-entry.md +34 -0
  335. package/docs/errors/invalid-feature.md +32 -0
  336. package/docs/errors/invalid-font.md +32 -0
  337. package/docs/errors/invalid-geometry.md +32 -0
  338. package/docs/errors/invalid-icc-profile.md +32 -0
  339. package/docs/errors/invalid-image.md +33 -0
  340. package/docs/errors/invalid-op-log.md +33 -0
  341. package/docs/errors/invalid-page-label.md +34 -0
  342. package/docs/errors/invalid-page-labels.md +32 -0
  343. package/docs/errors/invalid-page-range.md +37 -0
  344. package/docs/errors/invalid-rotate.md +34 -0
  345. package/docs/errors/invalid-structure-nesting.md +38 -0
  346. package/docs/errors/invalid-structure.md +34 -0
  347. package/docs/errors/invalid-text-range.md +33 -0
  348. package/docs/errors/job-finished.md +34 -0
  349. package/docs/errors/limit-exceeded.md +38 -0
  350. package/docs/errors/link-without-contents.md +33 -0
  351. package/docs/errors/link-without-structure.md +37 -0
  352. package/docs/errors/missing-alt-text.md +33 -0
  353. package/docs/errors/missing-glyph.md +33 -0
  354. package/docs/errors/missing-header.md +37 -0
  355. package/docs/errors/missing-lang.md +32 -0
  356. package/docs/errors/missing-root.md +34 -0
  357. package/docs/errors/missing-title.md +32 -0
  358. package/docs/errors/name-tree-node-skipped.md +34 -0
  359. package/docs/errors/nested-transaction.md +34 -0
  360. package/docs/errors/no-pending-save.md +32 -0
  361. package/docs/errors/no-transaction.md +33 -0
  362. package/docs/errors/not-initialized.md +35 -0
  363. package/docs/errors/not-pdf.md +33 -0
  364. package/docs/errors/not-rebased.md +35 -0
  365. package/docs/errors/object-number-out-of-range.md +38 -0
  366. package/docs/errors/objstm-index-mismatch.md +36 -0
  367. package/docs/errors/out-of-memory.md +38 -0
  368. package/docs/errors/outline-cycle.md +34 -0
  369. package/docs/errors/outline-item-skipped.md +34 -0
  370. package/docs/errors/output-unwritable.md +37 -0
  371. package/docs/errors/overwrite-refused.md +36 -0
  372. package/docs/errors/page-count-mismatch.md +34 -0
  373. package/docs/errors/page-index-out-of-range.md +34 -0
  374. package/docs/errors/page-tree-node-skipped.md +35 -0
  375. package/docs/errors/password-required.md +36 -0
  376. package/docs/errors/path-outside-roots.md +32 -0
  377. package/docs/errors/perms-mismatch.md +34 -0
  378. package/docs/errors/profile-version-conflict.md +35 -0
  379. package/docs/errors/reference-cycle.md +35 -0
  380. package/docs/errors/render-backend-unavailable.md +32 -0
  381. package/docs/errors/render-failed.md +33 -0
  382. package/docs/errors/render-too-large.md +36 -0
  383. package/docs/errors/repaired-base.md +34 -0
  384. package/docs/errors/requires-rewrite.md +38 -0
  385. package/docs/errors/saved-not-rebased.md +34 -0
  386. package/docs/errors/sink-not-empty.md +33 -0
  387. package/docs/errors/sink.md +31 -0
  388. package/docs/errors/source-budget-exceeded.md +34 -0
  389. package/docs/errors/source-changed.md +33 -0
  390. package/docs/errors/source.md +30 -0
  391. package/docs/errors/stale-generation.md +34 -0
  392. package/docs/errors/stream-length-recovered.md +37 -0
  393. package/docs/errors/strict.md +34 -0
  394. package/docs/errors/subset-failed.md +31 -0
  395. package/docs/errors/syntax.md +34 -0
  396. package/docs/errors/text-module-not-loaded.md +36 -0
  397. package/docs/errors/text-overflow.md +34 -0
  398. package/docs/errors/tounicode-conflict.md +32 -0
  399. package/docs/errors/type.md +34 -0
  400. package/docs/errors/unexpected-eof.md +34 -0
  401. package/docs/errors/unknown-axis.md +33 -0
  402. package/docs/errors/unknown-code.md +36 -0
  403. package/docs/errors/unknown-destination.md +33 -0
  404. package/docs/errors/unknown-font.md +33 -0
  405. package/docs/errors/unknown-option.md +33 -0
  406. package/docs/errors/unknown-page.md +34 -0
  407. package/docs/errors/unmapped-glyph.md +36 -0
  408. package/docs/errors/unnumbered-heading-misused.md +34 -0
  409. package/docs/errors/unset-object.md +30 -0
  410. package/docs/errors/unsupported-filter.md +34 -0
  411. package/docs/errors/unsupported-image.md +33 -0
  412. package/docs/errors/unsupported-layout-option.md +33 -0
  413. package/docs/errors/unsupported-security-handler.md +34 -0
  414. package/docs/errors/unsupported-version.md +32 -0
  415. package/docs/errors/untagged-content.md +35 -0
  416. package/docs/errors/warnings-truncated.md +35 -0
  417. package/docs/errors/wasm-trap.md +37 -0
  418. package/docs/errors/whole-font-rebuilt.md +30 -0
  419. package/docs/errors/worker-crashed.md +33 -0
  420. package/docs/errors/worker-failed.md +32 -0
  421. package/docs/errors/worker-version-mismatch.md +34 -0
  422. package/docs/errors/would-invalidate-signatures.md +38 -0
  423. package/docs/errors/wrong-document.md +33 -0
  424. package/docs/errors/wrong-password.md +34 -0
  425. package/docs/errors/xobject-cycle.md +36 -0
  426. package/docs/errors/xref-repaired.md +36 -0
  427. package/docs/errors/xrefstm-ignored.md +34 -0
  428. package/docs/llms.txt +88 -0
  429. package/docs/pages/concepts/dependencies.md +44 -0
  430. package/docs/pages/concepts/errors-and-warnings.md +64 -0
  431. package/docs/pages/concepts/how-lamina-thinks.md +86 -0
  432. package/docs/pages/concepts/pages-and-coordinates.md +67 -0
  433. package/docs/pages/guides/accessible-pdfs.md +260 -0
  434. package/docs/pages/guides/archival-pdfs.md +429 -0
  435. package/docs/pages/guides/edit-a-pdf.md +137 -0
  436. package/docs/pages/guides/fonts-and-text.md +202 -0
  437. package/docs/pages/guides/images-and-vectors.md +219 -0
  438. package/docs/pages/guides/keep-the-page-responsive.md +81 -0
  439. package/docs/pages/guides/links-outlines-and-metadata.md +222 -0
  440. package/docs/pages/guides/password-protected-files.md +70 -0
  441. package/docs/pages/guides/save-a-pdf.md +144 -0
  442. package/docs/pages/guides/untrusted-files.md +80 -0
  443. package/docs/pages/index.md +33 -0
  444. package/docs/pages/install.md +75 -0
  445. package/docs/pages/quick-start/browser.md +67 -0
  446. package/docs/pages/quick-start/bun.md +60 -0
  447. package/docs/pages/quick-start/deno.md +58 -0
  448. package/docs/pages/quick-start/node.md +61 -0
  449. package/docs/pages/quick-start/rust.md +58 -0
  450. package/docs/pages/quick-start/workers.md +139 -0
  451. package/docs/pages/recipes/cloudflare-worker.md +115 -0
  452. package/docs/pages/recipes/extract-markdown.md +114 -0
  453. package/docs/pages/recipes/generate-then-edit.md +135 -0
  454. package/docs/pages/recipes/hello.md +94 -0
  455. package/docs/pages/recipes/images-and-vectors.md +209 -0
  456. package/docs/pages/recipes/invoice.md +226 -0
  457. package/docs/pages/recipes/links-and-outlines.md +215 -0
  458. package/docs/pages/recipes/multilingual.md +189 -0
  459. package/docs/pages/recipes/open-untrusted.md +65 -0
  460. package/docs/pages/recipes/pdf-a-archive.md +205 -0
  461. package/docs/pages/recipes/pdf-a3-invoice-with-xml.md +222 -0
  462. package/docs/pages/recipes/pdf-ua-report.md +237 -0
  463. package/docs/pages/recipes/report.md +125 -0
  464. package/docs/pages/recipes/web-worker-client.md +64 -0
  465. package/docs/pages/recipes.md +47 -0
  466. package/docs/pages/reference/changelog.md +86 -0
  467. package/docs/pages/reference/codes.md +14 -0
  468. package/docs/pages/reference/glossary.md +108 -0
  469. package/docs/pages/reference/rust.md +36 -0
  470. package/docs/pages/reference/stability.md +59 -0
  471. package/docs/pages/start/coding-agents.md +45 -0
  472. package/docs/pages/start/first-pdf.md +77 -0
  473. package/docs/pages/troubleshooting.md +74 -0
  474. package/docs/renames.json +86 -0
  475. package/docs/schemas/error.schema.json +305 -0
  476. package/docs/schemas/renames.schema.json +29 -0
  477. package/package.json +93 -3
  478. package/schemas/error.schema.json +305 -0
@@ -0,0 +1,32 @@
1
+ ---
2
+ title: "extract-table-ambiguous"
3
+ version: "0.2.0-alpha.3"
4
+ url: "https://docs.laminapdf.com/reference/codes/extract-table-ambiguous/"
5
+ ---
6
+
7
+ # extract-table-ambiguous
8
+
9
+ - Type: warning
10
+ - Kind: `unsupported` (valid input that Lamina PDF doesn't implement)
11
+
12
+ ## What happened
13
+
14
+ Extraction found a table drawn with lines, but the cells its missing lines would join don't make a rectangle. Extraction kept the table and gave it one cell per square of its grid, so a merged cell's text sits in the first of the squares it covers.
15
+
16
+ ## Why
17
+
18
+ A table's lines tell where cells are merged: a missing line between two squares joins them. Joined squares that form an L or a T shape don't describe a cell, usually because a line is drawn slightly short, drawn twice in different places, or covered by a white rectangle.
19
+
20
+ ## How to fix
21
+
22
+ Nothing to do in Lamina PDF; the file is valid. Like every warning, it fails the call in strict mode. Check that table's cells: the text of a merged cell may be split across its neighbours.
23
+
24
+ ## Example
25
+
26
+ A table whose header spans two columns over the first row only, but whose line under that header stops halfway.
27
+
28
+ ## Data fields
29
+
30
+ None.
31
+
32
+ The `location` has the page's `pageIndex`.
@@ -0,0 +1,35 @@
1
+ ---
2
+ title: "extract-table-limit"
3
+ version: "0.2.0-alpha.3"
4
+ url: "https://docs.laminapdf.com/reference/codes/extract-table-limit/"
5
+ ---
6
+
7
+ # extract-table-limit
8
+
9
+ - Type: warning
10
+ - Kind: `limit` (a `Limits` value or another resource bound was hit)
11
+
12
+ ## What happened
13
+
14
+ A page's ruling lines would have made a table with more cells than `ExtractLimits::max_table_cells` allows, or the page drew so many lines that matching them all would cost too much. Extraction made no table from those lines; their text is still in the page's paragraphs.
15
+
16
+ ## Why
17
+
18
+ A page drawn with thousands of lines, such as a large grid, a chart's gridlines or a file built to slow extraction down. To find a table, extraction compares every horizontal line with every vertical one, so the work grows with the square of the line count.
19
+
20
+ ## How to fix
21
+
22
+ Raise `max_table_cells` if the page really holds a table that big.
23
+
24
+ ## Example
25
+
26
+ ```rust
27
+ let mut options = laminapdf_extract::ExtractOptions::default();
28
+ options.limits.max_table_cells = 50_000;
29
+ ```
30
+
31
+ ## Data fields
32
+
33
+ - `limit`: the limit that was reached.
34
+
35
+ The `location` has the page's `pageIndex`.
@@ -0,0 +1,32 @@
1
+ ---
2
+ title: "extract-untagged-content"
3
+ version: "0.2.0-alpha.3"
4
+ url: "https://docs.laminapdf.com/reference/codes/extract-untagged-content/"
5
+ ---
6
+
7
+ # extract-untagged-content
8
+
9
+ - Type: warning
10
+ - Kind: `input` (a problem with the PDF file)
11
+
12
+ ## What happened
13
+
14
+ The page was read in its structure tree's order, but some of its visible text isn't in the tree and isn't marked as an artifact. Extraction kept that text and put it after the tree's blocks, in layout order.
15
+
16
+ ## Why
17
+
18
+ In a tagged file, every piece of visible content should belong to a structure element or be marked as an artifact (ISO 32000-2 §14.8.2.2). Text that is neither has no place in the tree's order. A tool that adds text after tagging a document, such as a stamp or a page number, often leaves text like this.
19
+
20
+ ## How to fix
21
+
22
+ Nothing to do in Lamina PDF. To give that text its place in the reading order, tag it in the file, or mark it as an artifact if it isn't content. Like every warning, it fails the call in strict mode.
23
+
24
+ ## Example
25
+
26
+ A tagged contract with a "DRAFT" stamp drawn after tagging: the stamp's text comes after the contract's blocks.
27
+
28
+ ## Data fields
29
+
30
+ - `chars`: how many characters (spaces left out) lie outside the tree.
31
+
32
+ The `location` has the page's `pageIndex`.
@@ -0,0 +1,34 @@
1
+ ---
2
+ title: "fetch-failed"
3
+ version: "0.2.0-alpha.3"
4
+ url: "https://docs.laminapdf.com/reference/codes/fetch-failed/"
5
+ ---
6
+
7
+ # fetch-failed
8
+
9
+ - Type: error
10
+ - Kind: `io` (the host failed to supply bytes; often transient)
11
+
12
+ ## What happened
13
+
14
+ A range source of `@laminapdf/sdk` (`httpRangeSource`) couldn't get bytes it asked for. The request failed (a network error, a CORS refusal, DNS), or the server answered with a status other than `200` or `206`, or with a `206` whose `Content-Range` (or length) doesn't match the range asked for. A `Content-Range` that the browser hides, because CORS doesn't expose it, looks the same. It is also raised when a `callbackSource`'s read returns a different number of bytes than it was asked for.
15
+
16
+ ## Why
17
+
18
+ Opening a remote file range by range depends on the server: it must allow the `Range` request (and, across origins, expose `Content-Range`, `Content-Length` and `ETag` through CORS), and must not compress the response (`Content-Encoding` breaks byte ranges). Lamina PDF never retries on its own; the error says the bytes are not available.
19
+
20
+ ## How to fix
21
+
22
+ Check that the URL is reachable from where the code runs and that the server sends `Access-Control-Allow-Origin`, `Access-Control-Allow-Headers: Range` and `Access-Control-Expose-Headers: Content-Range, Content-Length, ETag`. Serve PDFs without `Content-Encoding`. Retry the call yourself if the failure was transient.
23
+
24
+ ## Example
25
+
26
+ ```js
27
+ const doc = await Document.openRange(httpRangeSource(url)); // throws { code: "fetch-failed", data: { status: 403 } }
28
+ ```
29
+
30
+ ## Data fields
31
+
32
+ - `reason`: `network`, `status`, `content-range` or `length` (Lamina PDF's own words). The URL is never included.
33
+ - `status`: the HTTP status, when there was a response.
34
+ - `expected`, `got`: for `length`, the bytes asked for and the bytes returned.
@@ -0,0 +1,34 @@
1
+ ---
2
+ title: "flate-truncated"
3
+ version: "0.2.0-alpha.3"
4
+ url: "https://docs.laminapdf.com/reference/codes/flate-truncated/"
5
+ ---
6
+
7
+ # flate-truncated
8
+
9
+ - Type: warning
10
+ - Kind: `input` (the input is malformed beyond what tolerance repairs)
11
+
12
+ ## What happened
13
+
14
+ Flate data was truncated or had a bad checksum; the partial output was kept.
15
+
16
+ ## Why
17
+
18
+ Truncated downloads or damaged streams.
19
+
20
+ ## How to fix
21
+
22
+ Nothing, if the content looks right; part of the stream may be missing.
23
+
24
+ ## Example
25
+
26
+ ```text
27
+ 5 0 obj << /Filter /FlateDecode /Length 900 >> stream …(the zlib data stops early)… endstream
28
+ ```
29
+
30
+ Lamina PDF keeps what inflated before the data ended or the Adler-32 checksum failed; the content may be cut short. The warning carries the stream's `object`.
31
+
32
+ ## Data fields
33
+
34
+ None.
@@ -0,0 +1,36 @@
1
+ ---
2
+ title: "font-invalid"
3
+ version: "0.2.0-alpha.3"
4
+ url: "https://docs.laminapdf.com/reference/codes/font-invalid/"
5
+ ---
6
+
7
+ # font-invalid
8
+
9
+ - Type: warning
10
+ - Kind: `input` (the input is malformed beyond what tolerance repairs)
11
+
12
+ ## What happened
13
+
14
+ A font dictionary read for text extraction has a missing, unreadable or malformed entry (the descendant font, `/Encoding` or its `/Differences`, `/Widths`, `/W`, `/W2`, the font descriptor or its font program). Its text was decoded with defaults: the standard encoding, the standard 14 font's widths or `/MissingWidth`, `/DW`.
15
+
16
+ ## Why
17
+
18
+ A producer bug, a damaged file, or a font dictionary that relies on what a viewer guesses.
19
+
20
+ ## How to fix
21
+
22
+ Nothing to do. Text or positions extracted for that font may be off; regenerating the file with a current producer fixes it.
23
+
24
+ ## Example
25
+
26
+ ```text
27
+ << /Type /Font /Subtype /Type0 /BaseFont /Foo /Encoding /Identity-H /DescendantFonts 99 0 R >>
28
+ ```
29
+
30
+ The descendant font is missing, so text in this font is decoded with defaults: two-byte codes, default widths. The `location` is the font dictionary's `object`.
31
+
32
+ ## Data fields
33
+
34
+ None.
35
+
36
+ The `location` is `object`, the font dictionary's object; none for a direct font dictionary.
@@ -0,0 +1,34 @@
1
+ ---
2
+ title: "font-mismatch"
3
+ version: "0.2.0-alpha.3"
4
+ url: "https://docs.laminapdf.com/reference/codes/font-mismatch/"
5
+ ---
6
+
7
+ # font-mismatch
8
+
9
+ - Type: error
10
+ - Kind: `usage` (the caller misused the API)
11
+
12
+ ## What happened
13
+
14
+ `pdf_run` was given a shaped run and the key of a font other than the one the run was shaped with. Nothing was recorded in the registry.
15
+
16
+ ## Why
17
+
18
+ Glyph IDs, advances and units per em only mean something in the font that produced them; drawing them with another font would show the wrong glyphs and wrong text.
19
+
20
+ ## How to fix
21
+
22
+ Register every font of a layout and pass the key of the run's own font: each `LineRun::font` is an index into the font list given to `break_lines`.
23
+
24
+ ## Example
25
+
26
+ ```rust
27
+ let run = shaper.shape(&noto, text, &options)?;
28
+ pdf_run(&run, text, &mut registry, roboto_key)?; // font-mismatch: shaped with Noto
29
+ ```
30
+
31
+ ## Data fields
32
+
33
+ - `font`: the registered font's PostScript name (**untrusted**: read from the font).
34
+ - `shaped_with`: the PostScript name of the font the run was shaped with (**untrusted**: read from the font).
@@ -0,0 +1,34 @@
1
+ ---
2
+ title: "font-not-embeddable"
3
+ version: "0.2.0-alpha.3"
4
+ url: "https://docs.laminapdf.com/reference/codes/font-not-embeddable/"
5
+ ---
6
+
7
+ # font-not-embeddable
8
+
9
+ - Type: error
10
+ - Kind: `usage` (the caller misused the API)
11
+
12
+ ## What happened
13
+
14
+ `FontRegistry::add` refused a font whose `OS/2.fsType` forbids embedding (restricted licence, or bitmap embedding only).
15
+
16
+ ## Why
17
+
18
+ Font vendors mark fonts whose licence does not allow embedding in documents (OpenType `OS/2` table; research 03 §6.3). `fsType` is advisory; the licence is what counts.
19
+
20
+ ## How to fix
21
+
22
+ Use another font, or, if your licence allows embedding, register it with `EmbedPolicy::Override`.
23
+
24
+ ## Example
25
+
26
+ ```rust
27
+ registry.add(restricted_font, EmbedPolicy::Respect)?; // font-not-embeddable
28
+ registry.add(restricted_font, EmbedPolicy::Override)?; // only if your licence allows embedding
29
+ ```
30
+
31
+ ## Data fields
32
+
33
+ - `font`: the font's PostScript name (**untrusted**: read from the font).
34
+ - `fs_type`: the `fsType` bits.
@@ -0,0 +1,35 @@
1
+ ---
2
+ title: "font-not-embedded"
3
+ version: "0.2.0-alpha.3"
4
+ url: "https://docs.laminapdf.com/reference/codes/font-not-embedded/"
5
+ ---
6
+
7
+ # font-not-embedded
8
+
9
+ - Type: error
10
+ - Kind: `usage` (the caller misused the API)
11
+
12
+ ## What happened
13
+
14
+ Text was drawn with one of the standard 14 fonts (`Builder::standard_font`) under PDF/UA-1 or a PDF/A profile. The standard 14 fonts are never embedded: viewers substitute their own.
15
+
16
+ ## Why
17
+
18
+ The PDF/A standard for archival PDF (ISO 19005-2 §6.2.11.4.1) needs every font embedded, so the document looks the same everywhere in the future. The PDF/UA-1 standard for accessible PDF (ISO 14289-1 §7.21.4.1) needs it too, so viewers can render the text and map it to characters reliably. This is condition 31-009 of the Matterhorn Protocol, the PDF Association's checklist of PDF/UA failures.
19
+
20
+ ## How to fix
21
+
22
+ Load a font file with `Builder::font` (or `Builder::font_bytes` in the façade): Lamina PDF embeds the subset of glyphs you draw.
23
+
24
+ ## Example
25
+
26
+ ```rust
27
+ let bold = builder.standard_font(Standard14::HelveticaBold)?;
28
+ surface.text("Invoice", &bold, Pt::new(24.0), at)?;
29
+ builder.finish()?; // font-not-embedded under Profile::PdfA2b
30
+ ```
31
+
32
+ ## Data fields
33
+
34
+ - `profile`: the profile, such as `PDF/A-2b`.
35
+ - `font`: the font's PostScript name, such as `Helvetica-Bold`.
@@ -0,0 +1,33 @@
1
+ ---
2
+ title: "font-not-shapable"
3
+ version: "0.2.0-alpha.3"
4
+ url: "https://docs.laminapdf.com/reference/codes/font-not-shapable/"
5
+ ---
6
+
7
+ # font-not-shapable
8
+
9
+ - Type: error
10
+ - Kind: `unsupported` (valid input that Lamina PDF doesn't implement)
11
+
12
+ ## What happened
13
+
14
+ A standard 14 font (`Font::standard`) was given to the shaper, `itemize`, `break_lines` or `pdf_run`.
15
+
16
+ ## Why
17
+
18
+ The standard 14 fonts are referred to by name and never embedded. Lamina PDF has their metrics (Adobe's AFM files) but no font program, so there is nothing for HarfRust to shape with and no `cmap` for itemizing. Nor are there CIDs for a shaped run: a standard 14 font is written as a simple font with one-byte codes.
19
+
20
+ ## How to fix
21
+
22
+ Draw standard 14 text with `FontRegistry::encode` (one glyph per character, kerning not applied), or load a real font with `Font::from_bytes` and shape with it.
23
+
24
+ ## Example
25
+
26
+ ```rust
27
+ let helvetica = Font::standard(Standard14::Helvetica);
28
+ shaper.shape(&helvetica, "Hello", &options)?; // font-not-shapable
29
+ ```
30
+
31
+ ## Data fields
32
+
33
+ - `font`: the standard font's PostScript name (fixed text: one of the fourteen).
@@ -0,0 +1,34 @@
1
+ ---
2
+ title: "glyph-out-of-range"
3
+ version: "0.2.0-alpha.3"
4
+ url: "https://docs.laminapdf.com/reference/codes/glyph-out-of-range/"
5
+ ---
6
+
7
+ # glyph-out-of-range
8
+
9
+ - Type: error
10
+ - Kind: `usage` (the caller misused the API)
11
+
12
+ ## What happened
13
+
14
+ `FontRegistry::use_glyph` was given a glyph ID at or past the font's glyph count.
15
+
16
+ ## Why
17
+
18
+ Glyph IDs must come from the same font (its `cmap` or a shaper run on it).
19
+
20
+ ## How to fix
21
+
22
+ Pass glyph IDs from the font you registered.
23
+
24
+ ## Example
25
+
26
+ ```rust
27
+ registry.use_glyph(key, GlyphId::new(60_000), "x")?; // the font has 1,200 glyphs
28
+ ```
29
+
30
+ ## Data fields
31
+
32
+ - `gid`: the glyph ID.
33
+ - `count`: the font's glyph count.
34
+ - `font`: the font's PostScript name (**untrusted**: read from the font).
@@ -0,0 +1,35 @@
1
+ ---
2
+ title: "glyph-without-unicode"
3
+ version: "0.2.0-alpha.3"
4
+ url: "https://docs.laminapdf.com/reference/codes/glyph-without-unicode/"
5
+ ---
6
+
7
+ # glyph-without-unicode
8
+
9
+ - Type: error
10
+ - Kind: `usage` (the caller misused the API)
11
+
12
+ ## What happened
13
+
14
+ Under PDF/A-2u or PDF/UA-1, a glyph was drawn that stands for no text of its own, or whose text is U+0000, U+FEFF or U+FFFE. Shaping can draw one cluster (a group of characters that display as one unit) with several glyphs. The text then belongs to the first glyph, and the others stand for none.
15
+
16
+ ## Why
17
+
18
+ Software can search, copy or read text aloud only when every glyph maps to a usable Unicode value. The PDF/A-2u archival standard (ISO 19005-2 §6.2.11.7.2) and the PDF/UA-1 standard for accessible PDF (ISO 14289-1 §7.21.7) both need that mapping. These are conditions 31-027 to 31-029 of the Matterhorn Protocol, the PDF Association's checklist of PDF/UA failures. Lamina PDF maps a glyph that stands for no text to an empty value, which these profiles reject.
19
+
20
+ ## How to fix
21
+
22
+ Check the text for control characters and byte-order marks. If shaping draws several glyphs for one cluster, choose a font that draws each cluster as one glyph. An archive that needs no accessibility can use PDF/A-2b instead, which doesn't need Unicode for every glyph. PDF/UA-1 has no such relaxed variant, so a PDF/UA-1 document needs the font change.
23
+
24
+ ## Example
25
+
26
+ ```rust
27
+ surface.text("\u{FEFF}Report", &font, Pt::new(12.0), at)?;
28
+ builder.finish()?; // glyph-without-unicode under Profile::PdfA2u
29
+ ```
30
+
31
+ ## Data fields
32
+
33
+ - `profile`: the profile, `PDF/A-2u` or `PDF/UA-1`.
34
+ - `font`: the font's PostScript name (untrusted: read from the font file).
35
+ - `gid`: the glyph's ID in the font.
@@ -0,0 +1,36 @@
1
+ ---
2
+ title: "heading-level-skipped"
3
+ version: "0.2.0-alpha.3"
4
+ url: "https://docs.laminapdf.com/reference/codes/heading-level-skipped/"
5
+ ---
6
+
7
+ # heading-level-skipped
8
+
9
+ - Type: error
10
+ - Kind: `usage` (the caller misused the API)
11
+
12
+ ## What happened
13
+
14
+ Under PDF/UA-1, the document's headings skip a level. Numbered headings are `H1`, `H2` and so on, as opposed to the unnumbered `H`. Either the first numbered heading is not `H1`, or a heading is more than one level below the heading before it (an `H3` straight after an `H1`).
15
+
16
+ ## Why
17
+
18
+ Screen-reader users move through a document by its headings, and a skipped level suggests a missing section. The PDF/UA-1 standard for accessible PDF (ISO 14289-1 §7.4.2) requires numbered headings to start at `H1` and to go down one level at a time. These are conditions 14-002 and 14-003 of the Matterhorn Protocol, the PDF Association's checklist of PDF/UA failures. Going back up any number of levels is fine.
19
+
20
+ ## How to fix
21
+
22
+ Use the next level down for a subsection (`H2` under `H1`, `H3` under `H2`). If a heading should only look smaller, change its font size, not its level.
23
+
24
+ ## Example
25
+
26
+ ```rust
27
+ s.text("Results", &font, Pt::new(18.0), at)?.tag(TagKind::H1);
28
+ s.text("Method", &font, Pt::new(12.0), at2)?.tag(TagKind::H3);
29
+ builder.finish()?; // heading-level-skipped: the second heading should be an H2
30
+ ```
31
+
32
+ ## Data fields
33
+
34
+ - `page`: the page's index (0-based).
35
+ - `level`: the heading's level.
36
+ - `previous`: the level of the heading before it (0 when there is none).
@@ -0,0 +1,33 @@
1
+ ---
2
+ title: "image-data-length"
3
+ version: "0.2.0-alpha.3"
4
+ url: "https://docs.laminapdf.com/reference/codes/image-data-length/"
5
+ ---
6
+
7
+ # image-data-length
8
+
9
+ - Type: error
10
+ - Kind: `usage` (the caller misused the API)
11
+
12
+ ## What happened
13
+
14
+ `Image::rgba(width, height, bytes)` was given a number of bytes other than `width × height × 4`.
15
+
16
+ ## Why
17
+
18
+ Raw RGBA samples are 4 bytes per pixel, row by row from the top, with no padding.
19
+
20
+ ## How to fix
21
+
22
+ Pass exactly 4 bytes per pixel.
23
+
24
+ ## Example
25
+
26
+ ```rust
27
+ let img = Image::rgba(2, 2, &[0; 12])?; // image-data-length: 16 bytes expected
28
+ ```
29
+
30
+ ## Data fields
31
+
32
+ - `expected`: the length the dimensions call for.
33
+ - `actual`: the length given.
@@ -0,0 +1,32 @@
1
+ ---
2
+ title: "image-too-large"
3
+ version: "0.2.0-alpha.3"
4
+ url: "https://docs.laminapdf.com/reference/codes/image-too-large/"
5
+ ---
6
+
7
+ # image-too-large
8
+
9
+ - Type: error
10
+ - Kind: `limit` (a `Limits` value or another resource bound was hit)
11
+
12
+ ## What happened
13
+
14
+ Decoding a PNG would need more than `MAX_DECODED_IMAGE_BYTES` (256 MiB), or the dimensions given to `Image::rgba` describe more bytes than fit in memory's address space.
15
+
16
+ ## Why
17
+
18
+ The builder decodes PNGs to split colour and alpha; a bound on the decoded size keeps a small file with huge dimensions from exhausting memory.
19
+
20
+ ## How to fix
21
+
22
+ Scale the image down before adding it, or use a JPEG, which is embedded without decoding.
23
+
24
+ ## Example
25
+
26
+ ```rust
27
+ let img = Image::png(&png_of_30000_by_30000_pixels)?; // image-too-large: over 256 MiB decoded
28
+ ```
29
+
30
+ ## Data fields
31
+
32
+ - `limit`: the limit in decoded bytes.
@@ -0,0 +1,36 @@
1
+ ---
2
+ title: "inline-image-unterminated"
3
+ version: "0.2.0-alpha.3"
4
+ url: "https://docs.laminapdf.com/reference/codes/inline-image-unterminated/"
5
+ ---
6
+
7
+ # inline-image-unterminated
8
+
9
+ - Type: warning
10
+ - Kind: `input` (the input is malformed beyond what tolerance repairs)
11
+
12
+ ## What happened
13
+
14
+ No `EI` ends an inline image (neither at its declared or computed length nor by searching for it); the rest of the content was skipped.
15
+
16
+ ## Why
17
+
18
+ Damaged or truncated content.
19
+
20
+ ## How to fix
21
+
22
+ Check the page: everything after the inline image is missing.
23
+
24
+ ## Example
25
+
26
+ ```text
27
+ BI /W 10 /H 10 /CS /G /BPC 8 ID …(100 bytes, then the stream ends)…
28
+ ```
29
+
30
+ No `EI` follows the image data, so the rest of the stream is skipped.
31
+
32
+ ## Data fields
33
+
34
+ - `offset`: the `BI`'s byte offset in the decoded content.
35
+
36
+ The `location` is `object` (the page for page content, the Form XObject for a form) with `streamOffset` in its decoded content; none for content interpreted on its own or a direct page.
@@ -0,0 +1,37 @@
1
+ ---
2
+ title: "input-unreadable"
3
+ version: "0.2.0-alpha.3"
4
+ url: "https://docs.laminapdf.com/reference/codes/input-unreadable/"
5
+ ---
6
+
7
+ # input-unreadable
8
+
9
+ - Type: error
10
+ - Kind: `io` (the host failed to supply or take bytes)
11
+
12
+ ## What happened
13
+
14
+ An input couldn't be read: the PDF named on the command line, standard input, or the file given to `--password-file`.
15
+
16
+ ## Why
17
+
18
+ The file may not exist, may be a folder, or may not be readable by the user running the command.
19
+
20
+ ## How to fix
21
+
22
+ Check that the file exists and that you can read it. `data.input` names the file, and `data.reason` says what the system reported.
23
+
24
+ ## Example
25
+
26
+ ```console
27
+ $ laminapdf info missing.pdf
28
+ error[input-unreadable]: couldn't read an input
29
+ = hint: check that the file exists and that you can read it; data.input names it
30
+ $ echo $?
31
+ 1
32
+ ```
33
+
34
+ ## Data fields
35
+
36
+ - `input`: the file that couldn't be read, or `-` for standard input (untrusted: caller text, never in the message).
37
+ - `reason`: the system's error kind, such as `NotFound` or `PermissionDenied`.
@@ -0,0 +1,34 @@
1
+ ---
2
+ title: "instance-reset"
3
+ version: "0.2.0-alpha.3"
4
+ url: "https://docs.laminapdf.com/reference/codes/instance-reset/"
5
+ ---
6
+
7
+ # instance-reset
8
+
9
+ - Type: error
10
+ - Kind: `state` (the call isn't valid in the object's current state)
11
+
12
+ ## What happened
13
+
14
+ A document, page, builder or save job was used after its WebAssembly instance was replaced. `reset()` replaces every loaded module's instance, and a trap (`wasm-trap` or `out-of-memory`) replaces the instance that trapped. The handle belonged to the old instance, so it has nothing left to work on.
15
+
16
+ ## Why
17
+
18
+ Each handle lives in one instance's memory, and a fresh instance starts empty. Lamina PDF can't move a document across, so every handle from the old instance stops working at once.
19
+
20
+ ## How to fix
21
+
22
+ Open the document again from its bytes, or create a new builder. Unsaved edits are lost with the old instance, so save often in an app that calls `reset()` or may run out of memory.
23
+
24
+ ## Example
25
+
26
+ ```ts
27
+ const doc = Document.open(bytes);
28
+ reset();
29
+ doc.pageCount; // throws LaminaPdfError { code: "instance-reset", … }
30
+ ```
31
+
32
+ ## Data fields
33
+
34
+ None.
@@ -0,0 +1,33 @@
1
+ ---
2
+ title: "invalid-argument"
3
+ version: "0.2.0-alpha.3"
4
+ url: "https://docs.laminapdf.com/reference/codes/invalid-argument/"
5
+ ---
6
+
7
+ # invalid-argument
8
+
9
+ - Type: error
10
+ - Kind: `usage` (the caller misused the API)
11
+
12
+ ## What happened
13
+
14
+ A value passed from JavaScript to `@laminapdf/wasm` is not of the type its declaration describes. It might be a record with a field of the wrong type, or a string that names no known value (a blend mode, a fill rule, a standard 14 font, an op). It might also be a flat-encoded path cut short, a colour with the wrong number of components, or an ID that isn't 32 hex digits.
15
+
16
+ ## Why
17
+
18
+ The `.d.ts` types describe each argument, but JavaScript (and code written without the types) can pass anything. The binding checks each value as it converts it.
19
+
20
+ ## How to fix
21
+
22
+ Pass what the declaration says. When the value names an unknown string, `didYouMean` lists the closest allowed ones; `data.detail` says what the conversion found.
23
+
24
+ ## Example
25
+
26
+ ```js
27
+ page.blendMode("multiplly"); // throws { code: "invalid-argument", didYouMean: ["multiply"], … }
28
+ ```
29
+
30
+ ## Data fields
31
+
32
+ - `argument`: the parameter that was wrong (`options`, `path`, `mode`, …).
33
+ - `detail`: what the conversion said (untrusted: it may quote the value passed).