使用iTextSharp强调文本的一部分

时间:2015-02-18 08:50:33

标签: c# wpf pdf 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 个答案:

答案 0 :(得分:3)

普通文本字段不支持富文本格式。如果希望字段保持交互,则需要RichText字段。这些字段以接受RV值的方式标记。这里解释了这一点:Set different parts of a form field to have different fonts using 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解析为我们可以添加到ColumnText对象的iText对象。

这是一个Java示例,但如果您知道如何使用C#编写代码(我不这样做),则应该很容易将其移植到C#。

答案 1 :(得分:1)

你可以试试这个

            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);