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.

175 lines
14 KiB

---
layout: post
type: handbook
title: "PDF Styling"
date: 2013-12-19
tags: coding
---
จะม style คราวๆ ใหไดดการปรบแตงกนเอง (โดยเฉพาะตำแหนงการวาง ชดซาย กลาง ชดขวา) ใน core.views.pdfs ซงจรงๆแลวกจะแบงมาตรฐานเปน 2 สวน ค
* `Paragraph` -- กำหนดดวย `ParagraphStyle`
* `Table` -- กำหนด style ดวย `style_tab` (แตองใสเองทงหมด)
## Paragraph
ในสวนนจะเปนการกำหนด style คราวๆ เพอใหเปนแนวทางหลกในการใชงานทงหมด โดยมงหมดดงน
1. `style_base` - อนนเอาไวเปน parent style เฉยๆครบ เพราะมกำหนดแคปแบบตวอกษรเปน TH Sarabun
1. `style_h1` - ขนาด font 18 ตวหนา พรอมม space บนลางตามเหมาะสม
1. `style_h1c` - อนน`h1` แตง align เปน center คร
1. `style_h2` - ขนาด font 16 ตวหนา พรอมม space บนลางตามเหมาะสม
1. `style_h2c` - อนน`h2` แตง align เปน center คร
1. `style_h3` - ขนาด font 14 ตวหนา พรอมม space บนลางตามเหมาะสม
1. `style_h3c` - อนน`h2` แตง align เปน center คร
1. `style_normal` - ขนาด font 14 ไม space บนลาง ไมอหน
1. `style_normal_indent` - เหมอน `style_normal` แตอหนาของบรรทดแรกเขาไป 4 space คร
1. `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`นนจะคอ จะใหอหนาเทาไหรสำหรบบรรทดแรก แลวบรรทดอนกจะกลบมาชดซายสดเหมอนเด
1. `leftIndent` จะเปนการเลอนตำแหนงขอบซายทงยอหนา เหมอนอารมณใชบ list ทเปนขอๆ มนจะไมนไปซายสดขอบกระดาษ แตเปนการกำหนดวา เลอนขอบซายท`Paragraph`
1. หนวยของคาทใชสำหรบ 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" แนวตง สวนแนวนอนยงไมไดรองรบในขณะน
1. ตารางมขนาดไดงแต 5.8" - 6.8" เทานน เวนแตจะไดบการยอมรบแล
1. รวมทงสวนของลายเซนกเชนกน จะตองเปน table กวางไม <= 6.8"
1. ในกรณในรายงานมหลายตารางในหนาเดยวกน ความกวางของรายงานจะตองมความกวางเทากนทงหมด แมาจะมจำนวน 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 ของตาราง