私はitext sharpでPDFを作成しています。私は右から左のコンテンツを扱っているので、私はColumnTextを使用しています。 Webを検索することで、column.SetSimpleColumnが4つの引数(x、y、w、h)を受け入れることを理解していますか?私の最初の問題は、私は、列の幅と高さを知らないことです、私はそれがテキストの内容によって動的になる必要があります。どのように内部の彼の内容に応じて列の幅と高さを設定するか考えている人はいますか?カラムのテキストを絶対的な位置に配置します。これは、テキストをシャープにします。
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)
{
}
問題を説明する画像を添付しています。文書には1つまたは20のテキスト列があります。私はフォントのサイズとこのテキストがどれくらいの長さかわかりません。 2ワードまたは30ワードにすることができます。私が持っている唯一の情報は、左のx、yです。私の質問は、TextColumn(RTLサポートのためにこれを使用する必要があります)を作成し、特定の座標位置で配置する方法でした。
私はbaseFont.GetWidthPoint(pageContextの、fontSizePoints)= Wフロートを使用しようとしていました。それは私に正しい幅を与えてくれません。コンテキストは壊れています – Elidotnet
私はiText 7にアップグレードし、pdfCalligraphを使用します。そうすれば、あなたはこのような問題を避けることができます。あなたが投稿した以前の質問に対する回答ですでに書いたように、iText 7より前のバージョンでRight-To-Leftのサポートはかなり制限されており、iText 5はメンテナンスモードにあります。つまりiText 5もうiText 5に必要なものはすぐにサポートされているわけではないので、iText 5を自分で拡張するか、iText 7に切り替える必要があります。 –
@BrunoLowagie itextsharpソリューションの最大の希望は知っています他の誰よりもこの図書館を知っていることをご存じだと思いますが、これは私がこのプロジェクトの最後の問題です。すべてのプロジェクトはitext 5を使ってビルドされました。すべてのプロジェクトコードをオーバーライドするのが大変です。この問題を解決するには何らかの方法が必要です。 – Elidotnet