iText7,有没有办法控制矩形内的回车?

时间:2017-05-09 10:00:19

标签: c# pdf itext7

我使用带有C#的iText 7,我必须写一个长行。

使用canvas.BeginText().ShowText("My text"),我找不到在第二行传递文字的方法,\n无法识别。

所以我使用了矩形和文档渲染器,但我遇到了同样的问题,我无法控制我希望文本创建新行的位置。

我使用现有的PDF(模型),我必须写一些文本(简短的一行)和一些段落(由几行组成)。这些元素在xml中定义,我可以在其中使用一些回车来分隔段落中的新行。简而言之,文档是动态组合的,它的内容和元素的位置是在xml文件中定义的。

1 个答案:

答案 0 :(得分:1)

使用BeginText()ShowText()EndText()等低级方法添加内容需要熟悉PDF规范(ISO 32000)。您对\n被忽略这一事实感到惊讶的事实告诉我,您并不精通PDF。

iText是为那些不想处理PDF的低级语法的人编写的。例如:如果要使用iText在矩形内添加文本,则只需创建一个Canvas对象,并将Rectangle对象传递给该对象:

PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
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);
canvas.Add(p);
pdf.Close();

此示例可在在线iText 7教程的chapter 2中找到。 long sentence inside a rectangle

屏幕截图显示了如何在Rectangle内添加长句,以及该句子如何在不同的行上分布(自动引入新行)。 \n字符的概念在PDF中不存在(如有疑问,请查看ISO 32000)。如果您想引入换行符,只需将一部分内容放在一个Paragraph中,另一部分放在另一个Paragraph中。