Python fpdf2:属性错误

问题描述 投票:0回答:1

我有一个“Tkinter 回调中的异常”,它似乎是从我导入的包中产生的,而不是从我自己的代码中产生的。怎么解决呢? 想要将 tkinter 中的数据转换为 PDF 格式进行打印,我在 Windows 11 Home 23H2 上运行 Python 3.11.3 中的 fpdf2。 有问题的代码行是我直接从 https://py-pdf.github.io/fpdf2/Tables.html.

的文档中复制的代码行
with pdf.table() as table:

这是该行的完整回溯。

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\Paul\AppData\Local\Programs\Python\Python311\Lib\tkinter\__init__.py", line 1948, in __call__
    return self.func(*args)
           ^^^^^^^^^^^^^^^^
  File "C:\Users\Paul\Dropbox\Work\ProgrammingProjects\cellar\main.py", line 1453, in cellar_to_pdf
    with pdf.table() as table:
  File "C:\Users\Paul\AppData\Local\Programs\Python\Python311\Lib\contextlib.py", line 144, in __exit__
    next(self.gen)
  File "C:\Users\Paul\AppData\Local\Programs\Python\Python311\Lib\site-packages\fpdf\fpdf.py", line 5005, in table
    table.render()
  File "C:\Users\Paul\AppData\Local\Programs\Python\Python311\Lib\site-packages\fpdf\table.py", line 215, in render
    row_info = list(self._process_rowpans_entries())
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Paul\AppData\Local\Programs\Python\Python311\Lib\site-packages\fpdf\table.py", line 590, in _process_rowpans_entries
    _, img_height, text_height = self._render_table_cell(
                                 ^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Paul\AppData\Local\Programs\Python\Python311\Lib\site-packages\fpdf\table.py", line 496, in _render_table_cell
    page_break_text, cell_height = self._fpdf.multi_cell(
                                   ^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Paul\AppData\Local\Programs\Python\Python311\Lib\site-packages\fpdf\fpdf.py", line 226, in wrapper
    return fn(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Paul\AppData\Local\Programs\Python\Python311\Lib\site-packages\fpdf\deprecation.py", line 32, in wrapper
    return fn(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Paul\AppData\Local\Programs\Python\Python311\Lib\site-packages\fpdf\fpdf.py", line 3652, in multi_cell
    text = self.normalize_text(text)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Paul\AppData\Local\Programs\Python\Python311\Lib\site-packages\fpdf\fpdf.py", line 4361, in normalize_text
    return text.encode(self.core_fonts_encoding).decode("latin-1")
           ^^^^^^^^^^^
AttributeError: 'numpy.int64' object has no attribute 'encode'

我看不出我哪里出了问题。一些解释回溯的帮助将不胜感激。

我通过谷歌搜索“AttributeError:'numpy.int64'对象没有属性'encode'”没有得到相关结果。

接下来是一个最小的、可重现的代码示例。

from fpdf import FPDF
table_data = (
    ('Producer', 'Series/Line', 'Wine Name', 'Grape(s)', 'Year', 'Age', 'On Hand'),
    ('IT CN/331', '', 'Barolo Legato', 'Nebbiolo', '2015', '8y, 11m, 16d', 1, '1 left of 1 stocked'),
    ('John Galt', '', 'Cabernet Sauvignon', 'Cabernet Sauvignon', '2016', '7y, 11m, 16d', 1, '1 left of 1 stocked'),
    ('Santos Lima', '', 'Confidencial Reserva', 'Red Blend', '2017', '6y, 11m, 16d', 3, '3 left of 4 stocked'),
)
pdf = FPDF(unit="in", format="Letter")
pdf.add_page()
pdf.set_margins(left=0.75, top=0.75, right=0.75)
pdf.set_font("helvetica", size=10)
with pdf.table() as table:
    for tupl in table_data:
        row = table.row()
        for value in tupl:
            row.cell(value)
pdf.output("C:\\Users\\Paul\\Dropbox\\Work\\ProgrammingProjects\\cellar\\x.pdf")

在 Jupyter Notebook 中,这会产生略有不同的错误。

AttributeError: 'int' object has no attribute 'encode'

更新 在提交错误报告后,我了解到问题根本不是错误。 FPDF.table() 仅接受字符串。问题是我的第七列包含整数。

python tkinter attributeerror fpdf2
1个回答
0
投票

作为参考,这个问题也发布在

fpdf2
GitHub 存储库中: https://github.com/py-pdf/fpdf2/issues/1270

此错误的原因很简单,您将数字作为值传递给

Row.cell()
。 解决方案是先将值转换为字符串,然后再将其传递给
Row.cell()
row.cell(str(value))

© www.soinside.com 2019 - 2024. All rights reserved.