| /** | ||
| * Images → one multi-page PDF. | ||
| * | ||
| * The complement of `pixvec doc` (PDF → images): stitch a stack of photos or | ||
| * scans into a single PDF, one image per page. Each page embeds its image as a | ||
| * JPEG stream (`DCTDecode`) sized to the page, so the file stays small and every | ||
| * reader opens it. The PDF is assembled as raw bytes — a JPEG stream cannot | ||
| * survive a round-trip through a JS string — with a correct cross-reference | ||
| * table. Node-only: encoding the pages to JPEG uses the raster codec. | ||
| */ | ||
| import type { RasterImage } from '../types.js'; | ||
| export interface ImagePdfOptions { | ||
| /** Pixels-per-inch used to size each page from its image. Default 96. */ | ||
| dpi?: number; | ||
| /** JPEG quality for the embedded page images, 1–100. Default 85. */ | ||
| quality?: number; | ||
| /** Background the pages are composited onto (images may have alpha). Default white. */ | ||
| background?: { | ||
| r: number; | ||
| g: number; | ||
| b: number; | ||
| }; | ||
| } | ||
| /** One already-encoded JPEG page and its pixel dimensions. */ | ||
| export interface JpegPage { | ||
| jpeg: Uint8Array; | ||
| width: number; | ||
| height: number; | ||
| } | ||
| /** Encode images to JPEG and assemble them into a multi-page PDF. */ | ||
| export declare function imagesToPdf(images: RasterImage[], opts?: ImagePdfOptions): Promise<Uint8Array>; | ||
| /** Assemble already-JPEG pages into a PDF (pure — no codec, exact byte offsets). */ | ||
| export declare function assembleImagePdf(pages: JpegPage[], opts?: { | ||
| dpi?: number; | ||
| }): Uint8Array; | ||
| //# sourceMappingURL=images-pdf.d.ts.map |
| {"version":3,"file":"images-pdf.d.ts","sourceRoot":"","sources":["../../../src/io/images-pdf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uFAAuF;IACvF,UAAU,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAClD;AAED,8DAA8D;AAC9D,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qEAAqE;AACrE,wBAAsB,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,UAAU,CAAC,CAaxG;AAED,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,UAAU,CAyE3F"} |
| "use strict"; | ||
| /** | ||
| * Images → one multi-page PDF. | ||
| * | ||
| * The complement of `pixvec doc` (PDF → images): stitch a stack of photos or | ||
| * scans into a single PDF, one image per page. Each page embeds its image as a | ||
| * JPEG stream (`DCTDecode`) sized to the page, so the file stays small and every | ||
| * reader opens it. The PDF is assembled as raw bytes — a JPEG stream cannot | ||
| * survive a round-trip through a JS string — with a correct cross-reference | ||
| * table. Node-only: encoding the pages to JPEG uses the raster codec. | ||
| */ | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.imagesToPdf = imagesToPdf; | ||
| exports.assembleImagePdf = assembleImagePdf; | ||
| const encode_js_1 = require("./encode.js"); | ||
| /** Encode images to JPEG and assemble them into a multi-page PDF. */ | ||
| async function imagesToPdf(images, opts = {}) { | ||
| if (images.length === 0) | ||
| throw new Error('imagesToPdf needs at least one image.'); | ||
| const quality = opts.quality ?? 85; | ||
| const bg = opts.background ?? { r: 255, g: 255, b: 255 }; | ||
| const pages = []; | ||
| for (const img of images) { | ||
| // JPEG has no alpha; composite over the background so transparency reads as | ||
| // the page colour rather than the codec's default black. | ||
| const opaque = flattenOver(img, bg); | ||
| pages.push({ jpeg: await (0, encode_js_1.encodeRaster)(opaque, { format: 'jpeg', quality }), width: img.width, height: img.height }); | ||
| } | ||
| return assembleImagePdf(pages, { dpi: opts.dpi ?? 96 }); | ||
| } | ||
| /** Assemble already-JPEG pages into a PDF (pure — no codec, exact byte offsets). */ | ||
| function assembleImagePdf(pages, opts = {}) { | ||
| if (pages.length === 0) | ||
| throw new Error('assembleImagePdf needs at least one page.'); | ||
| const dpi = opts.dpi ?? 96; | ||
| const enc = new TextEncoder(); | ||
| const chunks = []; | ||
| let pos = 0; | ||
| const put = (s) => { | ||
| const b = typeof s === 'string' ? enc.encode(s) : s; | ||
| chunks.push(b); | ||
| pos += b.length; | ||
| }; | ||
| // Object numbering: 1 catalog, 2 pages, then per page i: page=3+3i, | ||
| // content=4+3i, image=5+3i. | ||
| const pageObjNum = (i) => 3 + i * 3; | ||
| const offsets = []; // offsets[objNum-1] = byte offset | ||
| const obj = (num, write) => { | ||
| offsets[num - 1] = pos; | ||
| put(`${num} 0 obj\n`); | ||
| write(); | ||
| put('\nendobj\n'); | ||
| }; | ||
| put('%PDF-1.7\n'); | ||
| put(new Uint8Array([0x25, 0xe2, 0xe3, 0xcf, 0xd3, 0x0a])); // binary marker | ||
| obj(1, () => put('<< /Type /Catalog /Pages 2 0 R >>')); | ||
| obj(2, () => { | ||
| const kids = pages.map((_, i) => `${pageObjNum(i)} 0 R`).join(' '); | ||
| put(`<< /Type /Pages /Kids [${kids}] /Count ${pages.length} >>`); | ||
| }); | ||
| const ptPerPx = 72 / dpi; | ||
| pages.forEach((page, i) => { | ||
| const pw = round(page.width * ptPerPx); | ||
| const ph = round(page.height * ptPerPx); | ||
| const pageN = pageObjNum(i); | ||
| const contentN = pageN + 1; | ||
| const imageN = pageN + 2; | ||
| obj(pageN, () => put(`<< /Type /Page /Parent 2 0 R /MediaBox [0 0 ${pw} ${ph}] ` + | ||
| `/Resources << /XObject << /Im0 ${imageN} 0 R >> >> /Contents ${contentN} 0 R >>`)); | ||
| // Draw the image to fill the page. The cm maps the unit image square onto | ||
| // [0,0]-[pw,ph]; PDF images already run top-row-first, so it lands upright. | ||
| const content = `q ${pw} 0 0 ${ph} 0 0 cm /Im0 Do Q`; | ||
| obj(contentN, () => put(`<< /Length ${content.length} >>\nstream\n${content}\nendstream`)); | ||
| obj(imageN, () => { | ||
| put(`<< /Type /XObject /Subtype /Image /Width ${page.width} /Height ${page.height} ` + | ||
| `/ColorSpace /DeviceRGB /BitsPerComponent 8 /Filter /DCTDecode /Length ${page.jpeg.length} >>\nstream\n`); | ||
| put(page.jpeg); | ||
| put('\nendstream'); | ||
| }); | ||
| }); | ||
| const total = 2 + pages.length * 3; // highest object number | ||
| const xrefPos = pos; | ||
| let xref = `xref\n0 ${total + 1}\n0000000000 65535 f \n`; | ||
| for (let i = 1; i <= total; i++) | ||
| xref += `${String(offsets[i - 1] ?? 0).padStart(10, '0')} 00000 n \n`; | ||
| put(xref); | ||
| put(`trailer\n<< /Size ${total + 1} /Root 1 0 R >>\nstartxref\n${xrefPos}\n%%EOF\n`); | ||
| // Concatenate. | ||
| const out = new Uint8Array(pos); | ||
| let o = 0; | ||
| for (const c of chunks) { | ||
| out.set(c, o); | ||
| o += c.length; | ||
| } | ||
| return out; | ||
| } | ||
| /** Composite a (possibly transparent) image over a solid background → opaque RGBA. */ | ||
| function flattenOver(img, bg) { | ||
| const { width, height, data } = img; | ||
| const out = new Uint8ClampedArray(width * height * 4); | ||
| for (let i = 0; i < width * height; i++) { | ||
| const o = i * 4; | ||
| const a = data[o + 3] / 255; | ||
| out[o] = Math.round(data[o] * a + bg.r * (1 - a)); | ||
| out[o + 1] = Math.round(data[o + 1] * a + bg.g * (1 - a)); | ||
| out[o + 2] = Math.round(data[o + 2] * a + bg.b * (1 - a)); | ||
| out[o + 3] = 255; | ||
| } | ||
| return { width, height, data: out }; | ||
| } | ||
| function round(v) { | ||
| return Math.round(v * 100) / 100; | ||
| } | ||
| //# sourceMappingURL=images-pdf.js.map |
| {"version":3,"file":"images-pdf.js","sourceRoot":"","sources":["../../../src/io/images-pdf.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * Images → one multi-page PDF. | ||
| * | ||
| * The complement of `pixvec doc` (PDF → images): stitch a stack of photos or | ||
| * scans into a single PDF, one image per page. Each page embeds its image as a | ||
| * JPEG stream (`DCTDecode`) sized to the page, so the file stays small and every | ||
| * reader opens it. The PDF is assembled as raw bytes — a JPEG stream cannot | ||
| * survive a round-trip through a JS string — with a correct cross-reference | ||
| * table. Node-only: encoding the pages to JPEG uses the raster codec. | ||
| */ | ||
| import type { RasterImage } from '../types.js'; | ||
| export interface ImagePdfOptions { | ||
| /** Pixels-per-inch used to size each page from its image. Default 96. */ | ||
| dpi?: number; | ||
| /** JPEG quality for the embedded page images, 1–100. Default 85. */ | ||
| quality?: number; | ||
| /** Background the pages are composited onto (images may have alpha). Default white. */ | ||
| background?: { | ||
| r: number; | ||
| g: number; | ||
| b: number; | ||
| }; | ||
| } | ||
| /** One already-encoded JPEG page and its pixel dimensions. */ | ||
| export interface JpegPage { | ||
| jpeg: Uint8Array; | ||
| width: number; | ||
| height: number; | ||
| } | ||
| /** Encode images to JPEG and assemble them into a multi-page PDF. */ | ||
| export declare function imagesToPdf(images: RasterImage[], opts?: ImagePdfOptions): Promise<Uint8Array>; | ||
| /** Assemble already-JPEG pages into a PDF (pure — no codec, exact byte offsets). */ | ||
| export declare function assembleImagePdf(pages: JpegPage[], opts?: { | ||
| dpi?: number; | ||
| }): Uint8Array; | ||
| //# sourceMappingURL=images-pdf.d.ts.map |
| {"version":3,"file":"images-pdf.d.ts","sourceRoot":"","sources":["../../../src/io/images-pdf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uFAAuF;IACvF,UAAU,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAClD;AAED,8DAA8D;AAC9D,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qEAAqE;AACrE,wBAAsB,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,UAAU,CAAC,CAaxG;AAED,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,UAAU,CAyE3F"} |
| /** | ||
| * Images → one multi-page PDF. | ||
| * | ||
| * The complement of `pixvec doc` (PDF → images): stitch a stack of photos or | ||
| * scans into a single PDF, one image per page. Each page embeds its image as a | ||
| * JPEG stream (`DCTDecode`) sized to the page, so the file stays small and every | ||
| * reader opens it. The PDF is assembled as raw bytes — a JPEG stream cannot | ||
| * survive a round-trip through a JS string — with a correct cross-reference | ||
| * table. Node-only: encoding the pages to JPEG uses the raster codec. | ||
| */ | ||
| import { encodeRaster } from './encode.js'; | ||
| /** Encode images to JPEG and assemble them into a multi-page PDF. */ | ||
| export async function imagesToPdf(images, opts = {}) { | ||
| if (images.length === 0) | ||
| throw new Error('imagesToPdf needs at least one image.'); | ||
| const quality = opts.quality ?? 85; | ||
| const bg = opts.background ?? { r: 255, g: 255, b: 255 }; | ||
| const pages = []; | ||
| for (const img of images) { | ||
| // JPEG has no alpha; composite over the background so transparency reads as | ||
| // the page colour rather than the codec's default black. | ||
| const opaque = flattenOver(img, bg); | ||
| pages.push({ jpeg: await encodeRaster(opaque, { format: 'jpeg', quality }), width: img.width, height: img.height }); | ||
| } | ||
| return assembleImagePdf(pages, { dpi: opts.dpi ?? 96 }); | ||
| } | ||
| /** Assemble already-JPEG pages into a PDF (pure — no codec, exact byte offsets). */ | ||
| export function assembleImagePdf(pages, opts = {}) { | ||
| if (pages.length === 0) | ||
| throw new Error('assembleImagePdf needs at least one page.'); | ||
| const dpi = opts.dpi ?? 96; | ||
| const enc = new TextEncoder(); | ||
| const chunks = []; | ||
| let pos = 0; | ||
| const put = (s) => { | ||
| const b = typeof s === 'string' ? enc.encode(s) : s; | ||
| chunks.push(b); | ||
| pos += b.length; | ||
| }; | ||
| // Object numbering: 1 catalog, 2 pages, then per page i: page=3+3i, | ||
| // content=4+3i, image=5+3i. | ||
| const pageObjNum = (i) => 3 + i * 3; | ||
| const offsets = []; // offsets[objNum-1] = byte offset | ||
| const obj = (num, write) => { | ||
| offsets[num - 1] = pos; | ||
| put(`${num} 0 obj\n`); | ||
| write(); | ||
| put('\nendobj\n'); | ||
| }; | ||
| put('%PDF-1.7\n'); | ||
| put(new Uint8Array([0x25, 0xe2, 0xe3, 0xcf, 0xd3, 0x0a])); // binary marker | ||
| obj(1, () => put('<< /Type /Catalog /Pages 2 0 R >>')); | ||
| obj(2, () => { | ||
| const kids = pages.map((_, i) => `${pageObjNum(i)} 0 R`).join(' '); | ||
| put(`<< /Type /Pages /Kids [${kids}] /Count ${pages.length} >>`); | ||
| }); | ||
| const ptPerPx = 72 / dpi; | ||
| pages.forEach((page, i) => { | ||
| const pw = round(page.width * ptPerPx); | ||
| const ph = round(page.height * ptPerPx); | ||
| const pageN = pageObjNum(i); | ||
| const contentN = pageN + 1; | ||
| const imageN = pageN + 2; | ||
| obj(pageN, () => put(`<< /Type /Page /Parent 2 0 R /MediaBox [0 0 ${pw} ${ph}] ` + | ||
| `/Resources << /XObject << /Im0 ${imageN} 0 R >> >> /Contents ${contentN} 0 R >>`)); | ||
| // Draw the image to fill the page. The cm maps the unit image square onto | ||
| // [0,0]-[pw,ph]; PDF images already run top-row-first, so it lands upright. | ||
| const content = `q ${pw} 0 0 ${ph} 0 0 cm /Im0 Do Q`; | ||
| obj(contentN, () => put(`<< /Length ${content.length} >>\nstream\n${content}\nendstream`)); | ||
| obj(imageN, () => { | ||
| put(`<< /Type /XObject /Subtype /Image /Width ${page.width} /Height ${page.height} ` + | ||
| `/ColorSpace /DeviceRGB /BitsPerComponent 8 /Filter /DCTDecode /Length ${page.jpeg.length} >>\nstream\n`); | ||
| put(page.jpeg); | ||
| put('\nendstream'); | ||
| }); | ||
| }); | ||
| const total = 2 + pages.length * 3; // highest object number | ||
| const xrefPos = pos; | ||
| let xref = `xref\n0 ${total + 1}\n0000000000 65535 f \n`; | ||
| for (let i = 1; i <= total; i++) | ||
| xref += `${String(offsets[i - 1] ?? 0).padStart(10, '0')} 00000 n \n`; | ||
| put(xref); | ||
| put(`trailer\n<< /Size ${total + 1} /Root 1 0 R >>\nstartxref\n${xrefPos}\n%%EOF\n`); | ||
| // Concatenate. | ||
| const out = new Uint8Array(pos); | ||
| let o = 0; | ||
| for (const c of chunks) { | ||
| out.set(c, o); | ||
| o += c.length; | ||
| } | ||
| return out; | ||
| } | ||
| /** Composite a (possibly transparent) image over a solid background → opaque RGBA. */ | ||
| function flattenOver(img, bg) { | ||
| const { width, height, data } = img; | ||
| const out = new Uint8ClampedArray(width * height * 4); | ||
| for (let i = 0; i < width * height; i++) { | ||
| const o = i * 4; | ||
| const a = data[o + 3] / 255; | ||
| out[o] = Math.round(data[o] * a + bg.r * (1 - a)); | ||
| out[o + 1] = Math.round(data[o + 1] * a + bg.g * (1 - a)); | ||
| out[o + 2] = Math.round(data[o + 2] * a + bg.b * (1 - a)); | ||
| out[o + 3] = 255; | ||
| } | ||
| return { width, height, data: out }; | ||
| } | ||
| function round(v) { | ||
| return Math.round(v * 100) / 100; | ||
| } | ||
| //# sourceMappingURL=images-pdf.js.map |
| {"version":3,"file":"images-pdf.js","sourceRoot":"","sources":["../../../src/io/images-pdf.ts"],"names":[],"mappings":"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"} |
@@ -10,3 +10,3 @@ import { type DecodeOptions } from './io/decode.js'; | ||
| import { type TraceOptions } from './vectorize/trace.js'; | ||
| export declare const VERSION = "1.26.0"; | ||
| export declare const VERSION = "1.27.0"; | ||
| export type VectorizeModeOption = VectorizeMode | 'auto' | 'lossless'; | ||
@@ -13,0 +13,0 @@ export type Preset = 'auto' | 'logo' | 'lineart' | 'poster' | 'photo' | 'detailed' | 'pixelart' | 'exact'; |
+1
-1
@@ -21,3 +21,3 @@ "use strict"; | ||
| const trace_js_1 = require("./vectorize/trace.js"); | ||
| exports.VERSION = '1.26.0'; | ||
| exports.VERSION = '1.27.0'; | ||
| const GENERATOR = `Generated by pixvec v${exports.VERSION}`; | ||
@@ -24,0 +24,0 @@ /** |
@@ -62,3 +62,3 @@ /** | ||
| /** Version of the package this build came from. */ | ||
| export declare const VERSION = "1.26.0"; | ||
| export declare const VERSION = "1.27.0"; | ||
| //# sourceMappingURL=core.d.ts.map |
+1
-1
@@ -194,3 +194,3 @@ "use strict"; | ||
| /** Version of the package this build came from. */ | ||
| exports.VERSION = '1.26.0'; | ||
| exports.VERSION = '1.27.0'; | ||
| //# sourceMappingURL=core.js.map |
@@ -22,2 +22,3 @@ /** | ||
| export { isPdf, renderPdfPages, countPdfPages, type PdfRenderOptions, } from './io/pdf.js'; | ||
| export { imagesToPdf, assembleImagePdf, type ImagePdfOptions, type JpegPage, } from './io/images-pdf.js'; | ||
| export { convertOffice, findSoffice, buildSofficeArgs, OFFICE_FORMATS, type OfficeConvertOptions, type OfficeConvertResult, } from './io/office.js'; | ||
@@ -24,0 +25,0 @@ export { PRESETS, loadRaster, loadAnyAsRaster, vectorize, rasterize, verifySvg, measureFlatness, suggestTitle, type VectorizeOptions, type VectorizeInput, type VectorizeModeOption, type Preset, type RasterizeToBufferOptions, type RasterizeOutcome, } from './api.js'; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,cAAc,WAAW,CAAC;AAG1B,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,KAAK,aAAa,EAClB,KAAK,OAAO,GACb,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,aAAa,GACnB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,YAAY,EACZ,UAAU,EACV,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,cAAc,EACd,eAAe,EACf,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,gBAAgB,GACtB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,aAAa,GACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,aAAa,EACb,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,iBAAiB,GACvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,cAAc,EACd,KAAK,qBAAqB,EAC1B,KAAK,eAAe,GACrB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,KAAK,EACL,cAAc,EACd,aAAa,EACb,KAAK,gBAAgB,GACtB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,OAAO,EACP,UAAU,EACV,eAAe,EACf,SAAS,EACT,SAAS,EACT,SAAS,EACT,eAAe,EACf,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,MAAM,EACX,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,GACtB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAG1E,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,cAAc,WAAW,CAAC;AAG1B,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,KAAK,aAAa,EAClB,KAAK,OAAO,GACb,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,aAAa,GACnB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,YAAY,EACZ,UAAU,EACV,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,cAAc,EACd,eAAe,EACf,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,gBAAgB,GACtB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,aAAa,GACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,aAAa,EACb,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,iBAAiB,GACvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,cAAc,EACd,KAAK,qBAAqB,EAC1B,KAAK,eAAe,GACrB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,KAAK,EACL,cAAc,EACd,aAAa,EACb,KAAK,gBAAgB,GACtB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,QAAQ,GACd,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,OAAO,EACP,UAAU,EACV,eAAe,EACf,SAAS,EACT,SAAS,EACT,SAAS,EACT,eAAe,EACf,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,MAAM,EACX,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,GACtB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAG1E,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC"} |
@@ -29,3 +29,3 @@ "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.VERSION = exports.pixvecPlugin = exports.suggestTitle = exports.measureFlatness = exports.verifySvg = exports.rasterize = exports.vectorize = exports.loadAnyAsRaster = exports.loadRaster = exports.PRESETS = exports.OFFICE_FORMATS = exports.buildSofficeArgs = exports.findSoffice = exports.convertOffice = exports.countPdfPages = exports.renderPdfPages = exports.isPdf = exports.traceAnimation = exports.responsiveSet = exports.faviconSet = exports.extractEmbedded = exports.vectorizeEmbed = exports.baseDirFor = exports.rasterizeSvg = exports.isRasterExtension = exports.formatFromExtension = exports.encodeRaster = exports.looksLikeSvg = exports.decodeRaster = void 0; | ||
| exports.VERSION = exports.pixvecPlugin = exports.suggestTitle = exports.measureFlatness = exports.verifySvg = exports.rasterize = exports.vectorize = exports.loadAnyAsRaster = exports.loadRaster = exports.PRESETS = exports.OFFICE_FORMATS = exports.buildSofficeArgs = exports.findSoffice = exports.convertOffice = exports.assembleImagePdf = exports.imagesToPdf = exports.countPdfPages = exports.renderPdfPages = exports.isPdf = exports.traceAnimation = exports.responsiveSet = exports.faviconSet = exports.extractEmbedded = exports.vectorizeEmbed = exports.baseDirFor = exports.rasterizeSvg = exports.isRasterExtension = exports.formatFromExtension = exports.encodeRaster = exports.looksLikeSvg = exports.decodeRaster = void 0; | ||
| // Everything portable, re-exported so a single import works for Node users. | ||
@@ -62,2 +62,6 @@ __exportStar(require("./core.js"), exports); | ||
| Object.defineProperty(exports, "countPdfPages", { enumerable: true, get: function () { return pdf_js_1.countPdfPages; } }); | ||
| // --- Images → one multi-page PDF (Node-only) ------------------------------- | ||
| var images_pdf_js_1 = require("./io/images-pdf.js"); | ||
| Object.defineProperty(exports, "imagesToPdf", { enumerable: true, get: function () { return images_pdf_js_1.imagesToPdf; } }); | ||
| Object.defineProperty(exports, "assembleImagePdf", { enumerable: true, get: function () { return images_pdf_js_1.assembleImagePdf; } }); | ||
| // --- Office ⇄ PDF via the user's LibreOffice (nothing bundled; Node-only) --- | ||
@@ -64,0 +68,0 @@ var office_js_1 = require("./io/office.js"); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;;;;;;;;;;;;;;;AAEH,4EAA4E;AAC5E,4CAA0B;AAE1B,6EAA6E;AAC7E,4CAKwB;AAJtB,yGAAA,YAAY,OAAA;AACZ,yGAAA,YAAY,OAAA;AAKd,6EAA6E;AAC7E,4CAKwB;AAJtB,yGAAA,YAAY,OAAA;AACZ,gHAAA,mBAAmB,OAAA;AACnB,8GAAA,iBAAiB,OAAA;AAInB,8EAA8E;AAC9E,kDAK2B;AAJzB,4GAAA,YAAY,OAAA;AACZ,0GAAA,UAAU,OAAA;AAKZ,+EAA+E;AAC/E,iDAM8B;AAL5B,0GAAA,cAAc,OAAA;AACd,2GAAA,eAAe,OAAA;AAMjB,8EAA8E;AAC9E,qDAKgC;AAJ9B,wGAAA,UAAU,OAAA;AAKZ,2DAKmC;AAJjC,8GAAA,aAAa,OAAA;AAKf,qDAIgC;AAH9B,4GAAA,cAAc,OAAA;AAKhB,8EAA8E;AAC9E,sCAKqB;AAJnB,+FAAA,KAAK,OAAA;AACL,wGAAA,cAAc,OAAA;AACd,uGAAA,aAAa,OAAA;AAIf,+EAA+E;AAC/E,4CAOwB;AANtB,0GAAA,aAAa,OAAA;AACb,wGAAA,WAAW,OAAA;AACX,6GAAA,gBAAgB,OAAA;AAChB,2GAAA,cAAc,OAAA;AAKhB,8EAA8E;AAC9E,mCAekB;AAdhB,iGAAA,OAAO,OAAA;AACP,oGAAA,UAAU,OAAA;AACV,yGAAA,eAAe,OAAA;AACf,mGAAA,SAAS,OAAA;AACT,mGAAA,SAAS,OAAA;AACT,mGAAA,SAAS,OAAA;AACT,yGAAA,eAAe,OAAA;AACf,sGAAA,YAAY,OAAA;AASd,6EAA6E;AAC7E,4CAA0E;AAAjE,uGAAA,YAAY,OAAA;AAErB,gFAAgF;AAChF,mCAAmC;AAA1B,iGAAA,OAAO,OAAA"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;;;;;;;;;;;;;;;AAEH,4EAA4E;AAC5E,4CAA0B;AAE1B,6EAA6E;AAC7E,4CAKwB;AAJtB,yGAAA,YAAY,OAAA;AACZ,yGAAA,YAAY,OAAA;AAKd,6EAA6E;AAC7E,4CAKwB;AAJtB,yGAAA,YAAY,OAAA;AACZ,gHAAA,mBAAmB,OAAA;AACnB,8GAAA,iBAAiB,OAAA;AAInB,8EAA8E;AAC9E,kDAK2B;AAJzB,4GAAA,YAAY,OAAA;AACZ,0GAAA,UAAU,OAAA;AAKZ,+EAA+E;AAC/E,iDAM8B;AAL5B,0GAAA,cAAc,OAAA;AACd,2GAAA,eAAe,OAAA;AAMjB,8EAA8E;AAC9E,qDAKgC;AAJ9B,wGAAA,UAAU,OAAA;AAKZ,2DAKmC;AAJjC,8GAAA,aAAa,OAAA;AAKf,qDAIgC;AAH9B,4GAAA,cAAc,OAAA;AAKhB,8EAA8E;AAC9E,sCAKqB;AAJnB,+FAAA,KAAK,OAAA;AACL,wGAAA,cAAc,OAAA;AACd,uGAAA,aAAa,OAAA;AAIf,8EAA8E;AAC9E,oDAK4B;AAJ1B,4GAAA,WAAW,OAAA;AACX,iHAAA,gBAAgB,OAAA;AAKlB,+EAA+E;AAC/E,4CAOwB;AANtB,0GAAA,aAAa,OAAA;AACb,wGAAA,WAAW,OAAA;AACX,6GAAA,gBAAgB,OAAA;AAChB,2GAAA,cAAc,OAAA;AAKhB,8EAA8E;AAC9E,mCAekB;AAdhB,iGAAA,OAAO,OAAA;AACP,oGAAA,UAAU,OAAA;AACV,yGAAA,eAAe,OAAA;AACf,mGAAA,SAAS,OAAA;AACT,mGAAA,SAAS,OAAA;AACT,mGAAA,SAAS,OAAA;AACT,yGAAA,eAAe,OAAA;AACf,sGAAA,YAAY,OAAA;AASd,6EAA6E;AAC7E,4CAA0E;AAAjE,uGAAA,YAAY,OAAA;AAErB,gFAAgF;AAChF,mCAAmC;AAA1B,iGAAA,OAAO,OAAA"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"office.d.ts","sourceRoot":"","sources":["../../../src/io/office.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH,wFAAwF;AACxF,eAAO,MAAM,cAAc,iHAGjB,CAAC;AAEX,4FAA4F;AAC5F,wBAAgB,WAAW,IAAI,MAAM,GAAG,IAAI,CAW3C;AAED,MAAM,WAAW,oBAAoB;IACnC,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAE9F;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAAC,mBAAmB,CAAC,CAyB9B"} | ||
| {"version":3,"file":"office.d.ts","sourceRoot":"","sources":["../../../src/io/office.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH,wFAAwF;AACxF,eAAO,MAAM,cAAc,iHAGjB,CAAC;AAEX,4FAA4F;AAC5F,wBAAgB,WAAW,IAAI,MAAM,GAAG,IAAI,CAW3C;AAED,MAAM,WAAW,oBAAoB;IACnC,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAE9F;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAAC,mBAAmB,CAAC,CA+B9B"} |
@@ -60,5 +60,10 @@ "use strict"; | ||
| throw new Error('The output path needs an extension, e.g. -o out.pdf'); | ||
| // Resolve to an absolute path so LibreOffice never mistakes a filename that | ||
| // starts with '-' for an option, and so relative inputs work from any cwd. | ||
| const absInput = (0, node_path_1.resolve)(input); | ||
| if (!(0, node_fs_1.existsSync)(absInput)) | ||
| throw new Error(`Input not found: ${input}`); | ||
| const tmp = await (0, promises_1.mkdtemp)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'pixvec-office-')); | ||
| try { | ||
| const args = buildSofficeArgs(input, targetExt, tmp); | ||
| const args = buildSofficeArgs(absInput, targetExt, tmp); | ||
| const run = opts.run ?? ((b, a) => spawnSoffice(b, a, opts.timeoutMs ?? 120_000)); | ||
@@ -68,7 +73,8 @@ await run(bin, args); | ||
| // path the caller actually asked for. | ||
| const produced = (0, node_path_1.join)(tmp, `${(0, node_path_1.basename)(input, (0, node_path_1.extname)(input))}.${targetExt}`); | ||
| const produced = (0, node_path_1.join)(tmp, `${(0, node_path_1.basename)(absInput, (0, node_path_1.extname)(absInput))}.${targetExt}`); | ||
| if (!(0, node_fs_1.existsSync)(produced)) { | ||
| throw new Error(`LibreOffice produced no ${targetExt.toUpperCase()} — the conversion from ` + | ||
| `${(0, node_path_1.extname)(input) || 'that format'} to .${targetExt} may be unsupported.`); | ||
| `${(0, node_path_1.extname)(absInput) || 'that format'} to .${targetExt} may be unsupported.`); | ||
| } | ||
| await (0, promises_1.mkdir)((0, node_path_1.dirname)((0, node_path_1.resolve)(outPath)), { recursive: true }); | ||
| await (0, promises_1.writeFile)(outPath, await (0, promises_1.readFile)(produced)); | ||
@@ -75,0 +81,0 @@ return { output: outPath, engine: bin }; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"office.js","sourceRoot":"","sources":["../../../src/io/office.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"office.js","sourceRoot":"","sources":["../../../src/io/office.ts"],"names":[],"mappings":"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"} |
@@ -22,2 +22,8 @@ /** | ||
| export declare function isPdf(bytes: Uint8Array): boolean; | ||
| /** | ||
| * Which 0-based page indices a request resolves to: the given `pages` deduped, | ||
| * range-clamped to `count` and sorted, or every page when none are named. | ||
| * Exported so callers can label rendered pages by their real page number. | ||
| */ | ||
| export declare function resolvePageIndices(count: number, pages?: number[]): number[]; | ||
| /** Render selected PDF pages to straight-RGBA {@link RasterImage}s. */ | ||
@@ -24,0 +30,0 @@ export declare function renderPdfPages(bytes: Uint8Array, opts?: PdfRenderOptions): Promise<RasterImage[]>; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"pdf.d.ts","sourceRoot":"","sources":["../../../src/io/pdf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,qFAAqF;IACrF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,+EAA+E;AAC/E,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAQhD;AAED,uEAAuE;AACvE,wBAAsB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CA4B3G;AAED,uDAAuD;AACvD,wBAAsB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAQtE"} | ||
| {"version":3,"file":"pdf.d.ts","sourceRoot":"","sources":["../../../src/io/pdf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,qFAAqF;IACrF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,+EAA+E;AAC/E,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAQhD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAI5E;AAED,uEAAuE;AACvE,wBAAsB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CA+B3G;AAED,uDAAuD;AACvD,wBAAsB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAQtE"} |
+30
-14
@@ -47,2 +47,3 @@ "use strict"; | ||
| exports.isPdf = isPdf; | ||
| exports.resolvePageIndices = resolvePageIndices; | ||
| exports.renderPdfPages = renderPdfPages; | ||
@@ -60,2 +61,12 @@ exports.countPdfPages = countPdfPages; | ||
| } | ||
| /** | ||
| * Which 0-based page indices a request resolves to: the given `pages` deduped, | ||
| * range-clamped to `count` and sorted, or every page when none are named. | ||
| * Exported so callers can label rendered pages by their real page number. | ||
| */ | ||
| function resolvePageIndices(count, pages) { | ||
| return pages && pages.length | ||
| ? [...new Set(pages)].filter((p) => p >= 0 && p < count).sort((a, b) => a - b) | ||
| : Array.from({ length: count }, (_, i) => i); | ||
| } | ||
| /** Render selected PDF pages to straight-RGBA {@link RasterImage}s. */ | ||
@@ -67,18 +78,23 @@ async function renderPdfPages(bytes, opts = {}) { | ||
| try { | ||
| const count = doc.countPages(); | ||
| const wanted = opts.pages && opts.pages.length | ||
| ? [...new Set(opts.pages)].filter((p) => p >= 0 && p < count).sort((a, b) => a - b) | ||
| : Array.from({ length: count }, (_, i) => i); | ||
| const wanted = resolvePageIndices(doc.countPages(), opts.pages); | ||
| const out = []; | ||
| for (const p of wanted) { | ||
| const page = doc.loadPage(p); | ||
| const pix = page.toPixmap(mupdf.Matrix.scale(scale, scale), mupdf.ColorSpace.DeviceRGB, true); | ||
| out.push({ | ||
| width: pix.getWidth(), | ||
| height: pix.getHeight(), | ||
| // getPixels() is RGBA (alpha requested); copy into the owned buffer type. | ||
| data: new Uint8ClampedArray(pix.getPixels()), | ||
| }); | ||
| pix.destroy?.(); | ||
| page.destroy?.(); | ||
| // Own each page/pixmap in its own scope so a mid-loop render failure on one | ||
| // page still frees that page's native (WASM) memory instead of leaking it. | ||
| let page; | ||
| let pix; | ||
| try { | ||
| page = doc.loadPage(p); | ||
| pix = page.toPixmap(mupdf.Matrix.scale(scale, scale), mupdf.ColorSpace.DeviceRGB, true); | ||
| out.push({ | ||
| width: pix.getWidth(), | ||
| height: pix.getHeight(), | ||
| // getPixels() is RGBA (alpha requested); copy into the owned buffer type. | ||
| data: new Uint8ClampedArray(pix.getPixels()), | ||
| }); | ||
| } | ||
| finally { | ||
| pix?.destroy?.(); | ||
| page?.destroy?.(); | ||
| } | ||
| } | ||
@@ -85,0 +101,0 @@ return out; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../../src/io/pdf.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../../src/io/pdf.ts"],"names":[],"mappings":"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"} |
@@ -10,3 +10,3 @@ import { type DecodeOptions } from './io/decode.js'; | ||
| import { type TraceOptions } from './vectorize/trace.js'; | ||
| export declare const VERSION = "1.26.0"; | ||
| export declare const VERSION = "1.27.0"; | ||
| export type VectorizeModeOption = VectorizeMode | 'auto' | 'lossless'; | ||
@@ -13,0 +13,0 @@ export type Preset = 'auto' | 'logo' | 'lineart' | 'poster' | 'photo' | 'detailed' | 'pixelart' | 'exact'; |
+1
-1
@@ -11,3 +11,3 @@ import { basename } from 'node:path'; | ||
| import { trace, TRACE_DEFAULTS } from './vectorize/trace.js'; | ||
| export const VERSION = '1.26.0'; | ||
| export const VERSION = '1.27.0'; | ||
| const GENERATOR = `Generated by pixvec v${VERSION}`; | ||
@@ -14,0 +14,0 @@ /** |
@@ -62,3 +62,3 @@ /** | ||
| /** Version of the package this build came from. */ | ||
| export declare const VERSION = "1.26.0"; | ||
| export declare const VERSION = "1.27.0"; | ||
| //# sourceMappingURL=core.d.ts.map |
+1
-1
@@ -91,3 +91,3 @@ /** | ||
| /** Version of the package this build came from. */ | ||
| export const VERSION = '1.26.0'; | ||
| export const VERSION = '1.27.0'; | ||
| //# sourceMappingURL=core.js.map |
@@ -22,2 +22,3 @@ /** | ||
| export { isPdf, renderPdfPages, countPdfPages, type PdfRenderOptions, } from './io/pdf.js'; | ||
| export { imagesToPdf, assembleImagePdf, type ImagePdfOptions, type JpegPage, } from './io/images-pdf.js'; | ||
| export { convertOffice, findSoffice, buildSofficeArgs, OFFICE_FORMATS, type OfficeConvertOptions, type OfficeConvertResult, } from './io/office.js'; | ||
@@ -24,0 +25,0 @@ export { PRESETS, loadRaster, loadAnyAsRaster, vectorize, rasterize, verifySvg, measureFlatness, suggestTitle, type VectorizeOptions, type VectorizeInput, type VectorizeModeOption, type Preset, type RasterizeToBufferOptions, type RasterizeOutcome, } from './api.js'; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,cAAc,WAAW,CAAC;AAG1B,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,KAAK,aAAa,EAClB,KAAK,OAAO,GACb,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,aAAa,GACnB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,YAAY,EACZ,UAAU,EACV,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,cAAc,EACd,eAAe,EACf,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,gBAAgB,GACtB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,aAAa,GACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,aAAa,EACb,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,iBAAiB,GACvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,cAAc,EACd,KAAK,qBAAqB,EAC1B,KAAK,eAAe,GACrB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,KAAK,EACL,cAAc,EACd,aAAa,EACb,KAAK,gBAAgB,GACtB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,OAAO,EACP,UAAU,EACV,eAAe,EACf,SAAS,EACT,SAAS,EACT,SAAS,EACT,eAAe,EACf,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,MAAM,EACX,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,GACtB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAG1E,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,cAAc,WAAW,CAAC;AAG1B,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,KAAK,aAAa,EAClB,KAAK,OAAO,GACb,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,aAAa,GACnB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,YAAY,EACZ,UAAU,EACV,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,cAAc,EACd,eAAe,EACf,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,gBAAgB,GACtB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,aAAa,GACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,aAAa,EACb,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,iBAAiB,GACvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,cAAc,EACd,KAAK,qBAAqB,EAC1B,KAAK,eAAe,GACrB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,KAAK,EACL,cAAc,EACd,aAAa,EACb,KAAK,gBAAgB,GACtB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,QAAQ,GACd,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,OAAO,EACP,UAAU,EACV,eAAe,EACf,SAAS,EACT,SAAS,EACT,SAAS,EACT,eAAe,EACf,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,MAAM,EACX,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,GACtB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAG1E,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC"} |
@@ -29,2 +29,4 @@ /** | ||
| export { isPdf, renderPdfPages, countPdfPages, } from './io/pdf.js'; | ||
| // --- Images → one multi-page PDF (Node-only) ------------------------------- | ||
| export { imagesToPdf, assembleImagePdf, } from './io/images-pdf.js'; | ||
| // --- Office ⇄ PDF via the user's LibreOffice (nothing bundled; Node-only) --- | ||
@@ -31,0 +33,0 @@ export { convertOffice, findSoffice, buildSofficeArgs, OFFICE_FORMATS, } from './io/office.js'; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,4EAA4E;AAC5E,cAAc,WAAW,CAAC;AAE1B,6EAA6E;AAC7E,OAAO,EACL,YAAY,EACZ,YAAY,GAGb,MAAM,gBAAgB,CAAC;AAExB,6EAA6E;AAC7E,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,GAElB,MAAM,gBAAgB,CAAC;AAExB,8EAA8E;AAC9E,OAAO,EACL,YAAY,EACZ,UAAU,GAGX,MAAM,mBAAmB,CAAC;AAE3B,+EAA+E;AAC/E,OAAO,EACL,cAAc,EACd,eAAe,GAIhB,MAAM,sBAAsB,CAAC;AAE9B,8EAA8E;AAC9E,OAAO,EACL,UAAU,GAIX,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,aAAa,GAId,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,cAAc,GAGf,MAAM,wBAAwB,CAAC;AAEhC,8EAA8E;AAC9E,OAAO,EACL,KAAK,EACL,cAAc,EACd,aAAa,GAEd,MAAM,aAAa,CAAC;AAErB,+EAA+E;AAC/E,OAAO,EACL,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,cAAc,GAGf,MAAM,gBAAgB,CAAC;AAExB,8EAA8E;AAC9E,OAAO,EACL,OAAO,EACP,UAAU,EACV,eAAe,EACf,SAAS,EACT,SAAS,EACT,SAAS,EACT,eAAe,EACf,YAAY,GAOb,MAAM,UAAU,CAAC;AAElB,6EAA6E;AAC7E,OAAO,EAAE,YAAY,EAA4B,MAAM,kBAAkB,CAAC;AAE1E,gFAAgF;AAChF,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,4EAA4E;AAC5E,cAAc,WAAW,CAAC;AAE1B,6EAA6E;AAC7E,OAAO,EACL,YAAY,EACZ,YAAY,GAGb,MAAM,gBAAgB,CAAC;AAExB,6EAA6E;AAC7E,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,GAElB,MAAM,gBAAgB,CAAC;AAExB,8EAA8E;AAC9E,OAAO,EACL,YAAY,EACZ,UAAU,GAGX,MAAM,mBAAmB,CAAC;AAE3B,+EAA+E;AAC/E,OAAO,EACL,cAAc,EACd,eAAe,GAIhB,MAAM,sBAAsB,CAAC;AAE9B,8EAA8E;AAC9E,OAAO,EACL,UAAU,GAIX,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,aAAa,GAId,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,cAAc,GAGf,MAAM,wBAAwB,CAAC;AAEhC,8EAA8E;AAC9E,OAAO,EACL,KAAK,EACL,cAAc,EACd,aAAa,GAEd,MAAM,aAAa,CAAC;AAErB,8EAA8E;AAC9E,OAAO,EACL,WAAW,EACX,gBAAgB,GAGjB,MAAM,oBAAoB,CAAC;AAE5B,+EAA+E;AAC/E,OAAO,EACL,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,cAAc,GAGf,MAAM,gBAAgB,CAAC;AAExB,8EAA8E;AAC9E,OAAO,EACL,OAAO,EACP,UAAU,EACV,eAAe,EACf,SAAS,EACT,SAAS,EACT,SAAS,EACT,eAAe,EACf,YAAY,GAOb,MAAM,UAAU,CAAC;AAElB,6EAA6E;AAC7E,OAAO,EAAE,YAAY,EAA4B,MAAM,kBAAkB,CAAC;AAE1E,gFAAgF;AAChF,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"office.d.ts","sourceRoot":"","sources":["../../../src/io/office.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH,wFAAwF;AACxF,eAAO,MAAM,cAAc,iHAGjB,CAAC;AAEX,4FAA4F;AAC5F,wBAAgB,WAAW,IAAI,MAAM,GAAG,IAAI,CAW3C;AAED,MAAM,WAAW,oBAAoB;IACnC,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAE9F;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAAC,mBAAmB,CAAC,CAyB9B"} | ||
| {"version":3,"file":"office.d.ts","sourceRoot":"","sources":["../../../src/io/office.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH,wFAAwF;AACxF,eAAO,MAAM,cAAc,iHAGjB,CAAC;AAEX,4FAA4F;AAC5F,wBAAgB,WAAW,IAAI,MAAM,GAAG,IAAI,CAW3C;AAED,MAAM,WAAW,oBAAoB;IACnC,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAE9F;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAAC,mBAAmB,CAAC,CA+B9B"} |
@@ -17,5 +17,5 @@ /** | ||
| import { existsSync } from 'node:fs'; | ||
| import { readFile, writeFile, rm, mkdtemp } from 'node:fs/promises'; | ||
| import { readFile, writeFile, rm, mkdtemp, mkdir } from 'node:fs/promises'; | ||
| import { tmpdir } from 'node:os'; | ||
| import { basename, extname, join } from 'node:path'; | ||
| import { basename, dirname, extname, join, resolve } from 'node:path'; | ||
| /** A representative set of formats LibreOffice converts among (for help/validation). */ | ||
@@ -55,5 +55,10 @@ export const OFFICE_FORMATS = [ | ||
| throw new Error('The output path needs an extension, e.g. -o out.pdf'); | ||
| // Resolve to an absolute path so LibreOffice never mistakes a filename that | ||
| // starts with '-' for an option, and so relative inputs work from any cwd. | ||
| const absInput = resolve(input); | ||
| if (!existsSync(absInput)) | ||
| throw new Error(`Input not found: ${input}`); | ||
| const tmp = await mkdtemp(join(tmpdir(), 'pixvec-office-')); | ||
| try { | ||
| const args = buildSofficeArgs(input, targetExt, tmp); | ||
| const args = buildSofficeArgs(absInput, targetExt, tmp); | ||
| const run = opts.run ?? ((b, a) => spawnSoffice(b, a, opts.timeoutMs ?? 120_000)); | ||
@@ -63,7 +68,8 @@ await run(bin, args); | ||
| // path the caller actually asked for. | ||
| const produced = join(tmp, `${basename(input, extname(input))}.${targetExt}`); | ||
| const produced = join(tmp, `${basename(absInput, extname(absInput))}.${targetExt}`); | ||
| if (!existsSync(produced)) { | ||
| throw new Error(`LibreOffice produced no ${targetExt.toUpperCase()} — the conversion from ` + | ||
| `${extname(input) || 'that format'} to .${targetExt} may be unsupported.`); | ||
| `${extname(absInput) || 'that format'} to .${targetExt} may be unsupported.`); | ||
| } | ||
| await mkdir(dirname(resolve(outPath)), { recursive: true }); | ||
| await writeFile(outPath, await readFile(produced)); | ||
@@ -70,0 +76,0 @@ return { output: outPath, engine: bin }; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"office.js","sourceRoot":"","sources":["../../../src/io/office.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"office.js","sourceRoot":"","sources":["../../../src/io/office.ts"],"names":[],"mappings":"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"} |
@@ -22,2 +22,8 @@ /** | ||
| export declare function isPdf(bytes: Uint8Array): boolean; | ||
| /** | ||
| * Which 0-based page indices a request resolves to: the given `pages` deduped, | ||
| * range-clamped to `count` and sorted, or every page when none are named. | ||
| * Exported so callers can label rendered pages by their real page number. | ||
| */ | ||
| export declare function resolvePageIndices(count: number, pages?: number[]): number[]; | ||
| /** Render selected PDF pages to straight-RGBA {@link RasterImage}s. */ | ||
@@ -24,0 +30,0 @@ export declare function renderPdfPages(bytes: Uint8Array, opts?: PdfRenderOptions): Promise<RasterImage[]>; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"pdf.d.ts","sourceRoot":"","sources":["../../../src/io/pdf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,qFAAqF;IACrF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,+EAA+E;AAC/E,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAQhD;AAED,uEAAuE;AACvE,wBAAsB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CA4B3G;AAED,uDAAuD;AACvD,wBAAsB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAQtE"} | ||
| {"version":3,"file":"pdf.d.ts","sourceRoot":"","sources":["../../../src/io/pdf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,qFAAqF;IACrF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,+EAA+E;AAC/E,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAQhD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAI5E;AAED,uEAAuE;AACvE,wBAAsB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CA+B3G;AAED,uDAAuD;AACvD,wBAAsB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAQtE"} |
+29
-14
@@ -21,2 +21,12 @@ /** | ||
| } | ||
| /** | ||
| * Which 0-based page indices a request resolves to: the given `pages` deduped, | ||
| * range-clamped to `count` and sorted, or every page when none are named. | ||
| * Exported so callers can label rendered pages by their real page number. | ||
| */ | ||
| export function resolvePageIndices(count, pages) { | ||
| return pages && pages.length | ||
| ? [...new Set(pages)].filter((p) => p >= 0 && p < count).sort((a, b) => a - b) | ||
| : Array.from({ length: count }, (_, i) => i); | ||
| } | ||
| /** Render selected PDF pages to straight-RGBA {@link RasterImage}s. */ | ||
@@ -28,18 +38,23 @@ export async function renderPdfPages(bytes, opts = {}) { | ||
| try { | ||
| const count = doc.countPages(); | ||
| const wanted = opts.pages && opts.pages.length | ||
| ? [...new Set(opts.pages)].filter((p) => p >= 0 && p < count).sort((a, b) => a - b) | ||
| : Array.from({ length: count }, (_, i) => i); | ||
| const wanted = resolvePageIndices(doc.countPages(), opts.pages); | ||
| const out = []; | ||
| for (const p of wanted) { | ||
| const page = doc.loadPage(p); | ||
| const pix = page.toPixmap(mupdf.Matrix.scale(scale, scale), mupdf.ColorSpace.DeviceRGB, true); | ||
| out.push({ | ||
| width: pix.getWidth(), | ||
| height: pix.getHeight(), | ||
| // getPixels() is RGBA (alpha requested); copy into the owned buffer type. | ||
| data: new Uint8ClampedArray(pix.getPixels()), | ||
| }); | ||
| pix.destroy?.(); | ||
| page.destroy?.(); | ||
| // Own each page/pixmap in its own scope so a mid-loop render failure on one | ||
| // page still frees that page's native (WASM) memory instead of leaking it. | ||
| let page; | ||
| let pix; | ||
| try { | ||
| page = doc.loadPage(p); | ||
| pix = page.toPixmap(mupdf.Matrix.scale(scale, scale), mupdf.ColorSpace.DeviceRGB, true); | ||
| out.push({ | ||
| width: pix.getWidth(), | ||
| height: pix.getHeight(), | ||
| // getPixels() is RGBA (alpha requested); copy into the owned buffer type. | ||
| data: new Uint8ClampedArray(pix.getPixels()), | ||
| }); | ||
| } | ||
| finally { | ||
| pix?.destroy?.(); | ||
| page?.destroy?.(); | ||
| } | ||
| } | ||
@@ -46,0 +61,0 @@ return out; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../../src/io/pdf.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../../src/io/pdf.ts"],"names":[],"mappings":"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"} |
+1
-1
| { | ||
| "name": "pixvec", | ||
| "version": "1.26.0", | ||
| "version": "1.27.0", | ||
| "description": "Measurable raster <-> SVG conversion. Pixel-exact lossless vectorization, quality-targeted Bezier tracing, and exact SVG rasterization - with built-in PSNR/SSIM/CIEDE2000 verification. Reads PNG, JPEG, WebP, AVIF, TIFF, GIF, BMP, ICO, PNM and TGA.", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
+3
-0
@@ -415,2 +415,3 @@ # Pixvec | ||
| pixvec office report.docx -o report.pdf # Word/Excel/PPT ⇄ PDF (uses your LibreOffice) | ||
| pixvec pdf page1.png page2.jpg -o album.pdf # combine images into one multi-page PDF | ||
| pixvec centerline drawing.png -o strokes.svg # single-stroke medial-axis paths | ||
@@ -467,2 +468,4 @@ pixvec gcode drawing.png --tool laser --feed 800 # ready-to-run laser/plotter G-code | ||
| **Images → one PDF** — `pixvec pdf scan1.png scan2.jpg -o album.pdf` stitches a stack of photos or scans into a single multi-page PDF, one image per page, sized at any `--dpi`. The PDF is assembled from raw bytes with a correct cross-reference table (each page embedded as a `DCTDecode` JPEG), so it stays small and opens everywhere — the natural complement to `pixvec doc` (PDF → images). `imagesToPdf()` / `assembleImagePdf()` are exported. | ||
| **Office documents ⇄ PDF** — `pixvec office report.docx -o report.pdf` (and the reverse, `scan.pdf -o out.docx`, plus Excel, PowerPoint, ODF, RTF, HTML, CSV — any pair LibreOffice bridges). Faithfully rendering Word/Excel/PowerPoint needs a full office engine, so — exactly as with PDFs — pixvec **bundles nothing** and drives your **local LibreOffice** through a plain child process: **zero added dependencies, the install stays tiny, and your documents never leave the machine** (no cloud upload, unlike most converters). The target format is inferred from the output extension; if LibreOffice isn't found the error tells you how to install it or points `PIXVEC_SOFFICE` at the binary. `convertOffice()` is exported for programmatic use. | ||
@@ -469,0 +472,0 @@ |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Unpublished package
Supply chain riskPackage version was not found on the registry. It may exist on a different registry and need to be configured to pull from that registry.
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Unpublished package
Supply chain riskPackage version was not found on the registry. It may exist on a different registry and need to be configured to pull from that registry.
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
2167910
1.64%489
1.66%25718
1.6%544
0.55%