update for new inkscape --actions
[Printer-EVOLIS.git] / scripts / rsvg-render.pl
1 #!/usr/bin/perl
2
3 use warnings;
4 use strict;
5 use autodie;
6
7 use XML::Twig;
8 use Data::Dump qw(dump);
9 use utf8;
10
11 die "unsage: $0 card/template.svg 201008159999 login Ime Prezime\n" unless @ARGV;
12
13 my ($card_svg,$nr,$login,$ime,$prezime) = @ARGV;
14
15 my $png = $ENV{PNG} || 0;
16
17 warn "# svg: $card_svg nr: $nr ime: $ime prezime: $prezime\n";
18
19 my $mapping = {
20 '200908109999' => $nr,
21 'login0123456789@ffzg.hr' => $login,
22 'Knjižničarko' => $ime,
23 'Čitalić' => $prezime,
24 };
25
26 mkdir 'out' unless -d 'out';
27 my $out = 'out/' . $nr;
28
29 foreach my $existing ( glob $out . '*' ) {
30         warn "# remove $existing ", -s $existing, " bytes\n";
31         unlink $existing;
32 }
33
34 my $twig = XML::Twig->new(
35         twig_handlers => {
36                 'tspan' => sub {
37                         my $el = $_;
38                         my $text = $el->text;
39                         utf8::decode( $text );
40                         warn "# tspan ", dump($text);
41                         if ( my $replace = $mapping->{ $text } ) {
42                                 warn "# replace ", $text, " => $replace\n";
43 #                               utf8::decode( $replace );
44                                 $el->set_text( $replace );
45                         }
46                 },
47         },
48         pretty_print => 'indented',                
49 );
50 $twig->parsefile( $card_svg );
51
52 foreach my $layer ( qw( front back ) ) {
53
54         foreach my $el ( $twig->get_xpath(q{g[@inkscape:groupmode="layer"]}) ) {
55                 if ( $el->{att}->{'inkscape:label'} eq $layer ) {
56                         $el->set_att( 'style' => 'display:inline' );
57                 } else {
58                         $el->set_att( 'style' => 'display:none' );
59                 }
60
61         }
62
63         my $base = "$out.$layer";
64
65         my $rsvg_convert = "rsvg-convert --width=1016 --height=648";
66         if ( $png ) {
67                 $rsvg_convert  .= " --output $base.png";
68         } else {
69                 $rsvg_convert .= " | pngtopnm -alpha | pnminvert > $base.pnm";
70         }
71         $rsvg_convert = "tee /tmp/test.svg | $rsvg_convert";
72
73         open(my $rsvg, '|-', $rsvg_convert);
74         $twig->print( $rsvg );
75         close($rsvg);
76
77         my $path =(glob("$base*"))[0];
78         warn "# $path ", -s $path, " bytes\n";
79
80 }
81