2014-02-13 4 views
1

숨바꼭질, 내가 PDF 생성을위한 보고서 실험실을 사용하고ReportLab - 중복 단어

. 제목을 나타내는 Paragraph 인 텍스트를 그려야합니다. 제목이 단락의 사용 가능한 너비보다 길면 다음 줄로 나뉘며 단락의 사용 가능한 너비와 높이에 맞도록 제목을 길게 만들려면 텍스트 크기가 조정됩니다. 내가 더 큰 글꼴과 스타일을 선택하면

그것은처럼, 10의 amaller 글꼴로 확인 작업을하지만, 경우 : 텍스트보다

title_style = ParagraphStyle("title", fontName='Helvetica', fontSize=50, alignment=TA_CENTER, backColor=None) 

아래 이미지처럼 그려지는 단어는 중복 : 여기 sample image

내 코드입니다 :

def draw_on(canvas, x, y, paragraph, style, text, available_width, available_height, min_font_size=8): 
    w, h = paragraph.wrap(available_width, available_height) 
    temp_font_size = paragraph.style.fontSize 

    while temp_font_size > min_font_size: 

     if w <= available_width and h <= available_height: 
      paragraph.drawOn(canvas, x, y) 
      break 
     else: 

      temp_font_size -= 1 
      style.fontSize = temp_font_size 
      paragraph = Paragraph(text, style) 
      w, h = paragraph.wrap(available_width, available_height) 



def generate_pdf(): 

    c = canvas.Canvas("FirstPage.pdf") 

    title_style = ParagraphStyle("title", fontName='Helvetica', fontSize=10, alignment=TA_CENTER, backColor=None) 

    title_text = 'If title has a small font, everything s ok.' 
    title_paragraph = Paragraph(title_text, title_style) 
    title_paragraph_available_width = 2*inch 
    title_paragraph_available_height = 1*inch 
    title_min_font_size = 8 

    draw_on(c, 2*inch, 5*inch, title_paragraph, title_style, title_text, title_paragraph_available_width, 
      title_paragraph_available_height, title_min_font_size) 


    c.showPage() 
    c.save() 

누구나 그 일이 어떻게 그 문제를 해결하는 이유 ideea의를 가지고가?

답변

1

이 작업은 사용 설명서의 67 페이지에 설명되어 있습니다 :

fontSize는 및 글꼴 이름 태그 명백하다, 그러나 최고의 을 설정하는 것이 중요합니다. 이것은 인접한 텍스트 행 사이의 간격입니다. a 좋은 경험 법칙은 이것을 포인트 크기보다 20 % 크게하는 것입니다.

그래서 귀하의 경우에는 보조 노트로, 나도 reportlabs의 잠재력 오리너구리 (Paragraph 년대 등을 사용하도록 권합니다, 또한 당신의 ParagraphStyle

leading = 50 * 1.2을 추가해야 할 필요가) 또는 더 간단하고 코드 작성이 쉬운 reportlabs pdfgen을 사용하십시오. 오리너구리는 더 긴 텍스트와 상대적 위치 지정 (라텍스)에 적합하고 pdfgen은 절대 위치 지정 (단어)에 더 적합합니다. 그러나 이것은 단지 나의 의견입니다 ...