Używam szablonu iTextSharp
do wypełnienia szablonu PDF
. Dane, których używam, są przechowywane w bazie danych i są sformatowane w formacie HTML
. Mój problem polega na tym, że po załadowaniu AcroField
z tym tekstem uzyskuję go, aby zrobić podziały wierszy, ale nie pogrubiono ani nie pochylono. Próbowałem już użyć HtmlWorker
, ale wszystkie przykłady online pokazują, że jest używany do konwersji HTML
na PDF
, ale próbuję ustawić AcroField
w szablonie PDF. Każda pomoc będzie doceniona.Wypełnienie szablonu formularza PDF za pomocą tekstu w formacie iTekstSharp
Odpowiedz
Po spędzeniu kilku dni na przeglądaniu forów i kodu źródłowego iTextsharp znalazłem rozwiązanie. Zamiast wypełniać Acrofield tekstem w formacie HTML, użyłem kolumny ColumnText. Analizuję tekst HTML i ładuję IElements do akapitu. Następnie dodaj akapit do ColumnText. Następnie nałożyłem kolumnę ColumnText na szczyt miejsca, w którym powinien być Acrofield, używając współrzędnych pola.
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;
}
}
Oto przykład połączenia z tą funkcją.
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
Jedną z rzeczy, które napotkaliśmy podczas wykonywania tego jest fakt, że mój Acrofield miał predefiniowany rozmiar czcionki. Ponieważ funkcja ta ustawia kolumnę ColumnText na górze pola, wszelkie zmiany czcionki będą musiały zostać wykonane w funkcji. Oto przykład zmiany rozmiaru czcionki:
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;
}
}
Mam nadzieję, że zaoszczędzimy komuś trochę czasu i energii w przyszłości.
... Na pewno pomogło to nieco zawiłe podejście pracował. Dziękujemy za przesłanie wyników! Szkoda, że 'fields.SetFieldRichValue' nie działa. Używam iTextSharp 5.4.2 już teraz. –
Tak, musiałem poprawić ten kod trochę w ciągu ostatnich kilku miesięcy, a ja znalazłem lepsze/mniej okrągłe o tym, jak to zrobić.
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. Edycja tekstu w formacie PDF za pomocą Java
- 2. Crystal Reports Wycinanie tekstu w formacie PDF
- 3. Wyszukiwanie tekstu w pliku PDF za pomocą języka Python?
- 4. Tworzenie pakietu R Podręcznik w formacie PDF za pomocą devtools
- 5. Wyszukaj konkretne słowo w formacie PDF za pomocą Itextsharp
- 6. Potwierdź usunięcie za pomocą formularza w formacie laravel?
- 7. Wyodrębnianie tekstu w formacie PDF w Objective C
- 8. Wypełnienie gradientu za pomocą grafiki w Mathematica
- 9. Wyodrębnianie tekstu z pliku PDF za pomocą PDFMiner w python?
- 10. iOS: Jak ustawić czcionkę podczas rysowania tekstu w formacie PDF?
- 11. Aplikacja Android do wypełnienia formularza PDF
- 12. uzyskać akapit tekstu z pdf za pomocą itextsharp
- 13. Wyświetl obraz w formacie pdf
- 14. Dynamiczne generowanie PDF z szablonu
- 15. Manipulowanie polem formularza PDF
- 16. Indeksowanie dokumentów programu Word i plików PDF za pomocą Sphinx
- 17. Dlaczego w komórce jest lewe wypełnienie za pomocą FPDF w php?
- 18. Dane w formacie HTML za pomocą PHP
- 19. Tworzenie raportów PDF za pomocą wykresu flot
- 20. Rozłożenie linii tekstu w formacie RTF
- 21. Litery cyrylicy nie wyświetlają się w formacie PDF wygenerowanym za pomocą iText w Androidzie
- 22. Przeczytaj pdf za pomocą iText
- 23. Czcionka osadzania IOS w formacie PDF
- 24. Obsługa stron w formacie PDF w PhantomJS
- 25. Wyodrębnij współrzędne prostokątu tekstu i tekstu z pliku Pdf za pomocą itextsharp
- 26. Eksportuj rejestr w formacie zwykłego tekstu
- 27. Problem z czytaniem w formacie PDF z czytnikiem PDF
- 28. Hasło chronione PDF za pomocą Ghostscript
- 29. tytuł centrum w formacie PDF przekonwertowany ze znacznika za pomocą Pandoc
- 30. Jak uzyskać migawkę UITableView w formacie PDF
Zobacz ten post na temat korzystania Rich Text Fields http://stackoverflow.com/a/4412527/231316 –