如何在ITextSharp中的空格字符串上加下划线

时间:2014-09-18 13:31:03

标签: asp.net vb.net pdf itextsharp

如何在空格键下添加下划线。它不会在空白处添加空间。

我尝试了2-3个示例,但未能在空格下添加下划线。

1

        para = New Paragraph(New Chunk("abc.                ", underlined_font))
        cell = New PdfPCell(para)
        cell.Border = 0
        cell.BorderWidthBottom = 0
        document.Add(cell)
  1. Dim str_required_space As New String(" "c, 20)
     para = New Paragraph(New Chunk(str_required_space, underlined_font))
     cell = New PdfPCell(para)
     cell.Border = 0
     cell.BorderWidthBottom = 0
     document.Add(cell)
    
  2. 由于输入字符串的长度不确定,我无法使用单元格边框。所以我使用下划线。

    请帮助在空间下添加空格。

    我的要求图片

    enter image description here

    由于

    [编辑]

    如果我按照答案1,那么结果将如下所示

    asdasd asdsad scasdnk kjashdk kasbas ckasbd ascuasc ksajcasc 
    asdansjdnasjakjsnasndasdmlaskdm  
    ________________________________________________________________
    

    但我需要以下结果。

    asdasd asdsad scasdnk kjashdk kasbas ckasbd ascuasc ksajcasc 
    ________________________________________________________________
    asdansjdnasjakjsnasndasdmlaskdm  
    ________________________________________________________________
    

    我尝试使用Ansii Code。不适合我:(

            Dim str_required_space As New String(ChrW(32), (119 - (str_synopsis.Length Mod 119)))
    
            para = New Paragraph(str_required_space)
            cell = New PdfPCell(para)
            cell.Border = 0
            doc.Add(cell)
    

1 个答案:

答案 0 :(得分:2)

请阅读chapter 2 of my book,更具体地说,请参阅有关垂直位置标记,分隔符和标签的部分(第2.2.6节)。

查看您的图片(忽略该网站上的软色情图片,请在将来避免使用此类链接),我认为您需要一条如图2.9所示的线条(导演名下的行)。可以找到导致该屏幕截图中显示的PDF的代码here

这是用Java完成的:

Paragraph p = new Paragraph("abc.");
LineSeparator line = new LineSeparator(1, 100, null, Element.ALIGN_CENTER, -2);
p.add(line);
document.add(p);

将此代码改编为C#应该是明智的选择。如果您确实遇到问题,那么您可以找到图书样本的移植版本here

您的代码出了什么问题?

这没有意义:

para = New Paragraph(New Chunk("abc.                ", underlined_font))

Chunk的内容被修剪,这解释了空间消失的原因。另一种方法是使用不间断的空格字符(ASCII代码160)而不是常规空格字符(ASCII代码32)。

<强>更新

我之前的回答是基于您的图片,这是您最初问题的正确答案。但是:您现在已经更改了问题(而不是创建新问题)。

您可以通过使用页面事件来满足您的要求,更具体地说,通过实施OnGenericTag()方法。 chapter 5 of my book中描述了此方法。

在Java中,实现看起来像这样:

public void onGenericTag(PdfWriter writer, Document pdfDocument,
    Rectangle rect, String text) {
    Rectangle page = pdfDocument.getPageSize();
    float x1 = page.getRight(pdfDocument.rightMargin());
    float x2 = page.getLeft(pdfDocument.leftMargin());
    float y = rect.getBottom() - 3;
    PdfContentByte canvas = writer.getDirectContent();
    canvas.moveTo(x1, y);
    canvas.lineTo(x2, y);
    canvas.stroke();
}

您需要使用该实现创建页面事件的实例(例如,您编写的类,并将其命名为MyPageEvent),并使用{{1}将该页面事件声明为PdfWriter方法:

setPageEvent()

您现在可以像这样声明writer.setPageEvent(new MyPageEvent()); Chunk

Paragraph

使用一个Chunk chunk = new Chunk(long_text); chunk.setGenericTag(""); Paragraph p = new Paragraph(chunk); document.add(p); 对象构建段落非常重要。如果段落中有多个Chunk,则该部分行看起来会更粗。