56 lines
2.3 KiB
JavaScript
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);
|