pdf-codec 5.3.29 → 5.3.30

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.
package/dist/index.cjs CHANGED
@@ -10,6 +10,7 @@ const require_image_jpeg2000 = require("./image/jpeg2000.cjs");
10
10
  const require_layout = require("./layout.cjs");
11
11
  const require_diagnostics = require("./diagnostics.cjs");
12
12
  const require_fonts = require("./fonts.cjs");
13
+ const require_text_group = require("./text-group.cjs");
13
14
  const require_read = require("./read.cjs");
14
15
  const require_encrypt_write = require("./encrypt-write.cjs");
15
16
  const require_math_stretch = require("./math-stretch.cjs");
@@ -19,8 +20,7 @@ const require_measure = require("./measure.cjs");
19
20
  const require_write = require("./write.cjs");
20
21
  const require_codec = require("./codec.cjs");
21
22
  const require_font_face = require("./font-face.cjs");
22
- const require_text_group = require("./text-group.cjs");
23
- const require_raster = require("./raster-EG2KYRZ0.cjs");
23
+ const require_raster = require("./raster-HUE5bw5s.cjs");
24
24
  exports.DEFAULT_BASELINE_TOLERANCE_EM = require_text_group.DEFAULT_BASELINE_TOLERANCE_EM;
25
25
  exports.DEFAULT_COLUMN_GAP_EM = require_text_group.DEFAULT_COLUMN_GAP_EM;
26
26
  exports.DEFAULT_VERTICAL_METRIC_POLICY = require_measure.DEFAULT_VERTICAL_METRIC_POLICY;
package/dist/index.js CHANGED
@@ -9,6 +9,7 @@ import { decodeJpeg2000, readJpeg2000Metadata } from "./image/jpeg2000.js";
9
9
  import { LAYOUT_FORMAT_VERSION, LayoutAnnotationQuadSchema, LayoutAnnotationSchema, LayoutAttachmentSchema, LayoutDestinationSchema, LayoutDestinationTargetSchema, LayoutDocumentSchema, LayoutEllipseSchema, LayoutFormFieldSchema, LayoutFormWidgetSchema, LayoutImageAssetSchema, LayoutImageSchema, LayoutInternalLinkSchema, LayoutItemSchema, LayoutLayerSchema, LayoutLineSchema, LayoutLinkSchema, LayoutOutlineItemSchema, LayoutPageSchema, LayoutPathSchema, LayoutPathSegmentSchema, LayoutRectSchema, LayoutStructureElementSchema, LayoutSubpathSchema, LayoutTextSchema } from "./layout.js";
10
10
  import { NOOP_DIAGNOSTIC_SINK, PdfEncryptedError, PdfParseError, PdfPasswordRequiredError } from "./diagnostics.js";
11
11
  import { resolveStandardFont } from "./fonts.js";
12
+ import { DEFAULT_BASELINE_TOLERANCE_EM, DEFAULT_COLUMN_GAP_EM, DEFAULT_WORD_GAP_EM, groupPdfTextRuns, runGapPt, runsShareBaseline } from "./text-group.js";
12
13
  import { readPdf } from "./read.js";
13
14
  import { PdfEncryptionError } from "./encrypt-write.js";
14
15
  import { assembleStretchyGlyph, scaleMathStretchConstruction } from "./math-stretch.js";
