当变量包含utf8字符时,无法使用PDF重用和模板工具包生成pdf

时间:2014-06-26 12:47:01

标签: perl pdf utf-8

我被困在这里太久了。

我正在使用PDF::ReuseTemplate::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

任何人都可以帮助我。如果有什么不清楚请告诉我。

提前致谢

1 个答案:

答案 0 :(得分:1)

您可能需要解码从数据库中读取的数据。如果您阅读了DBD的文档(我不知道您正在使用哪个数据库),那么可能有一个选项可以在获取任何文本字段时自动解码。