Aggiunta di testo Rich a un AcroField in iTextSharp
-
12-09-2019 - |
Domanda
Ho bisogno di aggiungere del testo formattato a un campo modulo PDF utilizzando iTextSharp e io non riesco a capirlo. Questo è il modo Attualmente sto impostando i campi, ma alcune parti del testo inserito dovrà essere in grassetto o hai qualche formattazione.
stamper.AcroFields.SetField("fieldName", "fieldValue")
stamper.FormFlattening = True
Ho visto altrove che dovrei essere in grado di inserire un po 'di XML che include le informazioni di formattazione, invece, ma non ho idea di che cosa questo xml dovrebbe essere simile.
Ecco la sezione da quella pagina che mi porta a credere che quello che voglio è possibile:
Ancora francobolli il codice XML effettivo in campo e il lettore non renderlo testo ricco di timbrato PDF.
E la risposta a lavorare a questo:
Per funzionare dovrete chiamare AcroFields.setGenerateAppearances (false). Si noti che le versioni più vecchie Reader non lo fanno generare le apparenze.
Che cosa dovrebbe questo xml assomigliare, o c'è un altro modo per ottenere questo?
Soluzione
Qualche tempo fa, ho aggiunto la possibilità di iText per impostare il valore di testo ricco di un campo. Non ho aggiunto alcun codice di rendering per questo backup.
Ciò significa che l'unico modo per vedere il valore che è ricca attraverso un visualizzatore di PDF che lo sostiene (Reader / Acrobat). Al fine per loro sapere che hanno bisogno di ricostruire tutte le apparenze di campo, si deve chiamare acroFields.setGenerateAppearances(false)
. Questo disabilita la generazione l'aspetto di iText, e invece chiede che il visualizzatore di PDF farlo per voi.
Se si desidera appiattito rich text interamente all'interno iText [Sharp] si sta andando ad avere a che fare qualcosa di irregolare:
- Disegna il testo ricco in una pagina PDF in un documento separato. Le dimensioni di questa pagina deve corrispondere alla dimensione del campo. Salvarlo fuori (un flusso di memoria va bene).
- Aggiungi un nuovo
PushbuttonField
, impostato suLAYOUT_ICON_ONLY
. Utilizzare lo stesso riquadro di delimitazione del campo di testo originale. Impostare il colore di sfondo del pulsante pernull
(trasparente). - Crea una
PdfImportedPage
della pagina ricchi di testo e impostare la pagina importati per essere l'icona del nuovoPushbuttonField
(template). - Unico livello.
dolorosa, ma efficace.
Si può fare # 1 con HTMLWorker e utilizzare il vostro originale rich text / HTML come input.
In realtà, probabilmente si potrebbe ottenere un po 'più efficiente con una HTMLWorker l'alimentazione di un oggetto ColumnText per rendere il codice HTML nello stesso documento, piuttosto che uno nuovo, quindi scriverlo e leggerlo nuovamente. Improvvisare una PdfTemplate da DirectContent qualsiasi vecchia pagina con il rettangolo di selezione appropriata.
Che sarebbe molto meno schifo.