使用 iTextSharp 为文本部分加下划线
underline portion of text using 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);
}
普通文本字段不支持富文本。如果您希望字段保持交互,您将需要 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# 应该很容易。
你可以试试这个
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);
我有一个应用程序使用 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);
}
普通文本字段不支持富文本。如果您希望字段保持交互,您将需要 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# 应该很容易。
你可以试试这个
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);