2017-07-29 12 views
-1

私は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サポートのためにこれを使用する必要があります)を作成し、特定の座標位置で配置する方法でした。 enter image description here

+0

私はbaseFont.GetWidthPoint(pageContextの、fontSizePoints)= Wフロートを使用しようとしていました。それは私に正しい幅を与えてくれません。コンテキストは壊れています – Elidotnet

+0

私はiText 7にアップグレードし、pdfCalligraphを使用します。そうすれば、あなたはこのような問題を避けることができます。あなたが投稿した以前の質問に対する回答ですでに書いたように、iText 7より前のバージョンでRight-To-Leftのサポートはかなり制限されており、iText 5はメンテナンスモードにあります。つまりiText 5もうiText 5に必要なものはすぐにサポートされているわけではないので、iText 5を自分で拡張するか、iText 7に切り替える必要があります。 –

+0

@BrunoLowagie itextsharpソリューションの最大の希望は知っています他の誰よりもこの図書館を知っていることをご存じだと思いますが、これは私がこのプロジェクトの最後の問題です。すべてのプロジェクトはitext 5を使ってビルドされました。すべてのプロジェクトコードをオーバーライドするのが大変です。この問題を解決するには何らかの方法が必要です。 – Elidotnet

答えて

0

@mkl返信ありがとうございます。私が見つけた最高の解決策はそれです。絶対位置+ RTLサポートですばらしい仕事をしています。

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.1; 
       string fontColor = project.Slides[i].Labels[j].Color; 

       float X = (float)project.Slides[i].Labels[j].X; 
       float Y = pHeightPoints - (float)project.Slides[i].Labels[j].Y; 
       float width = (float)project.Slides[i].Labels[j].Widht; 
       float height = (float)project.Slides[i].Labels[j].Heigh; 

       float llx = X; 
       float lly = Y + height; 
       float urx = X + width; 
       float ury = 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); 

       PlaceText(writer.DirectContent, pageContext, 
        new Font(baseFont, fontSizePoints, 
         Font.NORMAL, 
         new BaseColor(color)), llx, lly, urx, ury, 14, 
         Element.ALIGN_RIGHT); 
      } 
     } 
     catch (Exception) 
     { 

     } 

と...

protected static void PlaceText(PdfContentByte pdfContentByte 
          , string text 
          , iTextSharp.text.Font font 
          , float lowerLeftx 
          , float lowerLefty 
          , float upperRightx 
          , float upperRighty 
          , float leading 
          , int alignment) 
{ 
    ColumnText ct = new ColumnText(pdfContentByte); 
    ct.RunDirection = PdfWriter.RUN_DIRECTION_RTL; 
    ct.SetSimpleColumn(new Phrase(text, font), lowerLeftx, lowerLefty, upperRightx, upperRighty, leading, alignment); 
    ct.Go(); 
} 

おかげ

+0

float w = baseFont.GetWidthPoint(pageContext、fontSizePoints);使用されていない – Elidotnet

関連する問題