1

我正在尝试在行首插入带有空格的确切文本,但是 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

在输出文件中?

4

3 回答 3

1

在您的代码示例中,(嵌入式)选项卡在iTextSharp5.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 的一件事是您可以在任何地方使用方法链接。:)

结果如下:

在此处输入图像描述

于 2016-12-06T04:38:11.877 回答
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 示例

于 2016-11-30T23:20:55.200 回答
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();
于 2016-12-06T05:02:10.680 回答