我使用带有C#的iText 7,我必须写一个长行。
使用canvas.BeginText().ShowText("My text")
,我找不到在第二行传递文字的方法,\n
无法识别。
所以我使用了矩形和文档渲染器,但我遇到了同样的问题,我无法控制我希望文本创建新行的位置。
我使用现有的PDF(模型),我必须写一些文本(简短的一行)和一些段落(由几行组成)。这些元素在xml中定义,我可以在其中使用一些回车来分隔段落中的新行。简而言之,文档是动态组合的,它的内容和元素的位置是在xml文件中定义的。
答案 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中找到。
屏幕截图显示了如何在Rectangle
内添加长句,以及该句子如何在不同的行上分布(自动引入新行)。 \n
字符的概念在PDF中不存在(如有疑问,请查看ISO 32000)。如果您想引入换行符,只需将一部分内容放在一个Paragraph
中,另一部分放在另一个Paragraph
中。