iText C#精确文本显示
我试图在行首插入带有空格的精确文本,但是iText会吃掉第一个可见符号之前的所有空格(制表也不起作用) 我正在使用iText 7社区版 C#代码: 该代码将output.pdf文档中的文本显示为iText C#精确文本显示,c#,itext7,C#,Itext7,我试图在行首插入带有空格的精确文本,但是iText会吃掉第一个可见符号之前的所有空格(制表也不起作用) 我正在使用iText 7社区版 C#代码: 该代码将output.pdf文档中的文本显示为 Test Test Test Test 1 2 3 每行的第一个可见符号前没有任何制表符和空格 如何更改代码以获得 Test Test Test Test 1 2 3 在输出文档中?您应该使用块向段落添加文本 然后您应该设置选项卡设置并使用特定
Test
Test
Test
Test 1 2 3
每行的第一个可见符号前没有任何制表符和空格
如何更改代码以获得
Test
Test
Test
Test 1 2 3
在输出文档中?您应该使用块向段落添加文本 然后您应该设置选项卡设置并使用特定的Chunk.tabing
p = new Paragraph();
p.setTabSettings(new TabSettings(56f));
p.add(Chunk.TABBING);
p.add(new Chunk("Hello World with tab."));
此示例位于代码示例中的,(嵌入式)选项卡在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);
<>这是我第一次看/写<强>任何< /强> iTest7,所以可能有一种不同的更好的方式,我不认为这只是一种解决方法。奇怪的是,如果在换行符之后添加任意数量的空格字符,然后立即添加前面也有空格字符的字符串,则第一个调用会去掉空格,但第二个调用会保留空格
作为旁注,我马上注意到了一件事,并且非常喜欢这个新API,那就是您可以到处使用方法链接。:)
结果如下:
试试这个
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();
你试过不间断空格(0xA0)吗?@mkl,是的,我试过在维基百科
段落p=新段落中找到的各种空格(“Test\r\tTest\r Test\n\u0020\u2000\u2001\u002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u202f\u205f\u2060\u3000\u0020\u0020\u0020\u00203”)代码>但它不起作用。仍然是相同的结果,段落.setFirstLineIndent(x)
会产生一个可接受的解决方案吗?
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();