You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

14 KiB

layout type title date tags
post handbook PDF Styling 2013-12-19 coding

จะม style คราวๆ ใหไดดการปรบแตงกนเอง (โดยเฉพาะตำแหนงการวาง ชดซาย กลาง ชดขวา) ใน core.views.pdfs ซงจรงๆแลวกจะแบงมาตรฐานเปน 2 สวน ค

  • Paragraph -- กำหนดดวย ParagraphStyle
  • Table -- กำหนด style ดวย style_tab (แตองใสเองทงหมด)

Paragraph

ในสวนนจะเปนการกำหนด style คราวๆ เพอใหเปนแนวทางหลกในการใชงานทงหมด โดยมงหมดดงน

  1. style_base - อนนเอาไวเปน parent style เฉยๆครบ เพราะมกำหนดแคปแบบตวอกษรเปน TH Sarabun
  2. style_h1 - ขนาด font 18 ตวหนา พรอมม space บนลางตามเหมาะสม
  3. style_h1c - อนนh1 แตง align เปน center คร
  4. style_h2 - ขนาด font 16 ตวหนา พรอมม space บนลางตามเหมาะสม
  5. style_h2c - อนนh2 แตง align เปน center คร
  6. style_h3 - ขนาด font 14 ตวหนา พรอมม space บนลางตามเหมาะสม
  7. style_h3c - อนนh2 แตง align เปน center คร
  8. style_normal - ขนาด font 14 ไม space บนลาง ไมอหน
  9. style_normal_indent - เหมอน style_normal แตอหนาของบรรทดแรกเขาไป 4 space คร
  10. style_footnote - อนนสำหรบอธบายใตตารางครบ ตวเลกๆ 12 ไม space บนลาง ไมอหน

หรอจะเปน code กตามดานลางน

style_base = ParagraphStyle('normal', parent=style_base_sample,
                           fontName='TH Sarabun New')
style_h1 = ParagraphStyle('h1', parent=style_base, 
                       fontName='TH Sarabun New Bold',
                       fontSize=18,
                       leading=21,
                       spaceBefore=7, spaceAfter=8,)
style_h1c = ParagraphStyle('h1c', parent=style_h1,
                       alignment=TA_CENTER,)
style_h2 = ParagraphStyle('h2', parent=style_base, 
                       fontName='TH Sarabun New Bold',
                       fontSize=16,
                       leading=19,
                       spaceBefore=7, spaceAfter=8,)
style_h2c = ParagraphStyle('h1c', parent=style_h2,
                       alignment=TA_CENTER,)
style_h3 = ParagraphStyle('h2', parent=style_base, 
                       fontName='TH Sarabun New Bold',
                       fontSize=14,
                       leading=17,
                       spaceBefore=7, spaceAfter=8,)
style_h3c = ParagraphStyle('h1c', parent=style_h3,
                       alignment=TA_CENTER,)
style_normal = ParagraphStyle('normal', parent=style_base,
                       fontSize=14,
                       leading=17,)
style_normal_indent = ParagraphStyle('normal', parent=style_normal,
                       firstLineIndent=16)
style_footnote = ParagraphStyle('footnote', parent=style_base,
                       fontSize=12,
                       leading=15,)

การใชงานจะสามารถ import ไดประมาณน

from core.views.pdfs import style_h1, style_h1c, style_normal

style พวกนอาจจะตอบคำถามไมไดหมด เชน ตวชดขอบซาย ขอบขวาจะทำอยางไร แนะนำใหทำตามนเพอให code ดสะอาดและจดการงายทดครบ เชน กรณเราตองการสวนทมวนทงจะมขนาดตามปกต (style_normal) แตนจะตองชดขอบขวา กจะสามารถทำไดโดยสราง style ของตวเองเป

style_normal_right = ParagraphStyle('nr', parent=style_normal, alignment=TA_RIGHT,)

ตอนนเรากจะได style ทดขวามาแลวโดยทเราไมไดกำหนดรปแบบตวอกษรเองเลย เพยงแคกำหนดวาใหนชดฝงไหนกพอตรง alignment=TA_RIGHTวนในเรองของยอหนานนจะม 2 เรองทองร

  1. firstLineIndentนนจะคอ จะใหอหนาเทาไหรสำหรบบรรทดแรก แลวบรรทดอนกจะกลบมาชดซายสดเหมอนเด
  2. leftIndent จะเปนการเลอนตำแหนงขอบซายทงยอหนา เหมอนอารมณใชบ list ทเปนขอๆ มนจะไมนไปซายสดขอบกระดาษ แตเปนการกำหนดวา เลอนขอบซายทParagraph
  3. หนวยของคาทใชสำหรบ 2 ตวนไมแนใจเหมอนกนวา คออะไรครบ แต 4 คอ เทากบ 1 ตวอกษร หรอถาตองการ 4 space กจะตองใช firstLineIndent=16 เปนต

งสองอนนสามารถใชวมกนไดครบ ไมญหาอะไร

วนหนงทผมคดวา นาจะมญหาคอ ความสงระหวาง Paragraph หรspaceBefore และ spaceAfter ทาง style ขางตนจะมการกำหนดเพยงแควนของ style_h1, style_h1c, style_h2, style_h2c, style_h3, style_h3c แตในสวนของ style_normal จะไมไดกำหนดไวงนนจะสามารถเลอกไดเองวาจะทำ style ใหมเพอเพมในสวนน หรอวาจะใช Spacer กได

Spacer

เปนแคววางเปลาไวกำหนดความส

from core.views.pdfs import Spacer

เวลาใช

