如何在段落的一行中严格保持文本块在一起

How to strictly keep text block together in one line of Paragraph

红色的第一部分在一行中。

但是对于红色的第二部分,它被分割成多行,不是纯文本,而是由Text & Link.

代码如下:

PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
Document doc = new Document(pdfDoc, PageSize.A4, false);
doc.SetMargins(55f, 55f, 45f, 55f);

var pageWidth = doc.GetPageEffectiveArea(PageSize.A4).GetWidth();
var pageHeight = doc.GetPageEffectiveArea(PageSize.A4).GetHeight();

var text1 = "Our PDF toolkit offers you one of the best-documented and most versatile PDF engines in the world (written in Java and .NET), which allows you to not only integrate PDF functionalities into your workflow, but also in your applications, processes products";
var text2 = "We have an active community of partners, customers, and contributors, that help us every day to improve our products, documentation and support. We see them as part of our iText family, and hope you will join our family too.";

var riseText = "[12,13,14,15]";

var link1 = new Link("12", PdfAction.CreateURI("http://123.com"));
link1.SetTextRise(3).SetFontColor(ColorConstants.ORANGE);
link1.GetLinkAnnotation().SetBorder(new PdfAnnotationBorder(0, 0, 0));

var link2 = new Link("13", PdfAction.CreateURI("http://123.com"));
link2.GetLinkAnnotation().SetBorder(new PdfAnnotationBorder(0, 0, 0));
link2.SetTextRise(3).SetFontColor(ColorConstants.ORANGE);

var link3 = new Link("14", PdfAction.CreateURI("http://123.com"));
link3.GetLinkAnnotation().SetBorder(new PdfAnnotationBorder(0, 0, 0));
link3.SetTextRise(3).SetFontColor(ColorConstants.ORANGE);

var link4 = new Link("15", PdfAction.CreateURI("http://123.com"));
link4.GetLinkAnnotation().SetBorder(new PdfAnnotationBorder(0, 0, 0));
link4.SetTextRise(3).SetFontColor(ColorConstants.ORANGE);


var p1 = new Paragraph();
p1.SetWidth(200f).SetMarginBottom(20).SetTextAlignment(TextAlignment.JUSTIFIED);
p1.Add(text1);
p1.Add(new Text(riseText).SetTextRise(3).SetFontSize(9));
p1.Add(text2);

var p2 = new Paragraph();
p2.SetWidth(200f).SetTextAlignment(TextAlignment.JUSTIFIED);
p2.Add(text1);
p2.Add(new Text("[").SetTextRise(3).SetFontSize(9))
    .Add(link1.SetFontSize(9))
    .Add(new Text(",").SetTextRise(3).SetFontSize(9))
    .Add(link2.SetFontSize(9))
    .Add(new Text(",").SetTextRise(3).SetFontSize(9))
    .Add(link3.SetFontSize(9))
    .Add(new Text(",").SetTextRise(3).SetFontSize(9))
    .Add(link4.SetFontSize(9))
    .Add(new Text("]").SetTextRise(3).SetFontSize(9));
p2.Add(text2);

doc.Add(p1);
doc.Add(p2);

doc.Close();

所以我的问题是如何将文本块(Text + Link)严格地保持在一行段落中? (对于iText5,我认为可以利用Phrase来实现。)

你可以在这里做个小把戏,在段落中添加一个内部块元素。这将使内部块元素表现得像 HTML/CSS 中的内联块元素,并避免自动换行。这是代码:

var p2 = new Paragraph();
p2.SetWidth(200f).SetTextAlignment(TextAlignment.JUSTIFIED);
p2.Add(text1);

var inlineBlock = new Paragraph();
inlineBlock.Add(new Text("[").SetTextRise(3).SetFontSize(9))
    .Add(link1.SetFontSize(9))
    .Add(new Text(",").SetTextRise(3).SetFontSize(9))
    .Add(link2.SetFontSize(9))
    .Add(new Text(",").SetTextRise(3).SetFontSize(9))
    .Add(link3.SetFontSize(9))
    .Add(new Text(",").SetTextRise(3).SetFontSize(9))
    .Add(link4.SetFontSize(9))
    .Add(new Text("]").SetTextRise(3).SetFontSize(9));
p2.Add(inlineBlock);
p2.Add(text2);