diff --git a/fpdf/template.py b/fpdf/template.py index 772003656..38c2011d7 100644 --- a/fpdf/template.py +++ b/fpdf/template.py @@ -5,6 +5,7 @@ __license__ = "LGPL 3.0" import csv +import locale import warnings from .errors import FPDFException @@ -65,7 +66,7 @@ def load_elements(self, elements): self.elements = elements self.keys = [v["name"].lower() for v in self.elements] - def parse_csv(self, infile, delimiter=",", decimal_sep="."): + def parse_csv(self, infile, delimiter=",", decimal_sep=".", encoding=None): """Parse template format csv file and create elements dict""" keys = ( "name", @@ -88,7 +89,9 @@ def parse_csv(self, infile, delimiter=",", decimal_sep="."): ) self.elements = [] self.pg_no = 0 - with open(infile) as f: + if encoding is None: + encoding = locale.getpreferredencoding() + with open(infile, encoding=encoding) as f: for row in csv.reader(f, delimiter=delimiter): kargs = {} for i, v in enumerate(row): diff --git a/fpdf/util.py b/fpdf/util.py index 02831483e..e48778641 100644 --- a/fpdf/util.py +++ b/fpdf/util.py @@ -15,6 +15,7 @@ def try_to_type(value): pass return value + def substr(s, start, length=-1): if length < 0: length = len(s) - start diff --git a/test/template/test_template.py b/test/template/test_template.py index 96909d2a1..2298e415c 100644 --- a/test/template/test_template.py +++ b/test/template/test_template.py @@ -136,6 +136,11 @@ def test_template_nominal_csv(tmp_path): tmpl.add_page() tmpl.render() assert_pdf_equal(tmpl.pdf, HERE / "template_nominal_csv.pdf", tmp_path) + tmpl = Template(format="A4", title="Sample Invoice") + tmpl.parse_csv(HERE / "mycsvfile.csv", delimiter=";", encoding="utf-8") + tmpl.add_page() + tmpl.render() + assert_pdf_equal(tmpl.pdf, HERE / "template_nominal_csv.pdf", tmp_path) def test_template_code39(tmp_path): # issue-161