2014-04-16 5 views
0

ReportLab에서 여러 수준의 번호 매기기 목록을 만들고 싶습니다. 거의 모든 곳에서 보았습니다. 번호가 매겨진 목록 만 만들 수있는 태그를 찾을 수 있습니다. 나는 다음과 같은 코드를 작성할 때, 내 목록은 다음과 같습니다Reportlab에서 여러 수준의 단락 번호 매기기

contents.add(Paragraph("<seq/>. Level 1 Header", h1)) 
    contents.add(Paragraph("<seq/>. Level 2 Header", h2))  
    contents.add(Paragraph("<seq/>. Level 1 Header", h1)) 
  1. 레벨 1 헤더 1이 실제로 < 것을
    1. 레벨 2 헤더 (... 유래는 표시되지 (< 것을이 실제로 3)
    제가
  • 수준을) 1 헤더를 작성 중입니다 대신에 이런 일의
  • :

    1. 레벨 1 헤더

      1.1 레벨 2 헤더

    2. 레벨 2 헤더

    사람이 알고 있나요 방법 달성 해? 많은 감사드립니다!

    편집 : @로 Snoozer의 코멘트는, 지금의 :

    1. Level 1 Header 
        2.1 Level 2 Header 
    3. Level 1 Header 
    

    을 ... 여전히 올바르지이다. 첫 번째 수준의 색인을 유지하기위한 가치를 지닌 것을 찾을 수 없습니다.

    답변

    0

    편집 : 나는 지금 무엇을 당신이하려고하는 것은 불가능하지만 난 당신이 정확한 #.# 포맷에 대해 상관하지 않는 경우 권고

    의 부부, 여러를 사용하여이 작업을 수행 할 수 있습니다 믿습니다 seq 태그. 여러 개의 seq 태그를 쉽게 사용하려면 seqOrder으로 시작하십시오. 이것은 상위 레벨의 seq 태그를 사용할 때마다 하위 레벨이 재설정된다는 좋은 속성을 가지고 있습니다. 레벨을 뚜렷하게 보이게하려면, 각각을 다르게 포맷하는 것이 좋습니다.

    contents.add(Paragraph(('<seqChain order="lev1 lev2"/>' 
             '<seqFormat id="lev1" value="1">' 
             '<seqFormat id="lev2" value="a">' 
             '<seq id="levelOne"/>. Level 1 Header'), h1)) 
    contents.add(Paragraph('<seq id="levelTwo"/> Level 2 Header', h2))  
    contents.add(Paragraph('<seq id="levelOne"/>. Level 1 Header', h1)) 
    #We didn't have to reset the level 2 tag because chain takes care of it 
    contents.add(Paragraph('<seq id="levelTwo"/> Level 2 Header', h2)) 
    

    여기에서 유용한 페이지는 ReportLab's RML userguide입니다. <name\> 태그를 사용하여 현재 상위 레벨의 값을 저장하려고 시도했지만 1 회 사용 후 <name\> 태그를 재 할당 할 수 없다고 표시됩니다. 파이썬으로 이것을 추적하는 다른 프로그래밍 방식에 대해 생각했지만이 시점에서 여러분은리스트를 직접 작성하고 있습니다. 당신은 당신을 위해 단락을 추가 수동 반복/적절한 수준의 값을 재설정 할 함수를 정의 할 수 있지만 한 가지 예는

    level1 = 1 
    contents.add(Paragraph('{0}. Level 1 Header'.format(level1), h1)) 
    level2 = 1 
    contents.add(Paragraph('{0}.{1} Level 2 Header'.format(level1,level2), h2)) 
    #Now we have to automatically increment level1 
    level1 += 1  
    contents.add(Paragraph('{0}. Level 1 Header'.format(level1), h1)) 
    #and manually reset level 2 
    level2 = 1 
    contents.add(Paragraph('{0}.{1} Level 2 Header'.format(level1,level2), h2)) 
    

    될 것이다.

    파이썬에서이 작업을 수행하고 있는지 잘 모르겠습니다. RML이 상용 버전의 reportlab이고 RML 태그를 추가하여 문서를 만든 적이 없다는 것을 알고 있습니다.그러나 파이썬을 사용하는 경우 Flowables을 사용하여 문서를 빌드하는 것이 좋습니다. 이러한 유형의 목록을 만들려면 ListFlowable이 있어야합니다. ListFlowable은 이러한 RML 태그에 대한 인터페이스 일 뿐이므로 원하는 형식으로 레이블이있는 목록을 생성 할 수는 없습니다. 86 페이지의 ReportLab User Guide에서 Flowables에 대해 자세히 알 수 있습니다.

    +0

    헤더 색인은 id가있는 경우에도 여전히 틀립니다. 형식을 제대로 볼 수 없으므로 위의 수정을 참조하십시오. – essicajayc