2017-05-09 77 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)與您聲稱動態編寫文檔的說法沒有矛盾。需要更多的說明。 –

相關問題