iText C#精确文本显示

时间:2016-11-20 19:34:49

标签: c# itext7

我试图在行的开头插入带有空格的确切文本,但iText会在第一个可见符号之前占用所有空格(制表也不起作用)。

我正在使用iText 7社区版。

C#代码:

 FileInfo file = new FileInfo(DEST);
 file.Directory.Create();
 //Initialize PDF writer
 PdfWriter writer = new PdfWriter(DEST);
 //Initialize PDF document
 PdfDocument pdf = new PdfDocument(writer);
 // Initialize document
 Document doc = new Document(pdf); 
 doc.Add(new Paragraph("Test\n\tTest\n  Test\n        Test   1 2      3"));
 doc.Close();

该代码将输出.pdf文档中的文本显示为

Test
Test
Test
Test   1 2      3

在每行的第一个可见符号之前没有任何制表符和空格。

如何更改代码以获取

Test
    Test
  Test
        Test   1 2      3

在输出文档中?

3 个答案:

答案 0 :(得分:1)

在您的代码示例中,(嵌入式)选项卡在iTextSharp 5.xx.xx中也不起作用,尽管空格是受到尊重的。正如您所证明的那样,有点令人惊讶的是,iText7会在换行后删除空格。不确定您是否需要支持其中一个或两个,因此将给出一个分别处理每个案例的示例:

首先,保留标签:

Paragraph p = new Paragraph("Line 0\n")
    .AddTabStops(new TabStop(8f))
    // change to your needs  ^^
    .Add(new Tab())
    .Add("Line 1");
doc.Add(p);

其次,在换行符后立即保留空格:

string[] lines = "0\n1\n    2\n        3\n".Split(
    new string[] { "\n" }, 
    StringSplitOptions.RemoveEmptyEntries
);
p = new Paragraph().AddStyle(
    new Style().SetFont(PdfFontFactory.CreateFont(FontConstants.COURIER))
);
foreach (var l in lines)
{
    if (Regex.IsMatch(l, @"^\s+"))
    {
        p.Add(" ")  // all spaces stripped, whether one or more characters
            .Add(l) // now leading whitespace preserved
            .Add("\n");
    }
    else
    {
        p.Add(l).Add("\n");
    }
}
doc.Add(p);

这是我第一次查看/撰写任何 iText7,因此可能有不同/更好的方式,我不认为它只是一种解决方法。奇怪的是,如果你在换行符之后添加任意数量的空格字符,然后立即添加一个前面带有空格字符的字符串,则第一个调用会删除空格,但第二个会保留它们。

作为旁注,我立即注意到的一件事情真的就像新的API一样,你可以在整个地方使用方法链。 :)

结果如下:

enter image description here

答案 1 :(得分:0)

您应该使用Chunks将文本添加到段落中。

然后你应该设置标签设置并使用特定的Chunk.TABBING

p = new Paragraph();
p.setTabSettings(new TabSettings(56f));
p.add(Chunk.TABBING);
p.add(new Chunk("Hello World with tab."));

此示例位于iText examples

答案 2 :(得分:0)

试试吧。

Font bodyFont = FontFactory.GetFont("Times New Roman", 10, Font.NORMAL);
file.Directory.Create();
//Initialize PDF writer
PdfWriter writer = new PdfWriter(DEST);
//Initialize PDF document
PdfDocument pdf = new PdfDocument(writer);
// Initialize document
Document doc = new Document(pdf); 

doc.Add(new Paragraph("Test", bodyFont));
doc.Add(new Paragraph("    Test", bodyFont));
doc.Add(new Paragraph("  Test", bodyFont));
doc.Add(new Paragraph("        Test 1 2   2", bodyFont));
doc.Close();