【问题标题】:iText 7 - Center align text and paragraphsiText 7 - 居中对齐文本和段落
【发布时间】:2018-09-10 13:42:31
【问题描述】:

我正在尝试将文本块居中对齐,但结果不一致。这是我的代码的粗略想法:

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

这是 PDF 输出:

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

我已经检查了 iText 文档,但是有没有办法做到这一点而不必创建表格和单元格?

【问题讨论】:

标签: c# itext itext7


【解决方案1】:

当你这样做时:

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

那么你希望坐标(x, y)与文本的中间"some text"重合。

在您的代码 sn-p 中,您将一些文本以坐标 (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) 内添加文本并将所有内容居中。

【讨论】:

  • 这就是诀窍。谢谢你。如果我没有指定角度,我将如何旋转文本块?
  • 上面的任何信息,@bruno?
  • 这是一个不同的问题。一些物体可以旋转;有时需要创建PdfXObject(您可以旋转它们)。
  • 感谢您的回复。感谢这是一个新问题,但是我的原始方法“baseCanvas.ShowTextAligned ...”允许将半径作为参数传递。我是否必须将矩形或段落转换为 PdfXObject?
  • Canvas 中的 ShowTextAligned() 方法还允许您通过半径。见itextsupport.com/apidocs/iText7/latest/com/itextpdf/layout/…主要区别在于iText 5中的半径以度数表示,而iText 7中的半径以弧度表示。您最初的评论与ShowTextAligned() 无关;它是关于旋转一个 block 的文本。你的 cmets 把我弄糊涂了。
【解决方案2】:

我是这样做的。文档创建的地方,获取文档的宽度。

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.");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-02
    • 2013-09-24
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    相关资源
    最近更新 更多