我被困在这里太久了。
我正在使用PDF::Reuse
和Template::Toolkit
生成PDF发票。现在问题在于此;当我检索包含utf8字符的DB记录(使用DBIx)时,PDF被破坏。以下是生成PDF的代码:
sub create_pdf {
my ( $self, $pdf_template, $vars ) = @_;
my $path = $ENV{NEW_DIR} . '/OTTCatalyst/root/templates/pdf/';
my $tt = Template->new({
INCLUDE_PATH => $path,
PLUGIN_BASE => 'OTT::Template::Plugin',
PRE_CHOMP => 3,
POST_CHOMP => 3,
LOAD_PERL => 1,
});
my $template = read_file( $path.$pdf_template, binmode => ':utf8' );
my ( $output, $stdout, $stderr );
{
local $CWD = $path;
capture { $tt->process( \$template, $vars, \$output, binmode => ':utf8') } \$stdout, \$stderr;
}
throw_fatal 'There is an error with the template: '.$tt->error if not $stdout;
return $stdout;
}
$vars
是包含DBIx行对象的变量,该对象包含其中包含UTF8字符的数据。
更确切地说,包含utf8字符的变量是:
$vars->{invoice}->customer->addr1
如果我只是按原样显示addr1,PDF将被破坏。如果我把它包起来:
encode_utf8($vars->{invoice}->customer->addr1);
它会显示:III Å ̈ 1/1, 2nd floor
应该显示的是:III Ũ 1/1, 2nd floor
任何人都可以帮助我。如果有什么不清楚请告诉我。
提前致谢
答案 0 :(得分:1)
您可能需要解码从数据库中读取的数据。如果您阅读了DBD的文档(我不知道您正在使用哪个数据库),那么可能有一个选项可以在获取任何文本字段时自动解码。