#!/bin/bash

# barcodesheet.sh
# Bash-Script zur automatisierten Erstellung und Aufbereitung von Barcodes fuer die Elektrogeraetepruefung
# Die Labels passen am Ende auf ein Etikettensheet der FA Herma mit 44 Etiketten pro DinA4 Ausdruck. Produkt: No. 4572, 48,3x25,4mm, 880Etiketten
# https://www.herma.de/buero-zuhause/produkt/wetterfeste-folien-etiketten-abloesbar-a4-483x254-mm-4572/
# das Script liest 7 stellige Codenummern aus codenummern.txt aus, die Datei muss ein ganzzahliges Vielfaches von 44 Zeilen haben. 'wc -l codenummern.txt'
#
# Autor: Sascha Sprengard, sascha@spreng-ard.de
# Februar 2025

# Abhaengigkeiten installieren:
# 'sudo apt-get install barcode imagemagick'
# Script ausfuehren mit: 'sh barcodesheet.sh'
# oder ausfuehrbar machen + ausfuehren mit
# 'chmod +x benningbar.sh && ./barcodesheet.sh'

# --------------------------------------------------------------------------------------------------------------------------------------------------------

# Fuer die Anpassung an andere Sheets, vorher die Spacer sowie die Border an den Positionen DEBUG auf Farbe umstellen, dann Testausdruck und Werte aendern

# --------------------------------------------------------------------------------------------------------------------------------------------------------

# Ein DinA4 Ausdruck in 300dpi hat 2481x3508 Pixel
# 					-- 61 -- 550+55 -- 550+55 -- 550+55 -- 550+55 --
# 					|					       |
#					54					       |
#					|					       |
#					240					       |
#					+74					       |
#					|					       |
#					... +10*(240+74)			     ...
#					------------------------------------------------
#

# codenummern.txt mit einem Einzeiler erstellen:
# eine Seite 1121000 - 1121043
# for i in {0..43}; do printf "11260%02d\n" "$i"; done > codenummern.txt



# codenummern.txt enthaelt ein ganzzahlig Vielfaches von 44?
num=$(wc -l codenummern.txt | cut -d ' ' -f1)
if [[ $num =~ ^[0-9]+$ ]] && (( num % 44 == 0 )); then

# erstellt einen transparenten horizontalen spacer
# DEBUG #convert -size 55x240 xc:green spacerh.png
convert -size 55x240 xc:none spacerh.png

# erstellt einen transparenten vertikalen spacer
# DEBUG #convert -size 605x74 xc:blue spacerv.png
convert -size 605x74 xc:none spacerv.png

i=0
while read p; do
  i=$((i + 1))
  echo "$i":"$p"
  echo $p | barcode -e code128b -E -o barcode.ps
  gs -dNOPAUSE -sDEVICE=pngalpha -r300 -sOutputFile=barcode.png barcode.ps -q -dBATCH
  rm barcode.ps
  # einzlenes Label im Abmass 550x240 erstellen
  convert barcode.png -colorspace RGB -trim +repage -bordercolor none -border 10x10 barcode_trimmed_with_border.png
  convert barcode_trimmed_with_border.png -colorspace RGB -resize 530x240\! -bordercolor none -border 10x0 label.png
  # erstelle einzelne spalte
  convert label.png spacerh.png +append single_column$i.png
done <codenummern.txt

# erstelle volle spalte
convert single_column1.png spacerv.png\
        single_column2.png spacerv.png\
        single_column3.png spacerv.png\
        single_column4.png spacerv.png\
        single_column5.png spacerv.png\
        single_column6.png spacerv.png\
        single_column7.png spacerv.png\
        single_column8.png spacerv.png\
        single_column9.png spacerv.png\
        single_column10.png spacerv.png\
        single_column11.png spacerv.png\
        -append full_column1.png

convert single_column12.png spacerv.png\
        single_column13.png spacerv.png\
        single_column14.png spacerv.png\
        single_column15.png spacerv.png\
        single_column16.png spacerv.png\
        single_column17.png spacerv.png\
        single_column18.png spacerv.png\
        single_column19.png spacerv.png\
        single_column20.png spacerv.png\
        single_column21.png spacerv.png\
        single_column22.png spacerv.png\
        -append full_column2.png

convert single_column23.png spacerv.png\
        single_column24.png spacerv.png\
        single_column25.png spacerv.png\
        single_column26.png spacerv.png\
        single_column27.png spacerv.png\
        single_column28.png spacerv.png\
        single_column29.png spacerv.png\
        single_column30.png spacerv.png\
        single_column31.png spacerv.png\
        single_column32.png spacerv.png\
        single_column33.png spacerv.png\
        -append full_column3.png

convert single_column34.png spacerv.png\
        single_column35.png spacerv.png\
        single_column36.png spacerv.png\
        single_column37.png spacerv.png\
        single_column38.png spacerv.png\
        single_column39.png spacerv.png\
        single_column40.png spacerv.png\
        single_column41.png spacerv.png\
        single_column42.png spacerv.png\
        single_column43.png spacerv.png\
        single_column44.png spacerv.png\
        -append full_column4.png

# vier spalten nebeneinander setzen
montage full_column1.png full_column2.png full_column3.png full_column4.png -tile 4x1 -geometry +0+0 full_pattern.png

# weisser Rand links (erster Wert) und oben (zweiter Wert) anfuegen
# DEBUG #convert full_pattern.png -background yellow -splice 61x54 temp_output.png
convert full_pattern.png -background none -splice 61x54 temp_output.png

# pdf erstellen
convert temp_output.png labels.pdf

rm *.png

else
    echo "Bitte die Datei codenummer.txt mit einem Vielfachen von 44 Zeilen fuellen!, aktuell "$num" Zeilen"
fi



