Files
Agentic-AI/scripts/t-docverify.mjs
T

56 lines
2.3 KiB
JavaScript

import fs from 'node:fs';
import ExcelJS from 'exceljs';
const out = 'C:/Users/HP/AppData/Local/Temp/claude/c--Users-HP-Desktop-Dev-Agentic-AI/8b30e040-7edd-46bd-97f0-c9d03d3965cf/scratchpad';
// ── PDF: header, page count, embedded images ──
const pdf = fs.readFileSync(`${out}/report.pdf`);
const pdfStr = pdf.toString('latin1');
const pages = (pdfStr.match(/\/Type\s*\/Page[^s]/g) || []).length;
const images = (pdfStr.match(/\/Subtype\s*\/Image/g) || []).length;
console.log(`PDF header=${pdf.subarray(0, 5).toString()} pages=${pages} images=${images} hasEOF=${pdfStr.trimEnd().endsWith('%%EOF')}`);
// ── OOXML: valid zip + expected parts ──
const zipParts = (buf) => {
const s = buf.toString('latin1');
const names = new Set();
const rx = /PK\x03\x04[\s\S]{22}/g;
let m;
while ((m = rx.exec(s))) {
const nameLen = buf.readUInt16LE(m.index + 26);
const extraLen = buf.readUInt16LE(m.index + 28);
names.add(buf.subarray(m.index + 30, m.index + 30 + nameLen).toString('utf8'));
rx.lastIndex = m.index + 30 + nameLen + extraLen;
}
return [...names];
};
for (const [name, must] of [
['docx', 'word/document.xml'],
['pptx', 'ppt/presentation.xml'],
['xlsx', 'xl/workbook.xml'],
]) {
const buf = fs.readFileSync(`${out}/report.${name}`);
const parts = zipParts(buf);
const media = parts.filter((p) => /media\//.test(p));
const slides = parts.filter((p) => /slides\/slide\d+\.xml$/.test(p));
const sheets = parts.filter((p) => /worksheets\/sheet\d+\.xml$/.test(p));
console.log(
`${name.toUpperCase().padEnd(5)} zip=${buf.subarray(0, 2).toString() === 'PK'} parts=${parts.length} ` +
`core=${parts.includes(must)} media=${media.length}` +
(slides.length ? ` slides=${slides.length}` : '') +
(sheets.length ? ` sheets=${sheets.length}` : ''),
);
}
// ── XLSX: read it back and confirm the data survived ──
const wb = new ExcelJS.Workbook();
await wb.xlsx.readFile(`${out}/report.xlsx`);
console.log('XLSX sheets:', wb.worksheets.map((w) => `${w.name}(${w.rowCount}r)`).join(', '));
const data = wb.getWorksheet('Top batches');
if (data) {
console.log('XLSX header:', data.getRow(1).values.slice(1).join(' | '));
console.log('XLSX row2 :', data.getRow(2).values.slice(1).join(' | '));
}
process.exit(0);