#!/usr/bin/perl # # Sometimes it is handy to print an a4 sheet of labels through a regular # printer, rather than using a dedicated label printer. This script kind of # makes it possible. # # Add something like this line to /etc/mat.conf first: # print_command "mv /usr/local/mat/label.png /usr/local/mat/label-`date +%s`.png" use strict; use warnings; use GD; use constant DPI => 300; sub mm2dots { my ( $mm ) = @_; return ($mm/2.54/10*DPI); } my $a4 = new GD::Image(210/2.54/10*DPI, 297/2.54/10*DPI); my $white = $a4->colorAllocate(255,255,255); my $black = $a4->colorAllocate(0,0,0); $a4->fill(0, 0, $white); sub draw_rulers() { # Draw a cross $a4->line(0, 0, $a4->width(), $a4->height, $black); $a4->line($a4->width(), 0, 0, $a4->height, $black); for ( my $i = 1; $i < 297; $i++) { if ( $i % 10 == 0 ) { $a4->line(0, mm2dots($i), 20, mm2dots($i), $black); $a4->line(mm2dots(105), mm2dots($i), mm2dots(105) + 20, mm2dots($i), $black); } elsif ( $i % 5 == 0 ) { $a4->line(0, mm2dots($i), 15, mm2dots($i), $black); $a4->line(mm2dots(105), mm2dots($i), mm2dots(105) + 15, mm2dots($i), $black); } else { $a4->line(0, mm2dots($i), 10, mm2dots($i), $black); $a4->line(mm2dots(105), mm2dots($i), mm2dots(105) + 10, mm2dots($i), $black); } } for ( my $i = 1; $i < 210; $i++) { if ( $i % 10 == 0 ) { $a4->line(mm2dots($i), mm2dots(297), mm2dots($i), mm2dots(297) - 20, $black); $a4->line(mm2dots($i), mm2dots(149), mm2dots($i), mm2dots(149) - 20, $black); } elsif ( $i % 5 == 0 ) { $a4->line(mm2dots($i), mm2dots(297), mm2dots($i), mm2dots(297) - 15, $black); $a4->line(mm2dots($i), mm2dots(149), mm2dots($i), mm2dots(149) - 15, $black); } else { $a4->line(mm2dots($i), mm2dots(297), mm2dots($i), mm2dots(297) - 10, $black); $a4->line(mm2dots($i), mm2dots(149), mm2dots($i), mm2dots(149) - 10, $black); } } } my $skip = 0; my $x = mm2dots(25); my $y = mm2dots(32) + $skip * mm2dots(25); for my $filename ( `ls label-??????????.png` ) { my $label = GD::Image->newFromPng($filename); $a4->copy($label, $x, $y, 0, 0, $label->width(), $label->height()); $y += mm2dots(25); } open(PNGFILE, ">a4.png"); print PNGFILE $a4->png; my $density = DPI * 1/2.54; system("convert -density $density -define pdf:fit-page=A4 a4.png a4.pdf");