2010-11-25 16 views
4

私はiTextSharpを使用して既存のPDFを読み込み、PdfStamperを使用してテキストを追加しています。テキストを完全に制御したい、つまりフォント(TrueTypeのみ)、フォントサイズ、座標を制御できるようにしたいということです。今は、ShowTextAlignedを使用して特定のコーディネートにテキストを追加し、setFontAndSizeを使用してフォントとフォントサイズを設定しています。これは、テキストを追加するための私のコードです:iTextSharpとPDFStamperを使用してPDFで異なるフォントを使用する

private void AddText(BaseFont font, string text, int x, int y, int size) 
    { 
     pdf.BeginText(); 
     pdf.SetFontAndSize(font, size); 
     pdf.ShowTextAligned(PdfContentByte.ALIGN_LEFT, text, x, y, 0); 
     pdf.EndText(); 
    } 

次の関数は、TrueTypeフォントをロードするために使用されます。

public BaseFont GetFont(string font, string encoding) 
    { 
     if (!(font.EndsWith(".ttf") || font.EndsWith(".TTF"))) 
      font += ".ttf"; 

     BaseFont basefont; 

     basefont = BaseFont.CreateFont(ConfigurationManager.AppSettings["fontdir"] + font, encoding, BaseFont.NOT_EMBEDDED); 

     if (basefont == null) 
      throw new Exception("Could not load font '" + font + "' with encoding '" + encoding + "'"); 

     return basefont; 
    } 

次のコードは、既存のPDFを読み込むために使用されます。

 Stream outputPdfStream = Response.OutputStream; 
     PdfReader pdfReader = new PdfReader(new RandomAccessFileOrArray(HttpContext.Current.Request.MapPath("PdfTemplates/" + ConfigurationManager.AppSettings["pdf_template"])), null); 
     PdfStamper pdfStamper = new PdfStamper(pdfReader, outputPdfStream); 

     pdf = pdfStamper.GetOverContent(1); 

これは、異なるフォントを使用しようとする場合を除いて、すべて完全に動作します。そのため、AddTextが異なるフォントで複数回呼び出されると、PDFはopenend時に一般的なエラーを表示します。 ShowTextAligned関数を使用して別のフォントを使用することが可能かどうか、もしあれば、どうですか?

答えて

1

答えていただきありがとうございます。しかし、私は既に問題を解決しました。ブラウザにPDFの大きさを伝えるために使用するContent-Typeヘッダーに問題がありました。これにより、PDF全体が実際にダウンロードされる前に、ブラウザのダウンロードが停止されました。新しいフォントを追加すると、PDFサイズがContent-Typeヘッダーで指定されたサイズを超えてしまい、結果としてPDFが悪くなります。それは今解決されて、複数のフォントはうまく動作します:-)。

1

実際にはありません。一度に1つのフォントしか処理しません。好奇心から、あなたは悪いpdfの出力を得るために何をしていますか?私はあなたのコードを見たいと思います。

代わりにColumnTextを見てください。かなりの数の例が浮かび上がっていて、「iText in Action 2nd edition」で十分にカバーされています。本のサンプルはすべてオンラインで入手できます。

関連する問題