dfgdfg
This commit is contained in:
88
find_images.ts
Normal file
88
find_images.ts
Normal file
@@ -0,0 +1,88 @@
|
||||
import * as pdfjsLib from 'pdfjs-dist/legacy/build/pdf.js';
|
||||
import * as fs from 'fs';
|
||||
|
||||
async function analyzeImages(filePath: string) {
|
||||
console.log(`\nLese PDF für Bild-Analyse: ${filePath}`);
|
||||
|
||||
const dataBuffer = fs.readFileSync(filePath);
|
||||
const loadingTask = pdfjsLib.getDocument({ data: new Uint8Array(dataBuffer) });
|
||||
const pdfDocument = await loadingTask.promise;
|
||||
|
||||
// Wir analysieren nur Seite 1
|
||||
const page = await pdfDocument.getPage(1);
|
||||
const viewport = page.getViewport({ scale: 1.0 });
|
||||
console.log(`Seitengröße: Breite = ${viewport.width.toFixed(2)}, Höhe = ${viewport.height.toFixed(2)}\n`);
|
||||
|
||||
const opList = await page.getOperatorList();
|
||||
|
||||
// Um die Koordinaten zu berechnen, müssen wir den Grafik-Status (Stack) verfolgen
|
||||
let transformStack: number[][] = [[1, 0, 0, 1, 0, 0]]; // Standard-Matrix
|
||||
let currentTransform = [1, 0, 0, 1, 0, 0];
|
||||
let imageCount = 0;
|
||||
|
||||
console.log("--- GEFUNDENE BILDER AUF SEITE 1 ---");
|
||||
|
||||
for (let i = 0; i < opList.fnArray.length; i++) {
|
||||
const fn = opList.fnArray[i];
|
||||
const args = opList.argsArray[i];
|
||||
|
||||
// Status speichern (q)
|
||||
if (fn === pdfjsLib.OPS.save) {
|
||||
transformStack.push([...currentTransform]);
|
||||
}
|
||||
// Status wiederherstellen (Q)
|
||||
else if (fn === pdfjsLib.OPS.restore) {
|
||||
if (transformStack.length > 0) {
|
||||
currentTransform = transformStack.pop()!;
|
||||
}
|
||||
}
|
||||
// Transformation anwenden (cm) - In PDFs werden Matrizen multipliziert,
|
||||
// für die einfache Bildanalyse reicht oft der letzte Transform-Befehl vor dem Bild,
|
||||
// da dieser die Skalierung (Breite/Höhe) und Position (X/Y) des 1x1 Pixel Objekts setzt.
|
||||
else if (fn === pdfjsLib.OPS.transform) {
|
||||
currentTransform = args;
|
||||
}
|
||||
// Wenn ein Bild gezeichnet wird!
|
||||
else if (
|
||||
fn === pdfjsLib.OPS.paintImageXObject ||
|
||||
fn === pdfjsLib.OPS.paintInlineImageXObject ||
|
||||
fn === pdfjsLib.OPS.paintJpegXObject
|
||||
) {
|
||||
imageCount++;
|
||||
|
||||
// In der PDF-Matrix:
|
||||
// currentTransform[0] = Skalierung X (entspricht der Bild-Breite)
|
||||
// currentTransform[3] = Skalierung Y (entspricht der Bild-Höhe)
|
||||
// currentTransform[4] = Position X
|
||||
// currentTransform[5] = Position Y
|
||||
const width = currentTransform[0];
|
||||
const height = currentTransform[3];
|
||||
const x = currentTransform[4];
|
||||
const y = currentTransform[5];
|
||||
|
||||
const isPageFilling = (width >= viewport.width - 10 && height >= viewport.height - 10);
|
||||
const mark = isPageFilling ? " <-- SEITENFÜLLENDER SCAN / HINTERGRUND" : "";
|
||||
|
||||
console.log(`Bild ${imageCount}:`);
|
||||
console.log(` Position: X = ${x.toFixed(2)}, Y = ${y.toFixed(2)}`);
|
||||
console.log(` Größe: Breite = ${width.toFixed(2)}, Höhe = ${height.toFixed(2)}${mark}`);
|
||||
console.log(` Interner Name: ${args[0]}`);
|
||||
console.log(`--------------------------------------------------`);
|
||||
}
|
||||
}
|
||||
|
||||
if (imageCount === 0) {
|
||||
console.log("Keine Bilder gefunden. Das Dokument besteht rein aus Vektoren und Text.");
|
||||
} else {
|
||||
console.log(`\nInsgesamt ${imageCount} Bild(er) gefunden.`);
|
||||
}
|
||||
}
|
||||
|
||||
// Aufruf mit dem Pfad aus den Parametern
|
||||
const args = process.argv.slice(2);
|
||||
const pdfArgIndex = args.indexOf('--pdf');
|
||||
if (pdfArgIndex !== -1 && args[pdfArgIndex + 1]) {
|
||||
analyzeImages(args[pdfArgIndex + 1]).catch(console.error);
|
||||
} else {
|
||||
console.error("Bitte --pdf Parameter angeben.");
|
||||
}
|
||||
Reference in New Issue
Block a user