lst.append(Spacer(1, 0.2*inch))

จะไดนทางระหวางตวบนกบตวลางมาแลว 1/5 ของ 1 น

Table

วนของ Table นน ไมสามารถตงมาตรฐานไดอยางชดเจน การกำหนดมาตรฐานคราวๆ ของตารางกจะเปน (1) การบงคบความกวางของตารางและ (2) style กจะมการกำหนดขนาดแบบ font, ส ความกวางของตาราง

เทาทจะตองมการทำกระดาษแบบ landscape ดวย แตไวสรปในเวลาตอไป ตอนนเปนมาตรฐานแนวตงไปกอน

  1. ตารางกวางไดงสด 6.8" แนวตง สวนแนวนอนยงไมไดรองรบในขณะน
  2. ตารางมขนาดไดงแต 5.8" - 6.8" เทานน เวนแตจะไดบการยอมรบแล
  3. รวมทงสวนของลายเซนกเชนกน จะตองเปน table กวางไม <= 6.8"
  4. ในกรณในรายงานมหลายตารางในหนาเดยวกน ความกวางของรายงานจะตองมความกวางเทากนทงหมด แมาจะมจำนวน column ไมเทากน หรออยางไรกตามครบ กปรบใหนเทากนซะ

การกำหนดขนาดของ Table

จากเดมทปแบบจะเป

t = Table(data, style=xxxxxxxxx)

จะมวแปรเพมขนมาเป

t = Table(data, 
       colWidths=[0.25*inch, 1.25*inch, 2.0*inch, 1.25*inch, 1.25*inch, 1.0*inch], 
       style=xxxxxxxxx
   )

หรอจะใชเป

t = Table(data, 
          colWidths=[0.25*inch, 1.25*inch, 2.0*inch, 1.25*inch, 1.25*inch, 1.0*inch]
       )
t.setStyle(TableStyle(xxxxxx))

จะสงเกตเหนไดcolWidthsการกำหนดตวเลขชดเจน เปนความกวางของตารางทงหมด (กำหนดดวยบรรทดท column มากทด สวนเรอง SPAN มนจดการใหตรงกบความกวางเองครบ) สงทอธบายไดอ ความกวางของตารางทงหมดคอ 0.25 + 1.25 + 2 + 1.25 + 1.25 + 1 = 7 แสดงวา ตารางนความกวางเกนทกำหนดไว (จรงๆแลวมนคอ กวางเกนสวนของ Paragraph จากซายถงขวาดวย มนจะไมสวยครบ) จะตองแกไขใหได 6.8 หรอนอยกวา เชน 0.25 + 1.25 + 2 + 1.15 + 1.15 + 1 = 6.8 ใหไดเทากบ 6.8

การกำหนด style

วนนจะขนกบตวแปร style_tab

from core.views.pdfs import style_tab

วนการใชงานแทนทจะเขยนลงไปชดเจนในสวนของ fontface, fontsize กจะกลายเป

number_table_style = [
       ('FONTNAME', (0,0), (-1,-1), style_tab['font']),
       ('INNERGRID', (0,0), (-1,-1), 0.5 , style_tab['header_bg']),
       ('FONTSIZE', (0, 0), (-1, -1), 13),
       ('BOTTOMPADDING', (0, 0), (-1, -1), 4),
       ('FONTNAME', (0,0), (8,2), style_tab['header_font']),
       ('ALIGN',(1,4),(-1,-1),'LEFT'),
       ('ALIGN',(2,4),(-1,-1),'RIGHT'),
       ('BACKGROUND',(0,0),(8,2), style_tab['header_bg']),
       ('SPAN',(0,0),(0,2)),
       ('ALIGN',(0,0),(0,2),'CENTER'),
       ('VALIGN',(0,0),(0,2),'MIDDLE'),
       ('SPAN',(1,0),(1,2)),
       ('ALIGN',(1,0),(1,2),'CENTER'),
       ('VALIGN',(1,0),(1,2),'MIDDLE'),
       ('SPAN',(-7,0),(-2,0)),
       ('ALIGN',(-7,0),(-2,0),'CENTER'),
       ('SPAN',(8,0),(8,2)),
       ('ALIGN',(8,0),(8,2),'CENTER'),
       ('VALIGN',(8,0),(8,2),'MIDDLE'),
       ('SPAN',(2,1),(4,1)),
       ('ALIGN',(2,1),(4,1),'CENTER'),
       ('SPAN',(5,1),(7,1)),
       ('ALIGN',(5,1),(7,1),'CENTER'),
       ('SPAN',(0,3),(8,3)),
       ('SPAN',(0,-1,),(1,-1)),
       ('FONTNAME', (0,-2), (8,-1), style_tab['header_font']),
       ('LINEABOVE', (0,0), (-1,-1), 0.5 , style_tab['header_bg']),
       ('LINELEFT', (0,0), (-1,-1), 0.5 , style_tab['header_bg']),
       ('GRID', (0,0), (-1,-1), 0.5 , style_tab['grid_color']),
]

จะสงเกตไดstyle_tab จะไปทดแทนการกำหนดสน, ส border, fontface, fontsize ทงหมดจากเดมทจะใช colors.grey, 'TH Sarabun New' เปนตน สงทสามารถเรยกไดจาก style_tab

  • style_tab['font'] -- คอ font ปกตในตาราง
  • style_tab['header_font'] -- คอ font ตวหนา
  • style_tab['header_bg'] -- คอ สนของหวตาราง (สเทา)
  • style_tab['fontsize'] -- คอ ขนาด font
  • style_tab['grid_color'] -- คอ สของ border ของตาราง