0

i want to split an existing PDF with unknown nuber of pages into multiple files based on keywords. Inside the PDF are variables that are everytime the same, like "Mitarbeitername:" "Personalnummer:" "Monat:". I want to use those, or a combination of those keywords to split the pdf file. Everytime the name shows up, the script should determine if its only one page or multiple pages, an merge them together into one file. Hopefully somebody can help me or has an easier way to do it with js

The same way i could generate a string containing the filename, i already did this an it works, now i need to find out how to assignt the filename to the pdf file und so on. Hopefully you understood me cause my english ist not so good im from germany. I post my full code here:

//ORIGINAL INDEX.JS
//Import von Abhängikeiten und Bibliotheken
import { PdfReader } from "pdfreader";
import PDFMerger from "pdf-merger-js";

//Hauptpgramm-Ablauf
async function main() {
    //console.log("Start der Anwendung");
    const wert = await pdf();
    createString(wert);
    counter(wert);
    //console.log("PDF Daten verarbeitet");
}

//Auslesen der PDF Datei mit PdfReader
async function pdf() {
    const liste = [];
    await new Promise(function (resolve, reject) {
        new PdfReader().parseFileItems(
            "./src/pdf_input/dokument.pdf",
            (err, item) => {
                if (err) {
                    reject("fehler");
                } else if (!item) {
                    resolve();
                } else if (item.text) {
                    liste.push(item.text);
                }
            }
        );
    });
    return liste;
}

//Zeichenkette erstellen = Dateiname
async function createString(wert) {
    //bekommt den Wert der aus der PDF ausgelesen wurde

    var persnr = ""; ///
    var nameParts = ""; ////
    var nachname = ""; /////
    var vorname = ""; ///////Variabeln die durch die Schleife gefüllt werden
    var mmjj = ""; /////
    var fertig = ""; ///
    for (let i = 0; i < wert.length; i++) {
        //Die Eigentliche Schleife
        if (wert[i] === "Monat:") {
            //Die schleife läuft durch und der gesuchte Wert wird abgefangen
            persnr = wert[i - 2];
            nameParts = wert[i + 2].split(",");
            mmjj = wert[i + 3].split(" ");

            //Nachname
            nachname = nameParts[0].trim();
            if (nachname.startsWith("van")) {
                nachname = nachname.slice(4); // Entferne die ersten vier Zeichen ("van ") aus dem Nachnamen
            }

            //Vorname
            try {
                vorname = nameParts[1].trim();
            } catch (e) {
                vorname = "";
            }

            //Monat in Zahl umwandeln
            mmjj[0] = getTwoDigitMonth(mmjj[0]);

            //Fertiger Dateiname
            fertig =
                "Z_" +
                persnr +
                "_" +
                nachname +
                "_" +
                vorname +
                "_" +
                mmjj[0] +
                "_" +
                mmjj[1] +
                "_JA.pdf";
            console.log("Ausgabe zeichenkette als Dateinamen: " + fertig);
            merger(fertig);
        }
    }
}

//unterfunktion zu "async function createString(wert)" um den Monat 2 Stellig zu machen
function getTwoDigitMonth(monthName) {
    const monthNumber = new Date(`${monthName} 1, 2000`).getMonth() + 1;
    return monthNumber.toString().padStart(2, "0");
}
//Der Versuch die Seiten zu diffrenzieren und dem jeweiligen Namen zuzuordnen
function counter(seite) {
    var counter = 0;
    var counter2 = 1;
    for (let i = 0; i < seite.length; i++) {
        if (seite[i] === "Monat:") {
            for (let j = i + 1; j < seite.length; j++) {
                if (seite[j] === "Monat:") {
                    if (seite[i + 2] === seite[j + 2]) {
                        counter2 = counter + 1;
                        merger(counter, counter2);
                        // console.log(counter);
                        // console.log(counter2);
                        console.log(seite[i + 2]);
                        console.log(seite[j + 2]);
                    }
                }
            }
        }
        if (counter2 != "0") {
            //console.log("zweite Ausgabe vom Counter: " + counter2);
            merger(counter, 0);
        }
        counter2 = 0;
        counter += 1;
    }
}

//PDF Datei nach Mitarbeiter ausgeben und benennen

async function merger(fertig, i, j) {
    //console.log("Inhalte vom Merger Kopf:" + i + j);
    var merger = new PDFMerger();
    console.log(i);
    //Prüfung ob J gleich 0 ist oder nicht
    if (j != "0") {
        //Angabe der Quelldatei
        await merger.add("./src/pdf_input/dokument.pdf", [
            parseInt(i),
            parseInt(j),
        ]);
    } else {
        await merger.add("./src/pdf_input/dokument.pdf", parseInt(i));
    }
    //console.log(i + seite);

    //Ausgabe der fertigen Datei mit Dateinamen
    await merger.save("./src/pdf_output/" + String(fertig));
}

//Haupt Funktion - Start der Anwendung
main();

0 Answers0