So füllen Sie ein PDF-Formular mit Javascript ausJavaScript

Javascript-Forum
Anonymous
 So füllen Sie ein PDF-Formular mit Javascript aus

Post by Anonymous »

Ich habe das folgende PDF: https://www.dco.uscg.mil/Portals/9/NMC/ ... G_719B.pdf
Ich habe verschiedene Möglichkeiten ausprobiert, um Zugriff auf die Textfelder im Code zu finden,

Code: Select all

    async function fillAllFields() {
const file = document.getElementById('pdf-upload').files[0];
if (!file) return alert("Please upload a PDF");

const arrayBuffer = await file.arrayBuffer();
const pdfDoc = await PDFLib.PDFDocument.load(arrayBuffer);
const form = pdfDoc.getForm();
const fields = form.getFields();

fields.forEach(field => {
const name = field.getName();
try {
form.getTextField(name).setText(name);
const widgets = field.acroField.dict.get('Kids') || [field.acroField];
widgets.forEach(widget => {
const rect = widget.get('Rect');
if (rect) {
const [x1, y1, x2, y2] = rect.map(n => n.number);
console.log(`Field "${name}" at [${x1}, ${y1}, ${x2}, ${y2}]`);
}
});
} catch (e) {
console.log(`Skipping non-text field: ${name}`);
}
});

const pdfBytes = await pdfDoc.save();
const blob = new Blob([pdfBytes], { type: "application/pdf" });
const link = document.createElement("a");
link.href = URL.createObjectURL(blob);
link.download = "filled_with_names.pdf";
link.click();
}
Allerdings habe ich dadurch keinen Zugriff auf die Textfelder. Ich habe versucht, es zu ändern und oben Text hinzuzufügen, z. B. {{Vorname}}, in der Hoffnung, dass ich auf diesen Text zugreifen und ihn ändern kann. Wenn ich jedoch PDFPlumber verwende, um den Text zu extrahieren, wird er nicht zurückgegeben

Code: Select all

import pdfplumber

with pdfplumber.open("CG_719B_filled.pdf") as pdf:
for page in pdf.pages:
if page.page_number == 2:
print(page.extract_text)
print(page.extract_text())
Jetzt suche ich nach einer Art Arcoform, aber es scheint keines zu geben.

Code: Select all

import pdfplumber
from pdfplumber.utils.pdfinternals import resolve_and_decode, resolve

pdf = pdfplumber.open("CG_719B_filled.pdf")

def parse_field_helper(form_data, field, prefix=None):
"""appends any PDF AcroForm field/value pairs in `field` to provided `form_data` list

if `field` has child fields, those will be parsed recursively.
"""
resolved_field = field.resolve()
field_name = ".".join(
filter(lambda x: x, [prefix, resolve_and_decode(resolved_field.get("T"))])
)
if "Kids" in resolved_field:
for kid_field in resolved_field["Kids"]:
parse_field_helper(form_data, kid_field, prefix=field_name)
if "T" in resolved_field or "TU" in resolved_field:
# "T" is a field-name, but it's sometimes absent.
# "TU" is the "alternate field name" and is often more human-readable
# your PDF may have one, the other, or both.
alternate_field_name = (
resolve_and_decode(resolved_field.get("TU"))
if resolved_field.get("TU")
else None
)
field_value = (
resolve_and_decode(resolved_field["V"]) if "V" in resolved_field else None
)
form_data.append([field_name, alternate_field_name, field_value])

form_data = []

# Check if the PDF has an AcroForm (interactive form fields)
if "AcroForm" in pdf.doc.catalog:
acro_form = resolve(pdf.doc.catalog["AcroForm"])
if "Fields" in acro_form:
fields = resolve(acro_form["Fields"])
for field in fields:
parse_field_helper(form_data, field)
print(form_data)
else:
print("PDF has AcroForm but no Fields")
else:
print("PDF does not contain an AcroForm (no interactive form fields)")

pdf.close()
PDF enthält kein AcroForm (keine interaktiven Formularfelder) :(
Warum habe ich gedacht, dass es so einfach sein würde, ein PDF-Formular auszufüllen? Ich weiß nicht, welchen Weg ich einschlagen soll, und bin fast versucht, das gesamte Formular in etwas umzugestalten, das schnell mit Variablen gefüllt werden kann, die ersetzt werden können.
Ich würde mich freuen, wenn mir jemand das erklären könnte Was genau das Problem ist und wie ich es vielleicht lösen könnte, entweder dies in ein Acroform mit Feldern umwandeln und dann eine einfache Möglichkeit zum Verweisen und Hinzufügen der Daten oder eine Möglichkeit, dieses Formular neu zu erstellen, das über Code ausgefüllt wird.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post