2012-01-31 11 views
0

画像を含むPDF文書を作成しましたが、各画像の下にテキストを追加しようとしていますが、ページのテンプレートは、 。私の問題は、テキストの追加と配置に問題があることです。画像の後にpdfにテキストを追加する

コード画像を追加するためのテキストを追加するための

int count = 0; 

     imageStartX = (docSize.Width/100) * marginSizeProcent; 

     float imageMaxHeight = 0; 
     float imageMaxWidth = 0; 

     iTextSharp.text.Image image = null; 

     switch (pageLayout) 
     { 
      case PageLayoutEnum.SingleImage: 

       imageMaxWidth = docSize.Width - ((docSize.Width/100) * (2 * (float)marginSizeProcent)); 
       imageMaxHeight = imageStartY - ((docSize.Width/100) * (float)marginSizeProcent); 


       foreach (PDFObject o in pdfObjects) 
       { 
        if (count > 0) 
         AddPageWithHeader(false); 

        image = iTextSharp.text.Image.GetInstance(o.File); 
        image.ScaleToFit(imageMaxWidth, imageMaxHeight); 
        image.SetAbsolutePosition(imageStartX + (imageMaxWidth - image.ScaledWidth)/2, imageStartY - image.ScaledHeight - (imageMaxHeight - image.ScaledHeight)/2); 

        image.Border = Rectangle.BOX; 
        image.BorderWidth = 2f; 
        image.BorderColor = BaseColor.DARK_GRAY; 

        document.Add(image); 

        count++; 
       } 

       break; 

      case PageLayoutEnum.TwoImages: 

コード:

MemoryStream memoryStream = new MemoryStream(); 

     PdfReader pdfReader = new PdfReader(documentStream.ToArray()); 
     PdfStamper stamper = new PdfStamper(pdfReader, memoryStream); 

     PdfContentByte contentbyte = stamper.GetUnderContent(1); 
     ColumnText dispalyIdText = new ColumnText(contentbyte); 
     Paragraph idText; 

     int counter = 0; 

     switch (pageLayout) 
     { 
      case PageLayoutEnum.SingleImage: 
       foreach (PDFObject item in pdfObjects) 
       { 
        dispalyIdText.SetSimpleColumn(200, 200, 200, 200, 200, Element.ALIGN_LEFT); 
        idText = new Paragraph(new Chunk(item.DisplayId, FontFactory.GetFont("Arial", 20, Font.BOLD, BaseColor.RED))); 
        dispalyIdText.AddElement(idText); 
       } 
       break; 

      case PageLayoutEnum.TwoImages: 

答えて

1

をあなたがそれらを持っているだけで、あなたの実際の問題が何であるかを言うことはありません。

私が推測したことは、あなたの問題の1つは、テキストが実際にPDFに表示されていないことです。これには3つの異なる理由があります。最初はこの行です:

dispalyIdText.SetSimpleColumn(200, 200, 200, 200, 200, Element.ALIGN_LEFT); 

このメソッドの最初の4つのパラメータは、あなたがあなたの図面を制限したい長方形の座標です。第1パラメータは左下xであり、第2パラメータは左下yであり、第3パラメータは右上xであり、第4パラメータは右上yである。あなたのコードでは、左下の座標が200,200、右上の座標が200,200の四角形にテキストをバインドすると言っています。つまり、長方形の幅と高さがゼロになります。これを修正するには、実際に機能する四角形を与える必要があります。 PDFには、左下隅には、とても20個のピクセルです(ない実際のピクセルが、それはまた別の話だ)あなたがしたい高と200広い左下隅にある四角形でテキストを描画する0,0です:

dispalyIdText.SetSimpleColumn(0, 0, 200, 20, 200, Element.ALIGN_LEFT); 

2番目の問題は、leading(行の高さ)を200に設定していることです。作成しているオブジェクトによっては、テキストが途切れることがあります。おそらくフォントの高さに、これをもっと正気なものに設定するべきです。これはAddElementには影響しませんが、SetTextに影響します。

dispalyIdText.SetSimpleColumn(0, 0, 200, 20, 12, Element.ALIGN_LEFT); 

最後の問題はColumnTextを使用しているときに「テキスト」モードになりますし、あなたが処理を開始する準備ができているときにシステムに伝える必要があるということです。あなたはGo()コマンドを発行して次の操作を行います。

dispalyIdText.Go(); 
+0

おかげでクリスは、私は、テキストを表示して配置するPDFContentByteを使用して、別の解決策を見つけました。通常は問題解決のためのあなたのかなり正しいので、私はこの1つについてもあなたの権利を推測しています!私のコードのこの部分を再訪しなければならない場合、私はあなたの提案を試みます。 – DaNet

関連する問題