2012-12-19 11 views
8

jestem definiowania tego stylu w dokumencie:Co decyduje o pionowej przestrzeni w tabelach Reportlab?

styles.add(ParagraphStyle(name='Table Header', font ='Helvetica-Bold',fontSize=16, alignment=TA_CENTER)) 

Używam tego zdefiniować tekst na akapity, aby przejść do górnego rzędu każdym stole (tak, aby owinąć poprawnie):

L2sub = [(Paragraph(L[0][0], styles['Table Header']))] 

Później, kiedy dodać tabelę, tam również miejsce do definiowania stylów:

report.append(Table(data,style=[ 
       ('GRID',(0,0),(len(topiclist)-1,-1),0.5,colors.grey), 
       ('FONT', (0,0),(len(topiclist)-1,0),'Helvetica-Bold',16), 
       ('FONT', (0,1),(len(topiclist)-1,1),'Helvetica-Bold',12), 
       ('ALIGN',(0,0),(-1,-1),'CENTER'), 
       ('VALIGN',(0,0),(-1,-1),'MIDDLE'), 
       ('SPAN',(0,0),(len(topiclist)-1,0)), 
       ])) 

Moje pytanie brzmi: gdzie jest settin g, który określa wysokość pionową komórek w pierwszym rzędzie? Mam problem z zbyt dużym rozmiarem tekstu dla komórki i/lub ustawieniem go zbyt nisko w komórce, ale nie mogę określić, co go powoduje i co zrobić, aby to naprawić. Zmieniłem oba rozmiary, ale nie mogę sprawić, by komórki były niczym innym, jak całą tą samą wysokością. Kiedy po prostu wstawiłem tekst do komórek zamiast akapitów, tabela zadziałała ładnie, ale akapity spowodowały problem.

+0

Rozumiem, że jeśli nie używasz akapitów i umieszczasz tekst bezpośrednio w komórkach tabeli, zawijanie może się odbywać automatycznie. Paragrafy, mając własną logikę owijania, potrzebują stałej przestrzeni do działania. Dlaczego więc używasz paragrafów ", aby prawidłowo je zawijać"? –

+0

To nie było moje doświadczenie: Miałem tabele przekraczające granice strony, ponieważ nie były one pakowane, dopóki nie umieściłem tekstu w akapitach. Mam pomysł z innego pytania SO. – DeltaG

Odpowiedz

5

Nie wierzę, aby w ustawieniu TableStyle było ustawienie wysokości wiersza. Że pomiar jest podana podczas tworzenia nowego Table obiektu:

Table(data, colwidths, rowheights) 

Gdzie colwidths i rowheights są wykazy wartości pomiarowych, tak:

from reportlab.lib.units import inch 
from reportlab.lib.styles import getSampleStyleSheet 
from reportlab.platypus import Paragraph 
from reportlab.platypus import Table 
from reportlab.lib import colors 

# Creates a table with 2 columns, variable width 
colwidths = [2.5*inch, .8*inch] 

# Two rows with variable height 
rowheights = [.4*inch, .2*inch] 

table_style = [ 
    ('GRID', (0, 1), (-1, -1), 1, colors.black), 
    ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), 
    ('ALIGN', (1, 1), (1, -1), 'RIGHT') 
] 

style = getSampleStyleSheet() 

title_paragraph = Paragraph(
    "<font size=13><b>My Title Here</b></font>", 
    style["Normal"] 
) 
# Just filling in the first row 
data = [[title_paragraph, 'Random text string']] 

# Now we can create the table with our data, and column/row measurements 
table = Table(data, colwidths, rowheights) 

# Another way of setting table style, using the setStyle method. 
table.setStyle(tbl_style) 

report.append(table) 

colwidths i rowheights może być zmienione na jakimkolwiek pomiarze musisz dopasować zawartość. colwidths czyta od lewej do prawej, a rowheights czyta od góry do dołu.

Jeśli wiesz, że wszystkie wiersze tabeli będą taką samą wysokość, można użyć tego piękny skrót:

rowheights = [.2*inch] * len(data) 

co daje listę jak [.2*inch, .2*inch, ...] dla każdego wiersza w zmiennej data.