2017-05-09 141 views
-4

我使用iText 7与C#和我必须写一个长行。iText7,有没有办法控制矩形内的回车?

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

所以我使用矩形和文档渲染器,但我有同样的问题,我无法控制我想要我的文本创建一个新行的位置。

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

+0

如果要添加适合矩形内的文本,为什么要使用底层方法?参见本教程的[第2章](http://developers.itextpdf.com/content/itext-7-building-blocks/chapter-2-working-rootelement)。是否有一个原因,你想以一种更简单的方式做一些艰难的事情? –

回答

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内加入一个长句子,那句话是怎么分布在不同线路(自动引入新的生产线)。 PDF中不存在\n字符的概念(如有疑问,请检查ISO 32000)。如果您想要引入换行符,将一部分内容放入一个Paragraph而将另一部分放入另一个Paragraph即可。

+0

@herve现在话题:我添加的屏幕截图显示了一个长句子是如何在一个矩形内添加的,以及这个句子如何分布在不同的行上(自动引入新行)。 PDF中不存在'\ n'字符的概念(如有疑问,请检查ISO 32000)。如果你想引入一个换行符,把一部分内容放在一个“段落”中而另一部分放在另一个“段落”中就足够了。为什么这不能解决你的问题? –

+0

感谢您的回答。它部分解决了这个问题。在我的情况下,我使用现有的PDF(模型),我必须编写一些文本(简写为单行)和一些段落(由多行组成)。这些元素是在xml中定义的,我可以使用一些回车符在段落中划分新行。简而言之,文档是动态组合的,它的内容和元素的位置是在xml文件中定义的。 – herve

+0

从你的问题中不清楚。我们建议您改善您的问题。这是你这样做的机会。请注意,PDF不是一种文字处理格式。 PDF中的所有内容都以绝对坐标(固定位置)添加。你不能只添加内容,并期望现有的内容将适应新的内容。您可能想要解释如何使用静态文档(现有的PDF)与您声称动态编写文档的说法没有矛盾。需要更多的说明。 –

相关问题