53 lines
2.0 KiB
JavaScript
53 lines
2.0 KiB
JavaScript
const fs = require('fs')
|
|
const path = require('path')
|
|
const { createCanvas, DOMMatrix, ImageData, Path2D } = require('@napi-rs/canvas')
|
|
|
|
global.DOMMatrix = DOMMatrix
|
|
global.ImageData = ImageData
|
|
global.Path2D = Path2D
|
|
if (!process.getBuiltinModule) process.getBuiltinModule = name => require(name)
|
|
|
|
async function main() {
|
|
const pdfjs = await import('pdfjs-dist/legacy/build/pdf.mjs')
|
|
const root = path.resolve(__dirname, '..', '..')
|
|
const pdfPath = path.resolve(root, 'doc', '大连元利流体技术有限公司MES系统标准技术文档_V1.0_2026-07-24.pdf')
|
|
const task = pdfjs.getDocument({
|
|
data: new Uint8Array(fs.readFileSync(pdfPath)),
|
|
disableWorker: true
|
|
})
|
|
const pdf = await task.promise
|
|
const requested = process.argv.slice(2).map(Number).filter(Number.isInteger)
|
|
|
|
if (requested.length === 0) {
|
|
for (let pageNumber = 1; pageNumber <= pdf.numPages; pageNumber++) {
|
|
const page = await pdf.getPage(pageNumber)
|
|
const content = await page.getTextContent()
|
|
const text = content.items.map(item => item.str).join(' ').replace(/\s+/g, ' ').trim()
|
|
console.log(`${pageNumber}\t${text.slice(0, 110)}`)
|
|
}
|
|
return
|
|
}
|
|
|
|
for (const pageNumber of requested) {
|
|
if (pageNumber < 1 || pageNumber > pdf.numPages) {
|
|
throw new Error(`Page ${pageNumber} is outside 1-${pdf.numPages}`)
|
|
}
|
|
const page = await pdf.getPage(pageNumber)
|
|
const viewport = page.getViewport({ scale: 1.6 })
|
|
const canvas = createCanvas(Math.ceil(viewport.width), Math.ceil(viewport.height))
|
|
const context = canvas.getContext('2d')
|
|
context.fillStyle = '#ffffff'
|
|
context.fillRect(0, 0, canvas.width, canvas.height)
|
|
await page.render({ canvasContext: context, viewport }).promise
|
|
const outputPath = path.resolve(__dirname, `technical-pdf-page-${pageNumber}.png`)
|
|
fs.writeFileSync(outputPath, canvas.toBuffer('image/png'))
|
|
console.log(`Rendered: ${outputPath}`)
|
|
}
|
|
console.log(`PDF pages: ${pdf.numPages}`)
|
|
}
|
|
|
|
main().catch(error => {
|
|
console.error(error.stack || error.message)
|
|
process.exitCode = 1
|
|
})
|