iText 7-居中对齐文本和段落

时间:2018-09-10 13:42:31

标签: c# itext itext7

我正在尝试使文本块居中对齐,但是结果不一致。这是我的代码的大致思路:

baseCanvas.ShowTextAligned("Header 1", 555, 839, TextAlignment.CENTER, 0);
baseCanvas.ShowTextAligned("Test test test ...", 240, 809, TextAlignment.CENTER, 0);

这是PDF输出:

Output

但是我正在努力实现以下目标: Design

我已经检查了iText文档,但是有没有一种方法无需创建表和单元格呢?

2 个答案:

答案 0 :(得分:3)

当您这样做:

baseCanvas.ShowTextAligned("Some text", x, y, TextAlignment.CENTER, 0);

然后,您希望坐标(x, y)与文本"some text"的中间重合。

在代码段中,您将一些文本放在坐标(555, 839)的中心,并将一些文本放在坐标(40, 809)的中心,这说明了区别。

由于您使用的是iText 7,为什么不利用您现在可以轻松地将Paragraph对象定位在绝对位置这一事实呢? iText 7 jump-start tutorial for .NET已经介绍了一些基本构建块,但是Building blocks tutorial有了更深入的介绍。

看看chapter 2的第一个示例,并像这样修改它:

PdfPage page = pdf.AddNewPage();
PdfCanvas pdfCanvas = new PdfCanvas(page);
Rectangle rectangle = new Rectangle(36, 650, 100, 100);
Canvas canvas = new Canvas(pdfCanvas, pdf, rectangle);
PdfFont font = PdfFontFactory.createFont(FontConstants.TIMES_ROMAN);
PdfFont bold = PdfFontFactory.createFont(FontConstants.TIMES_BOLD);
Text title =
    new Text("The Strange Case of Dr. Jekyll and Mr. Hyde").SetFont(bold);
Text author = new Text("Robert Louis Stevenson").SetFont(font);
Paragraph p = new Paragraph().Add(title).Add(" by ").Add(author);
p.SetTextAlignment(iText.Layout.Properties.TextAlignment.CENTER);
canvas.Add(p);
canvas.Close();

这应将文本添加到矩形(36, 650, 100, 100)内,并将所有内容居中。

答案 1 :(得分:0)

我这样做。创建文档的位置,获取文档的宽度。

var document = new Document(pdfDoc);
var pageSize = pdfDoc.GetDefaultPageSize();
var width = pageSize.GetWidth() - document.GetLeftMargin() - document.GetRightMargin();

然后使用此功能创建段落。

private Paragraph CenteredParagraph(Text text, float width)
{
    var tabStops = new List<TabStop> { new TabStop(width / 2, TabAlignment.CENTER) };
    var output = new Paragraph().AddTabStops(tabStops);
    output.Add(new Tab())
            .Add(text);
    return output;
}

之后,只需将段落添加到文档中即可。

document.Add(CenteredParagraph("All the text to add that is centered.");