From e1ab6c14ef3fbf39b68392d963c56da3e5e272f4 Mon Sep 17 00:00:00 2001 From: Adam Goldsmith Date: Sun, 10 Jun 2018 23:13:29 -0400 Subject: [PATCH] Initial Commit, kind of works! --- HPGLWrap.py | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100755 HPGLWrap.py diff --git a/HPGLWrap.py b/HPGLWrap.py new file mode 100755 index 0000000..f0da2e9 --- /dev/null +++ b/HPGLWrap.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python3 + +import os +import sys + +def write_pen_values(values, char): + return "!v64" + char + "".join(["{:04d}".format(value) for value in values]) + +def pre_content(filename, power=50, speed=50, rate=2500): + jobName = os.path.basename(filename)[:80] + # Start + outString = "@PJL JOB NAME={}\r\n".format(jobName) + outString += "E@PJL ENTER LANGUAGE=PCL\r\n%-12345X" + + # Reset + outString += "E" + + # Unit + outString += "&u254D" + + # Cursor + outString += "*p100X" + outString += "*p100Y" + + # Set filename + outString += "!m{:d}N".format(len(jobName)) + jobName + + # Set raster power+velocity. Only affects raster. Shows in display before start + outString += "!r{:d}I".format(speed * 10) + outString += "!r{:d}P".format(power * 10); + + # Select first (and only) pen (commented out in original source) + # outString += "!v1D" + # outString += "!m2A" # might cause autofocus? + + # Use same value for all 16 pens + # doesn't seem to affect vector settings + outString += write_pen_values([speed * 10] * 16, 'V') # Velocity, 1000=100% + outString += write_pen_values([power * 10] * 16, 'V') # Power, 1000=100% + outString += write_pen_values([rate] * 16, 'V') # PPI + outString += "%1B" + + return outString + +def post_content(): + outString = "%1A" # Leave HPGL vector mode + outString += "E" # Reset + outString += "%-12345X@PJL EOJ \r\n" # End + return outString + +def main(infile, outfile, power=50, speed=50, rate=100): + with open(infile, 'r') as f: + data = f.read() + with open(outfile, 'w') as f: + f.write(pre_content(outfile, int(power), int(speed), int(rate))) + f.write(data) + f.write(post_content()) + +if __name__ == '__main__': + print(sys.argv) + main(*sys.argv[1:])