Подчеркните часть текста, используя iTextSharp
У меня есть приложение, которое использует itextsharp для заполнения полей формы PDF.
В одном из этих полей есть текст с тегами. Например:
<U>This text should be underlined</>.
Я хотел бы, чтобы текст, закрытый в..., был подчеркнут.
Как я мог это сделать?
Как я могу согласовать это с HTMLWorker, например?
Вот часть кода, где я пишу свое описание:
for (int i = 0; i < linesDescription.Count; i++)
{
int count = linesDescription[i].Count();
int countTrim = linesDescription[i].Trim().Count();
Chunk cnk = new Chunk(linesDescription[i] + GeneralPurpose.ReturnChar, TextStyle);
if (firstOpe && i > MaxLinePerPage - 1)
LongDescWrapped_dt_extra.Add(cnk);
else
LongDescWrapped_dt.Add(cnk);
}
2 ответа
Обычные текстовые поля не поддерживают форматированный текст. Если вы хотите, чтобы поля оставались интерактивными, вам понадобятся поля RichText. Эти поля помечены таким образом, что они принимают RV
значение. Это объясняется здесь: Установите для разных частей поля формы разные шрифты с помощью iTextSharp (обратите внимание, что мне не удалось заставить это работать, но вам может повезти.)
Если вы можете сгладить форму (то есть удалить всю интерактивность), пожалуйста, посмотрите на пример FillWithUnderline:
public void manipulatePdf(String src, String dest) throws DocumentException, IOException {
PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
stamper.setFormFlattening(true);
AcroFields form = stamper.getAcroFields();
FieldPosition pos = form.getFieldPositions("Name").get(0);
ColumnText ct = new ColumnText(stamper.getOverContent(pos.page));
ct.setSimpleColumn(pos.position);
ElementList elements = XMLWorkerHelper.parseToElementList("<div>Bruno <u>Lowagie</u></div>", null);
for (Element element : elements) {
ct.addElement(element);
}
ct.go();
stamper.close();
}
В этом примере мы не заполняем поле, но получаем положение полей (номер страницы и прямоугольник). Затем мы используем ColumnText
добавить контент на этой позиции. Когда мы вводим HTML, мы используем XML Worker для анализа HTML в объекты iText, которые мы можем добавить в ColumnText
объект.
Это пример Java, но должно быть легко перенести это на C#, если вы знаете, как кодировать на C# (чего я не знаю).
Вы можете попробовать это
Chunk chunk = new Chunk("Underlined TExt", FontFactory.GetFont(FontFactory.TIMES_ROMAN, 12.0f, iTextSharp.text.Font.BOLD | iTextSharp.text.Font.UNDERLINE));
Paragraph reportHeadline = new Paragraph(chunk);
reportHeadline.SpacingBefore = 12.0f;
pdfDoc.Add(reportHeadline);