我使用itext sharp來即時創建PDF。我正在使用ColumnText,因爲我正在處理從右到左的內容。通過搜索網頁,我明白那個column.SetSimpleColumn是接受4 args(x,y,w,h)對不對?我的第一個問題是,我不知道列的寬度和高度,我需要它是由文本內容動態的。任何人有一個想法如何根據他的內容設置列的寬度和高度?以絕對點位置列文本itext sharp
try
{
for (int j = 0; j < project.Slides[i].Labels.Count; j++)
{
string pageContext = project.Slides[i].Labels[j].Text;
int fontNumber = Convert.ToInt32(project.Slides[i].Labels[j].Font);
int fontSize = Convert.ToInt32(project.Slides[i].Labels[j].Size);
float fontSizePoints = (float)fontSize * (float)2.3;
string fontColor = project.Slides[i].Labels[j].Color;
float fontX = (float)project.Slides[i].Labels[j].X;
float fontY = (float)project.Slides[i].Labels[j].Y;
var color = System.Drawing.ColorTranslator.FromHtml(fontColor);
baseFont = GetBaseFont(fontNumber);
float w = baseFont.GetWidthPoint(pageContext, fontSizePoints);
Font dFont = new Font(baseFont, fontSizePoints);
dFont.Color = new BaseColor(color);
ColumnText column = new ColumnText(writer.DirectContent);
column.SetSimpleColumn(fontX, fontY, w, 100);
column.RunDirection = PdfWriter.RUN_DIRECTION_RTL;
column.AddElement(new Paragraph(pageContext, dFont));
column.Go();
}
}
catch (Exception)
{
}
我附上圖像來描述問題。文檔中可以有一個或20個文本列。我不知道這個字體的大小和這個文本有多長。它可以是2個字或30個字。我唯一的信息是左邊的x,y |底部座標(和字體系列,大小,顏色...)我的問題是如何創建TextColumn(需要使用這個,因爲RTL支持),並將其放置在特定的座標位置。
我試圖用浮動W = baseFont.GetWidthPoint(pageContext中,fontSizePoints);但它沒有給我正確的寬度。上下文正在破壞 – Elidotnet
我會升級到iText 7並使用pdfCalligraph。這樣,你會避免這樣的問題。正如我在回答您之前發佈的問題時所寫的那樣,在iText 7之前的版本中對從右到左的支持是相當有限的,iText 5處於維護模式,這意味着我們不會在iText 5上進行主動開發了。 iText 5不需要現成的支持,因此無論是你自己擴展iText 5還是切換到iText 7。 –
@BrunoLowagie我知道你是itextsharp解決方案的最大希望而且你比其他人更瞭解這個圖書館,這是我對這個項目的最後一個問題。所有的項目都是使用itext 5構建的,現在將會覆蓋所有項目代碼。必須有一些方法來完成這個問題 – Elidotnet