@@ -18,7 +19,6 @@ import { DEFAULT_VERTICAL_METRIC_POLICY, createFontMeasurer, createStandardFontM
18
19
  import { writePdf } from "./write.js";
19
20
  import { PdfBytesSchema, pdfCodec } from "./codec.js";
20
21
  import { FontFaceParseError, readFontFace } from "./font-face.js";
21
- import { DEFAULT_BASELINE_TOLERANCE_EM, DEFAULT_COLUMN_GAP_EM, DEFAULT_WORD_GAP_EM, groupPdfTextRuns, runGapPt, runsShareBaseline } from "./text-group.js";
22
- import { r as renderPdfPage } from "./raster-Cdm3idP_.js";
22
+ import { r as renderPdfPage } from "./raster-DUmwfi3F.js";
23
23
  export * from "byte-codec";
24
24
  export { DEFAULT_BASELINE_TOLERANCE_EM, DEFAULT_COLUMN_GAP_EM, DEFAULT_VERTICAL_METRIC_POLICY, DEFAULT_WORD_GAP_EM, FontFaceParseError, Jbig2ParseError, Jbig2UnsupportedError, Jpeg2000ParseError, Jpeg2000UnsupportedError, LAYOUT_FORMAT_VERSION, LayoutAnnotationQuadSchema, LayoutAnnotationSchema, LayoutAttachmentSchema, LayoutDestinationSchema, LayoutDestinationTargetSchema, LayoutDocumentSchema, LayoutEllipseSchema, LayoutFormFieldSchema, LayoutFormWidgetSchema, LayoutImageAssetSchema, LayoutImageSchema, LayoutInternalLinkSchema, LayoutItemSchema, LayoutLayerSchema, LayoutLineSchema, LayoutLinkSchema, LayoutOutlineItemSchema, LayoutPageSchema, LayoutPathSchema, LayoutPathSegmentSchema, LayoutRectSchema, LayoutStructureElementSchema, LayoutSubpathSchema, LayoutTextSchema, NOOP_DIAGNOSTIC_SINK, PdfBytesSchema, PdfEncryptedError, PdfEncryptionError, PdfParseError, PdfPasswordRequiredError, STANDARD_METRICS, assembleStretchyGlyph, createFontMeasurer, createFontRegistry, createStandardFontMeasurer, decodeCcittFax, decodeJbig2Embedded, decodeJpeg2000, filterScanlines, groupPdfTextRuns, loadMathFont, looksLikeBareCodestream, parseJp2Container, pdfCodec, readFontFace, readJpeg2000Metadata, readPdf, renderPdfPage, resolveFaceWithRegistry, resolveStandardFont, runGapPt, runsShareBaseline, scaleMathStretchConstruction, unfilterScanlines, writePdf };
@@ -2,6 +2,7 @@ import { asArray, asName, asNumber, dictGet } from "./objects.js";
2
2
  import { IDENTITY_MATRIX, applyMatrix, multiplyMatrices, translationMatrix } from "./matrix.js";
3
3
  import { decodeStream } from "./filters.js";
4
4
  import { readContentStream } from "./content-read.js";
5
+ import "./text-group.js";
5
6
  import { MarkedContentStack, classifyShape, strokeStyleFromDashArray } from "./interpret-shapes.js";
6
7
  import { markedContentProperties, markedContentScopeProps } from "./interpret-marked.js";
7
8
  import { COLOR_BLACK } from "document-schema.js";
@@ -269,10 +270,35 @@ function runContentStream(bytes, resources, initialState, context, depth, marked
269
270
  const fontResourceName = gs.fontResourceName;
270
271
  if (fontResourceName === void 0) return;
271
272
  const vertical = context.fontMetrics.isVertical(fontResourceName, resources);
272
- const startMatrix = computeTrm(gs, text);
273
- const chunks = [];
273
+ let startMatrix = computeTrm(gs, text);
274
+ let chunks = [];
274
275
  let totalLength = 0;
275
276
  let firstGlyphPosition;
277
+ const flushRun = () => {
278
+ if (totalLength === 0) return;
279
+ const combined = new Uint8Array(totalLength);
280
+ let at = 0;
281
+ for (const chunk of chunks) {
282
+ combined.set(chunk, at);
283
+ at += chunk.length;
284
+ }
285
+ const endMatrix = computeTrm(gs, text);
286
+ const shift = firstGlyphPosition === void 0 ? void 0 : translationMatrix(-firstGlyphPosition.x, -firstGlyphPosition.y);
287
+ pushItem({
288
+ kind: "text",
289
+ codes: combined,
290
+ fontResourceName,
291
+ resources,
292
+ startMatrix: shift === void 0 ? startMatrix : multiplyMatrices(shift, startMatrix),
293
+ endMatrix: shift === void 0 ? endMatrix : multiplyMatrices(shift, endMatrix),
294
+ sizePt: gs.fontSizePt,
295
+ color: gs.fillColor,
296
+ ...vertical ? { vertical: true } : {}
297
+ });
298
+ chunks = [];
299
+ totalLength = 0;
300
+ firstGlyphPosition = void 0;
301
+ };
276
302
  for (const el of elements) if (el.kind === "string") {
277
303
  firstGlyphPosition ??= vertical ? positionVectorOf(el.bytes) : void 0;
278
304
  chunks.push(el.bytes);
@@ -280,28 +306,12 @@ function runContentStream(bytes, resources, initialState, context, depth, marked
280
306
  advanceThroughString(el.bytes);
281
307
  } else if (el.kind === "number") {
282
308
  const adjustment = -(el.value / GLYPH_SPACE_PER_TEXT_SPACE_UNIT) * gs.fontSizePt;
309
+ const endsRun = !vertical && totalLength > 0 && adjustment >= .125 * gs.fontSizePt;
310
+ if (endsRun) flushRun();
283
311
  text.tm = multiplyMatrices(vertical ? translationMatrix(0, adjustment) : translationMatrix(adjustment * gs.horizScale, 0), text.tm);
312
+ if (endsRun) startMatrix = computeTrm(gs, text);
284
313
  }
285
- if (totalLength === 0) return;
286
- const combined = new Uint8Array(totalLength);
287
- let at = 0;
288
- for (const chunk of chunks) {
289
- combined.set(chunk, at);
290
- at += chunk.length;
291
- }
292
- const endMatrix = computeTrm(gs, text);
293
- const shift = firstGlyphPosition === void 0 ? void 0 : translationMatrix(-firstGlyphPosition.x, -firstGlyphPosition.y);
294
- pushItem({
295
- kind: "text",
296
- codes: combined,
297
- fontResourceName,
298
- resources,
299
- startMatrix: shift === void 0 ? startMatrix : multiplyMatrices(shift, startMatrix),
300
- endMatrix: shift === void 0 ? endMatrix : multiplyMatrices(shift, endMatrix),
301
- sizePt: gs.fontSizePt,
302
- color: gs.fillColor,
303
- ...vertical ? { vertical: true } : {}
304
- });
314
+ flushRun();
305
315
  };
306
316
  const showText = (textBytes) => {
307
317
  showTextArray([{
@@ -2,6 +2,7 @@ const require_objects = require("./objects.cjs");
2
2
  const require_matrix = require("./matrix.cjs");
3
3
  const require_filters = require("./filters.cjs");
4
4
  const require_content_read = require("./content-read.cjs");
5
+ require("./text-group.cjs");
5
6
  const require_interpret_shapes = require("./interpret-shapes.cjs");
6
7
  const require_interpret_marked = require("./interpret-marked.cjs");
7
8
  let document_schema_js = require("document-schema.js");
@@ -269,10 +270,35 @@ function runContentStream(bytes, resources, initialState, context, depth, marked
269
270
  const fontResourceName = gs.fontResourceName;
270
271
  if (fontResourceName === void 0) return;
271
272
  const vertical = context.fontMetrics.isVertical(fontResourceName, resources);
272
- const startMatrix = computeTrm(gs, text);
273
- const chunks = [];
273
+ let startMatrix = computeTrm(gs, text);
274
+ let chunks = [];
274
275
  let totalLength = 0;
275
276
  let firstGlyphPosition;
277
+ const flushRun = () => {
278
+ if (totalLength === 0) return;
279
+ const combined = new Uint8Array(totalLength);
280
+ let at = 0;
281
+ for (const chunk of chunks) {
282
+ combined.set(chunk, at);
283
+ at += chunk.length;
284
+ }
285
+ const endMatrix = computeTrm(gs, text);
286
+ const shift = firstGlyphPosition === void 0 ? void 0 : require_matrix.translationMatrix(-firstGlyphPosition.x, -firstGlyphPosition.y);
287
+ pushItem({
288
+ kind: "text",
289
+ codes: combined,
290
+ fontResourceName,
291
+ resources,
292
+ startMatrix: shift === void 0 ? startMatrix : require_matrix.multiplyMatrices(shift, startMatrix),
293
+ endMatrix: shift === void 0 ? endMatrix : require_matrix.multiplyMatrices(shift, endMatrix),
294
+ sizePt: gs.fontSizePt,
295
+ color: gs.fillColor,
296
+ ...vertical ? { vertical: true } : {}
297
+ });
298
+ chunks = [];
299
+ totalLength = 0;
300
+ firstGlyphPosition = void 0;
301
+ };
276
302
  for (const el of elements) if (el.kind === "string") {
277
303
  firstGlyphPosition ??= vertical ? positionVectorOf(el.bytes) : void 0;
278
304
  chunks.push(el.bytes);
@@ -280,28 +306,12 @@ function runContentStream(bytes, resources, initialState, context, depth, marked
280
306
  advanceThroughString(el.bytes);
281
307
  } else if (el.kind === "number") {
282
308
  const adjustment = -(el.value / GLYPH_SPACE_PER_TEXT_SPACE_UNIT) * gs.fontSizePt;
309
+ const endsRun = !vertical && totalLength > 0 && adjustment >= .125 * gs.fontSizePt;
310
+ if (endsRun) flushRun();
283
311
  text.tm = require_matrix.multiplyMatrices(vertical ? require_matrix.translationMatrix(0, adjustment) : require_matrix.translationMatrix(adjustment * gs.horizScale, 0), text.tm);
312
+ if (endsRun) startMatrix = computeTrm(gs, text);
284
313
  }
285
- if (totalLength === 0) return;
286
- const combined = new Uint8Array(totalLength);
287
- let at = 0;
288
- for (const chunk of chunks) {
289
- combined.set(chunk, at);
290
- at += chunk.length;
291
- }
292
- const endMatrix = computeTrm(gs, text);
293
- const shift = firstGlyphPosition === void 0 ? void 0 : require_matrix.translationMatrix(-firstGlyphPosition.x, -firstGlyphPosition.y);
294
- pushItem({
295
- kind: "text",
296
- codes: combined,
297
- fontResourceName,
298
- resources,
299
- startMatrix: shift === void 0 ? startMatrix : require_matrix.multiplyMatrices(shift, startMatrix),
300
- endMatrix: shift === void 0 ? endMatrix : require_matrix.multiplyMatrices(shift, endMatrix),
301
- sizePt: gs.fontSizePt,
302
- color: gs.fillColor,
303
- ...vertical ? { vertical: true } : {}
304
- });
314
+ flushRun();
305
315
  };
306
316
  const showText = (textBytes) => {
307
317
  showTextArray([{
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_interpret = require("./interpret-CqXdXgkY.cjs");
2
+ const require_interpret = require("./interpret-BDVrFWhd.cjs");
3
3
  exports.cmykColor = require_interpret.cmykColor;
4
4
  exports.genericColor = require_interpret.genericColor;
5
5
  exports.grayColor = require_interpret.grayColor;
@@ -1,2 +1,2 @@
1
- import { a as grayColor, i as genericColor, o as rgbColor, r as cmykColor } from "./interpret-aWWhdIzr.js";
1
+ import { a as grayColor, i as genericColor, o as rgbColor, r as cmykColor } from "./interpret---0lZPlv.js";
2
2
  export { cmykColor, genericColor, grayColor, rgbColor };
@@ -1,4 +1,4 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_interpret = require("./interpret-CqXdXgkY.cjs");
2
+ const require_interpret = require("./interpret-BDVrFWhd.cjs");
3
3
  exports.interpretContentStream = require_interpret.interpretContentStream;
4
4
  exports.numAt = require_interpret.numAt;
package/dist/interpret.js CHANGED
@@ -1,2 +1,2 @@
1
- import { n as numAt, t as interpretContentStream } from "./interpret-aWWhdIzr.js";
1
+ import { n as numAt, t as interpretContentStream } from "./interpret---0lZPlv.js";
2
2
  export { interpretContentStream, numAt };
@@ -11,7 +11,7 @@ import { NOOP_DIAGNOSTIC_SINK, PdfParseError } from "./diagnostics.js";
11
11
  import { openPdfDocument } from "./document.js";
12
12
  import { throwIfAborted } from "./util/abort.js";
13
13
  import { createFontResolver } from "./font-read.js";
14
- import { t as interpretContentStream } from "./interpret-aWWhdIzr.js";
14
+ import { t as interpretContentStream } from "./interpret---0lZPlv.js";
15
15
  import { normalizeRotation, pageRotationTransform } from "./read.js";
16
16
  import { parseGlyf } from "./glyf.js";
17
17
  import { decodeGlyphOutline } from "./glyf-contours.js";
@@ -11,7 +11,7 @@ const require_diagnostics = require("./diagnostics.cjs");
11
11
  const require_document = require("./document.cjs");
12
12
  const require_util_abort = require("./util/abort.cjs");
13
13
  const require_font_read = require("./font-read.cjs");
14
- const require_interpret = require("./interpret-CqXdXgkY.cjs");
14
+ const require_interpret = require("./interpret-BDVrFWhd.cjs");
15
15
  const require_read = require("./read.cjs");
16
16
  const require_glyf = require("./glyf.cjs");
17
17
  const require_glyf_contours = require("./glyf-contours.cjs");
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_raster = require("./raster-EG2KYRZ0.cjs");
2
+ const require_raster = require("./raster-HUE5bw5s.cjs");
3
3
  exports.drawGlyphOutline = require_raster.drawGlyphOutline;
4
4
  exports.drawTextRun = require_raster.drawTextRun;
5
5
  exports.glyphOutlineSubpaths = require_raster.glyphOutlineSubpaths;
@@ -1,2 +1,2 @@
1
- import { a as drawTextRun, i as drawGlyphOutline, o as glyphOutlineSubpaths } from "./raster-Cdm3idP_.js";
1
+ import { a as drawTextRun, i as drawGlyphOutline, o as glyphOutlineSubpaths } from "./raster-DUmwfi3F.js";
2
2
  export { drawGlyphOutline, drawTextRun, glyphOutlineSubpaths };
package/dist/raster.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_raster = require("./raster-EG2KYRZ0.cjs");
2
+ const require_raster = require("./raster-HUE5bw5s.cjs");
3
3
  exports.EXTENT_ZERO_EPSILON = require_raster.EXTENT_ZERO_EPSILON;
4
4
  exports.flattenCubic = require_raster.flattenCubic;
5
5
  exports.renderPdfPage = require_raster.renderPdfPage;
package/dist/raster.js CHANGED
@@ -1,2 +1,2 @@
1
- import { n as flattenCubic, r as renderPdfPage, t as EXTENT_ZERO_EPSILON } from "./raster-Cdm3idP_.js";
1
+ import { n as flattenCubic, r as renderPdfPage, t as EXTENT_ZERO_EPSILON } from "./raster-DUmwfi3F.js";
2
2
  export { EXTENT_ZERO_EPSILON, flattenCubic, renderPdfPage };
package/dist/read.cjs CHANGED
@@ -17,7 +17,7 @@ const require_diagnostics = require("./diagnostics.cjs");
17
17
  const require_document = require("./document.cjs");
18
18
  const require_util_abort = require("./util/abort.cjs");
19
19
  const require_font_read = require("./font-read.cjs");
20
- const require_interpret = require("./interpret-CqXdXgkY.cjs");
20
+ const require_interpret = require("./interpret-BDVrFWhd.cjs");
21
21
  const require_navigation = require("./navigation.cjs");
22
22
  //#region src/read.ts
23
23
  const PDF_HEADER_BYTES = new TextEncoder().encode("%PDF-");
package/dist/read.js CHANGED
@@ -16,7 +16,7 @@ import { NOOP_DIAGNOSTIC_SINK, PdfParseError } from "./diagnostics.js";
16
16
  import { openPdfDocument } from "./document.js";
17
17
  import { throwIfAborted } from "./util/abort.js";
18
18
  import { createFontResolver } from "./font-read.js";
19
- import { t as interpretContentStream } from "./interpret-aWWhdIzr.js";
19
+ import { t as interpretContentStream } from "./interpret---0lZPlv.js";
20
20
  import { createDestinationRegistry, readOutline } from "./navigation.js";
21
21
  //#region src/read.ts
22
22
  const PDF_HEADER_BYTES = new TextEncoder().encode("%PDF-");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pdf-codec",
3
- "version": "5.3.29",
3
+ "version": "5.3.30",
4
4
  "description": "Hand-written, dependency-minimal PDF codec: parses arbitrary real-world PDFs and generates new ones, built on its own codec-owned LayoutDocument item model and Zod 4 codecs.",
5
5
  "type": "module",
6
6
  "repository": {