2010-11-25 4 views
4

iTextSharp를 사용하여 기존 PDF를로드하고 PdfStamper를 사용하여 텍스트를 추가합니다. 텍스트를 완전히 제어하고 싶습니다. 즉, 글꼴 (트루 타입 만), 글꼴 크기 및 좌표를 제어 할 수 있기를 원합니다. 지금은 특정 코디네이트에 텍스트를 추가하고 ShowFontAndSize를 사용하여 글꼴 및 글꼴 크기를 설정하기 위해 ShowTextAligned를 사용하고 있습니다. 이 부가 기능은 내 코드 텍스트 : 다음 기능은 트루 타입 글꼴을로드하는 데 사용됩니다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(); 
    } 

:

다음 코드는 기존의 PDF로드하는 데 사용됩니다
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; 
    } 

:

 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

아니요. 한 번에 한 글꼴 만 처리합니다. 호기심에서 당신은 나쁜 pdf 결과를 얻기 위해 무엇을하고 있습니까? 당신의 코드를보고 싶습니다.

대신 ColumnText를 살펴보십시오. 꽤 많은 예제가 떠돌고 있으며 "iText in Action 2nd edition"에서 잘 설명되어 있습니다. 이 책의 모든 샘플은 온라인에서 사용할 수 있습니다.

관련 문제