我试图在行的开头插入带有空格的确切文本,但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
在输出文档中?
答案 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一样,你可以在整个地方使用方法链。 :)
结果如下:
答案 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();