Sto utilizzando iTextSharp
per compilare un modello PDF
. I dati che sto usando sono conservati in un database ed è formattato HTML
. Il mio problema è che quando carico il AcroField
con questo testo ottengo che esegua le interruzioni di riga, ma non lo in grassetto né in corsivo. Ho già tentato di utilizzare , ma tutti gli esempi online mostrano che viene utilizzato per convertire HTML
in un PDF
ma sto cercando di impostare un AcroField
in un modello PDF. Qualsiasi aiuto sarebbe apprezzato.Fill acrofield del modello PDF con testo formattato HTML utilizzando iTextSharp
risposta
Dopo aver trascorso giorni guardando attraverso il forum e il codice sorgente iTextsharp ho trovato una soluzione. Invece di riempire l'Acrofield con il testo formattato in HTML, ho usato un ColumnText. Analizzo il testo html e carica gli IElement in un paragrafo. Quindi aggiungi il paragrafo a ColumnText. Quindi ho sovrapposto il ColumnText sopra a dove dovrebbe essere l'Acrofield, usando le coordinate del campo.
public void AddHTMLToContent(String htmlText,PdfContentByte contentBtye,IList<AcroFields.FieldPosition> pos)
{
Paragraph par = new Paragraph();
ColumnText c1 = new ColumnText(contentBtye);
try
{
List<IElement> elements = HTMLWorker.ParseToList(new StringReader(htmlText),null);
foreach (IElement element in elements)
{
par.Add(element);
}
c1.AddElement(par);
c1.SetSimpleColumn(pos[0].position.Left, pos[0].position.Bottom, pos[0].position.Right, pos[0].position.Top);
c1.Go(); //very important!!!
}
catch (Exception ex)
{
throw;
}
}
Questo è un esempio di chiamata a questa funzione.
string htmlText ="<b>Hello</b><br /><i>World</i>";
IList<AcroFields.FieldPosition> pos = form.GetFieldPositions("Field1");
//Field1 is the name of the field in the PDF Template you are trying to fill/overlay
AddHTMLToContent(htmlText, stamp.GetOverContent(pos[0].page), pos);
//stamp is the PdfStamper in this example
Una cosa che ho incontrato mentre facevo questo è il fatto che il mio Acrofield aveva una dimensione di carattere predefinita. Poiché queste funzioni impostano ColumnText sulla parte superiore del campo, qualsiasi modifica del carattere dovrà essere eseguita nella funzione. Ecco un esempio di modifica della dimensione del carattere:
public void AddHTMLToContent(String htmlText,PdfContentByte contentBtye,IList<AcroFields.FieldPosition> pos)
{
Paragraph par = new Paragraph();
ColumnText c1 = new ColumnText(contentBtye);
try
{
List<IElement> elements = HTMLWorker.ParseToList(new StringReader(htmlText),null);
foreach (IElement element in elements)
{
foreach (Chunk chunk in element.Chunks)
{
chunk.Font.Size = 14;
}
}
par.Add(elements[0]);
c1.AddElement(par);
c1.SetSimpleColumn(pos[0].position.Left, pos[0].position.Bottom, pos[0].position.Right, pos[0].position.Top);
c1.Go();//very important!!!
}
catch (Exception ex)
{
throw;
}
}
Spero che questo risparmi tempo e energia in futuro.
Sei sicuro aiutato ... questo approccio un po 'contorto funzionato. Grazie per aver pubblicato i tuoi risultati! È un peccato che "fields.SetFieldRichValue" non funzioni. Sto usando iTextSharp 5.4.2 in questo momento. –
Quindi, ho dovuto modificare questo codice un po 'negli ultimi mesi, e ho trovato un modo migliore/meno rotondo per farlo.
public void Final(string text,string fieldName,string filename)
{
iTextSharp.text.pdf.PdfReader reader = null;
iTextSharp.text.pdf.PdfStamper stamp = null;
reader = new PdfReader(file path to template);
stamp = new PdfStamper(reader, new FileStream(path to new file, FileMode.CreateNew));
AcroFields form = stamp.AcroFields;
//get the position of the field
IList<AcroFields.FieldPosition> pos = form.GetFieldPositions(fieldName);
//tell itextSharp to overlay this content
PdfContentByte contentBtye = stamp.GetOverContent(pos[0].page);
//create a new paragraph
Paragraph par = new Paragraph();
//parse html
List<IElement> elements = HTMLWorker.ParseToList(new StringReader(text), null);
for (int k = 0; k < elements.Count; k++)
{
par.Add((IElement)elements[k]);
}
//create a ColumnText to hold the paragraph and set position to the position of the field
ColumnText ct = new ColumnText(contentBtye);
ct.SetSimpleColumn(pos[0].position.Left, pos[0].position.Bottom, pos[0].position.Right, pos[0].position.Top);
ct.AddElement(par);
ct.Go();
stamp.Close();
reader.Close();
}
- 1. ITextSharp HTML in PDF?
- 2. Converti HTML in PDF utilizzando itextsharp
- 3. ottenere testo paragrafo da pdf utilizzando itextsharp
- 4. Estrazione del testo Itextsharp
- 5. Html visualizza testo formattato
- 6. iTextSharp HTML a PDF immagine src
- 7. Fill div con html utilizzando JavaScript/jQuery
- 8. jsf output html-testo formattato
- 9. Fill div con testo
- 10. facendo due file PDF utilizzando identici iTextSharp
- 11. C'è un modo per sostituire un testo in un file PDF con itextsharp?
- 12. Ho bisogno di aiuto con la creazione di PDF da HTML utilizzando itextsharp
- 13. Lettura/modifica dei metadati PDF utilizzando iTextSharp
- 14. lettura del testo formattato con python
- 15. iTextSharp testo internazionale
- 16. ITextSharp inserisce il testo in un pdf esistente
- 17. HTML a PDF alcuni caratteri sono mancanti (iTextSharp)
- 18. iTextSharp Sostituisci testo nel PDF esistente senza perdere la formazione
- 19. Modifica del testo PDF utilizzando Java
- 20. come estrarre il contenuto di testo formattato da PDF
- 21. iTextSharp - Converti word doc/docx in pdf
- 22. Emettere testo formattato (incluso il codice sorgente) come LaTeX, PDF e HTML
- 23. Controllo casella di controllo pdf con itextsharp
- 24. Converti pagine Pdf in immagini con itextsharp
- 25. Aggiungi intestazione e piè di pagina per PDF utilizzando iTextsharp
- 26. Utilizzare itextsharp xmlworker per convertire HTML in PDF e scrivere il testo verticalmente
- 27. copia testo formattato in accesso utilizzando vba
- 28. elimina la prima pagina dal PDF utilizzando iTextSharp
- 29. Come convertire PDF in file di testo in iTextSharp
- 30. Come leggere i dati del modulo PDF usando iTextSharp?
vedere questo post su come utilizzare Text Rich Fields http://stackoverflow.com/a/4412527/231316 –