TDF Badge printer with webinterface
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdf-badger/print_badge.php

91 lines
3.2 KiB

1 year ago
<?php
if (extension_loaded('gd') && function_exists('gd_info')) {
if (isset($_GET['name'])) {
$NAME = $_GET['name'];
$PRONOUNS= $_GET['pronouns'];
$NAME_FONT_SIZE = 62;
$PRONOUN_FONT_SIZE=20;
$print_dev = '/dev/usb/lp0';
$debug = false;
$badge = imagecreatefrompng('TDF/Badge.png');
$written_badge_path = "uploads/badge";
$written_badge_ext = ".png";
$badge_width = imagesx($badge);
$badge_height= imagesy($badge);
$margin_name_left = 126;
$margin_name_top = 94;
$margin_pron_left = 284;
$margin_pron_top = 246;
$name_field_width = 330;
$name_field_height= 98;
$pron_field_width = 172;
$pron_field_height= 32;
$font_color = imagecolorexact($badge, 0, 0, 0);
putenv('GDFONTPATH=' . realpath('.'));
$font_path = "ComicCodeMedium.otf";
$font = imageloadfont($font_path);
# adjust font size s.t. the entire name fits into the name box
$namebox = imagettfbbox($NAME_FONT_SIZE, 0, $font_path, $NAME);
while (($namebox[2] - $namebox[0]) > $name_field_width) {
$NAME_FONT_SIZE = $NAME_FONT_SIZE - 1;
$namebox = imagettfbbox($NAME_FONT_SIZE, 0, $font_path, $NAME);
}
# center the name text box
$namebox_h = $namebox[1] - $namebox[7]; # y of down left edge - y of up left edge
$namebox_y = $margin_name_top + ($name_field_height/2) + ($namebox_h/2);
imagefttext($badge, $NAME_FONT_SIZE, 0, $margin_name_left, $namebox_y, $font_color, $font_path, $NAME);
# adjust font size for the pronouns
$pronbox = imagettfbbox($PRONOUN_FONT_SIZE, 0, $font_path, $PRONOUNS);
while (($pronbox[2] - $pronbox[0]) > $pron_field_width) {
$PRONOUN_FONT_SIZE = $PRONOUN_FONT_SIZE - 1;
$pronbox = imagettfbbox($PRONOUN_FONT_SIZE, 0, $font_path, $PRONOUNS);
}
# center the pronoun text box
$pronbox_h = $pronbox[1] - $pronbox[7];
$pronbox_y = $margin_pron_top + ($pron_field_height/2) + ($pronbox_h/2);
imagefttext($badge, $PRONOUN_FONT_SIZE, 0, $margin_pron_left, $pronbox_y, $font_color, $font_path, $PRONOUNS);
# display image
//header('Content-Type: image/png');
imagefilter($badge, IMG_FILTER_GRAYSCALE);
if(imagepng($badge, $written_badge_path.$written_badge_ext)) {
imagedestroy($badge);
# convert and print image
$printable_file = $written_badge_path."_".$written_badge_ext;
$cmd_convert = "convert ".$written_badge_path.$written_badge_ext." -background white -alpha remove -compose copy_opacity -resize x720 -monochrome ".$printable_file;
#$cmd_convert = "convert uploads/badge.png -background white -alpha remove -compose copy_opacity -resize x720 -monochrome uploads/badge_.png";
#$cmd_print = "./ql570 /dev/usb/lp0 w uploads/badge_.png";
$cmd_print = "./ql570 ".$print_dev." w ".$printable_file;
$output_convert = shell_exec($cmd_convert);
$output_print = shell_exec($cmd_print);
} else {
echo "Badge could not be created";
}
} else {
echo "No name has been set";
}
}
else {
echo "GD library is not installed";
}
if($debug == false) {
header('Location: http://'.$_SERVER['HTTP_HOST']);
}
?>
<!DOCTYPE html>
<html>
<head>
<title>TDF Badges</title>
</head>
<body>
<center>
<img src='uploads/badge_.png'></img>
</body>
</html>