7

ReportLab2.2でPythonを使用してPDFレポートを作成しようとしています。ユーザーガイド
に よると、

特別なTableStyleIndeces[原文のまま]

どのスタイルコマンドでも、最初の行のインデックスを特別な文字列「splitlast」または「splitfirst」のいずれかに設定して、スタイルを分割テーブルの最後の行または継続の最初の行にのみ使用する必要があることを示すことができます。これにより、分割の周りにより良い効果を持つテーブルを分割できます。

次のようないくつかのスタイル要素を使用してみました。

('TEXTCOLOR', (0, 'splitfirst'), (1, 'splitfirst'), colors.black) 
('TEXTCOLOR', (0, 'splitfirst'), (1, 0), colors.black) 
('TEXTCOLOR', (0, 'splitfirst'), (1, -1), colors.black) 

そして、これらのどれもうまくいかないようです。1つ目は、次のメッセージを含むTypeErrorを生成します。

TypeError: cannot concatenate 'str' and 'int' objects

後者の2つは、次のメッセージとともにTypeErrorsを生成します。

TypeError: an integer is required

この機能は単に壊れているのですか、それとも私は何か間違ったことをしていますか?後者の場合、私は何を間違っていますか?

4

3 に答える 3

3

そうですね、自分の質問に答えているように見えます。

まず、ドキュメンテーションは、「任意のスタイルコマンドで、最初の行インデックスを特別な文字列 'splitlast' または 'splitfirst' のいずれかに設定して、スタイルを最後の行にのみ使用する必要があることを示すことができます。分割テーブル、または継続の最初の行。」現在のリリースでは、"splitlast" と "splitfirst" の行インデックスは、前述の TEXTCOLOR と Background コマンドの TypeError で壊れます。

ソース コードを読んだ結果、現在、tablestyle 行コマンド (GRID、BOX、LINEABOVE、および LINEBELOW) のみが「splitfirst」および「splitlast」行インデックスと互換性があるのではないかと考えています。すべてのセル コマンドが、前述の TypeErrors で壊れると思われます。

しかし、Table クラスをサブクラス化し、onSplit メソッドをオーバーライドすることで、やりたいことができました。これが私のコードです:

class XTable(Table):
    def onSplit(self, T, byRow=1):
        T.setStyle(TableStyle([
          ('TEXTCOLOR', (0, 1), (1, 1), colors.black)]))

これにより、各ページの 2 行目の 1 番目と 2 番目のセルに黒のテキスト カラーが適用されます。(最初の行はヘッダーで、Table の repeatRows パラメーターによって繰り返されます。) より正確には、これを各フレームの 1 番目と 2 番目のセルに対して行っていますが、SimpleDocTemplate を使用しているため、フレームとページは同一です。

于 2008-09-18T17:46:36.087 に答える
1

これは、ReportLabTableクラスのバグのようです。DLJessup自身の回答に加えて、これに対する別の修正は、1301行目あたりのエラーの原因となっているReportLabコードを変更することですTable._drawBkgrnd()。「splitlast」の場合は、次のように変更します。

y0 = rowpositions[sr]

に:

if sr == 'splitlast':
    y0 = rowpositions[-2] # last value is 0.  Second last is the one we want.
else:
   y0 = rowpositions[sr]

これは、Tableをサブクラス化し、このメソッドを上書きすることで、ReportLabをハッキングすることなく、独自のコードで簡単に実行できます。'splitfirst'を使用する必要はありませんでした。もしそうなら、残りのハックをここに投稿します。

于 2010-04-12T16:52:07.013 に答える
0

[...]どのスタイルコマンドでも、最初の行インデックスは特別な文字列の1つに設定できます[...]

最初の例では、2 番目の行インデックスも特別な文字列に設定しています。

他の2つが機能しない理由がわからない...これが例外の原因だと確信していますか?

于 2008-09-17T00:40:54.080 に答える