Ich wurde damit beauftragt, ein Python-Skript zu erstellen, das ein Formularfeld zu einer vorhandenen PDF-Datei hinzufügt. Schien ziemlich geradlinig, aber ich bin an eine Wand gestoßen. Das Formularfeld wird hinzugefügt (anscheinend nicht korrekt), aber es wird einfach nicht angezeigt, wenn ich das PDF öffne. Weder der Formulartitel noch die Textdaten sind sichtbar. Für jede diesbezügliche Anleitung wären wir sehr dankbar. Die aktuelle Version des Notebooks, das ich verwende, ist:
import PyPDF2
from PyPDF2 import PdfReader, PdfWriter
from PyPDF2.generic import (
NameObject, DictionaryObject, ArrayObject, FloatObject, TextStringObject
)
def add_form_field_to_pdf(input_pdf_path, output_pdf_path, field_name, field_x, field_y, field_width, field_height, page_number=0):
# Read the input PDF
reader = PdfReader(input_pdf_path)
writer = PdfWriter()
set_need_appearances_writer(writer)
# Copy pages from the original PDF to the writer
for page in reader.pages:
writer.add_page(page)
# Get the specified page
page = writer.pages[page_number]
# Create a new AcroForm if it doesn't exist
if "/AcroForm" not in writer._root_object:
writer._root_object.update({
NameObject("/AcroForm"): DictionaryObject({
NameObject("/Fields"): ArrayObject()
})
})
# Define the form field
field = DictionaryObject()
field.update({
NameObject("/FT"): NameObject("/Tx"), # Text field type
NameObject("/T"): TextStringObject(field_name), # Field name
NameObject("/Rect"): ArrayObject([ # Field rectangle
FloatObject(field_x),
FloatObject(field_y),
FloatObject(field_x + field_width),
FloatObject(field_y + field_height)
]),
NameObject("/V"): TextStringObject("Hello"), # Default value
NameObject("/Ff"): FloatObject(0), # Field flags
NameObject("/P"): page # Page where the field is located
})
# Add the field to the AcroForm
acro_form = writer._root_object["/AcroForm"]
fields = acro_form["/Fields"]
fields.append(field)
# Write the modified PDF to a new file
with open(output_pdf_path, "wb") as output_file:
writer.write(output_file)
def set_need_appearances_writer(writer):
try:
catalog = writer._root_object
# get the AcroForm tree and add "/NeedAppearances attribute
if "/AcroForm" not in catalog:
writer._root_object.update(
{
NameObject("/AcroForm"): DictionaryObject(
len(writer._objects), 0, writer
)
}
)
need_appearances = NameObject("/NeedAppearances")
writer._root_object["/AcroForm"][need_appearances] = BooleanObject(True)
return writer
except Exception as e:
print("set_need_appearances_writer() catch : ", repr(e))
return writer
input_pdf = "sampleForm.pdf"
output_pdf = "FormAttemp-2.pdf"
add_form_field_to_pdf(input_pdf, output_pdf, "SampleField4", 100, 500, 200, 20)
Ich wurde damit beauftragt, ein Python-Skript zu erstellen, das ein Formularfeld zu einer vorhandenen PDF-Datei hinzufügt. Schien ziemlich geradlinig, aber ich bin an eine Wand gestoßen. Das Formularfeld wird hinzugefügt (anscheinend nicht korrekt), aber es wird einfach nicht angezeigt, wenn ich das PDF öffne. Weder der Formulartitel noch die Textdaten sind sichtbar. Für jede diesbezügliche Anleitung wären wir sehr dankbar. Die aktuelle Version des Notebooks, das ich verwende, ist: [code]import PyPDF2 from PyPDF2 import PdfReader, PdfWriter from PyPDF2.generic import ( NameObject, DictionaryObject, ArrayObject, FloatObject, TextStringObject )
# Read the input PDF reader = PdfReader(input_pdf_path) writer = PdfWriter() set_need_appearances_writer(writer) # Copy pages from the original PDF to the writer for page in reader.pages: writer.add_page(page)
# Get the specified page page = writer.pages[page_number]
# Create a new AcroForm if it doesn't exist if "/AcroForm" not in writer._root_object: writer._root_object.update({ NameObject("/AcroForm"): DictionaryObject({ NameObject("/Fields"): ArrayObject() }) })
# Define the form field field = DictionaryObject() field.update({ NameObject("/FT"): NameObject("/Tx"), # Text field type NameObject("/T"): TextStringObject(field_name), # Field name NameObject("/Rect"): ArrayObject([ # Field rectangle FloatObject(field_x), FloatObject(field_y), FloatObject(field_x + field_width), FloatObject(field_y + field_height) ]), NameObject("/V"): TextStringObject("Hello"), # Default value NameObject("/Ff"): FloatObject(0), # Field flags NameObject("/P"): page # Page where the field is located })
# Add the field to the AcroForm acro_form = writer._root_object["/AcroForm"] fields = acro_form["/Fields"] fields.append(field)
# Write the modified PDF to a new file with open(output_pdf_path, "wb") as output_file: writer.write(output_file)
def set_need_appearances_writer(writer):
try: catalog = writer._root_object # get the AcroForm tree and add "/NeedAppearances attribute if "/AcroForm" not in catalog: writer._root_object.update( { NameObject("/AcroForm"): DictionaryObject( len(writer._objects), 0, writer ) } )
Ich habe den folgenden indizierten Datenrahmen mit benannten Spalten und Zeilen nicht kontinuierliche Zahlen:
a b c d
2 0.671399 0.101208 -0.181532 0.241273
3 0.446172 -0.243316 0.051767 1.577318
5...
Es ist möglich, ein Bild in ein PDF -Dokument mit FPDF mit diesem Befehl einzufügen:
fpdf.image(name, x = None, y = None, w = 0, h = 0, type = '', link = '')
Es ist möglich, ein Bild in ein PDF -Dokument mit FPDF mit diesem Befehl einzufügen:
fpdf.image(name, x = None, y = None, w = 0, h = 0, type = '', link = '')
Ich frage, weil ich keine ordnungsgemäße Dokumentation für den ITEXT finden kann, nur API -Referenz. oder Textposition nur mit iText? Code> mit .* Regex.
var regex = new Regex( .* );
var strat =...