<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body style='font-size: 10pt; font-family: Verdana,Geneva,sans-serif'>
<p>Howdy team Poppler,</p>
<p>I've been on a decades-long quest for the best way to get cool output onto my 1985 HP 7585B pen plotter. There are dozens of tools for generating HPGL from various formats around the Internet, and they all stink. This tool is the HPGL conversion tool to end all HPGL conversion tools -- a motto that rolls off the tongue!</p>
<p>I'd greatly appreciate it if someone on the team could <strong>guide me through getting these changes into Poppler</strong>. Below i give a brief description of the changes, quick-start instructions to try it out, and specific requests for feedback and guidance.</p>
<p>Thank you!</p>
<p><br /></p>
<p><span style="text-decoration: underline;">What's in the tin</span></p>
<p>Please find my branch here:</p>
<p><a href="https://github.com/jonhnet/plotler">https://github.com/jonhnet/plotler</a></p>
<p>It consists of:</p>
<p>* A first commit that refactors SplashOutputDev to put a part of its functionality into a weaker superclass VectorOutputDev. This is to prepare for code sharing without "subclass-by-deletion". This commit also exposes a couple of methods in SplashPath as public.  It also moves some supporting code that used to be in SplashOutputDev into a pair of new files VectorFonts and VectorDynamicPatters; just an overdue cleanup. (4dec008eddea2329c0e8277398803cb9022b15cc)</p>
<p>* Then the rest of plotler as new files: A new StrokeOutputDev that inherits from VectorOutputDev to capture stroke and drawChar commands and flatten them down to simple strokes. A new utils/plotler.cc CLI that invokes it. It relies on:</p>
<p>- Plot, PlotClip, and PlotEmit for manipulating pen paths.</p>
<p>- HersheyFont, HersheyDirectory, and HersheyUnicodeSubstitutions for manipulating Hershey fonts.</p>
<p><br /></p>
<p><span style="text-decoration: underline;">Try it out</span></p>
<p># standard poppler build<br />git clone <a href="https://github.com/jonhnet/plotler">https://github.com/jonhnet/plotler</a><br />mkdir poppler-install<br />cd plotler<br />mkdir build; cd build;<br />INSTALLDIR=`(cd ../../poppler-install; pwd)`<br />cmake .. -DCMAKE_INSTALL_PREFIX=$INSTALLDIR -DCMAKE_BUILD_TYPE=debugfull<br />make -j4<br />make install</p>
<p># and now try plotler<br />./utils/plotler -i ../test/plotler/brake-diagram.pdf -o proof.svg && eog proof.svg<br />./utils/plotler -i ../test/plotler/verikv-osdi2020-final.pdf -n 9 -o proof2.svg && eog proof2.svg</p>
<p><br /></p>
<p><span style="text-decoration: underline;">Feedback requested</span></p>
<p>- Community code standards. Guidance welcome.</p>
<p>- I have written zero tests. Guidance on meeting appropriate standards would be helpful.</p>
<p>- My commit includes a bunch of PDF test files I used to guide development. Should these be removed or included in the proposed change?</p>
<p>- Utility name. Plotler maybe is too clever? I considered "pdftohpgl", but the thing can already emit SVG, and I could imagine growth to support more formats.</p>
<p><br /></p>
<p><span style="text-decoration: underline;">Background</span></p>
<p>After finding other tools wanting, I wrote my own Python SVG->HPGL extension a decade ago. It sucked, because it required me to interpret so much of SVG. Then I thought, hey, I<em>nkscape</em> knows how to interpret SVG! So I hacked a converter into inkscape 0.42 -- and it served me well for years, long after modern distros couldn't build that version of Inkscape. But it wasn't super flexible, and there was no reasonable way to share it. A couple years ago I thought, maybe it's time to try again with a general vector graphics engine designed for library access, so I sat down with Ghostscript. I aged three years that weekend.</p>
<p>It finally struck me that I should find a <em>modern</em> vector graphics toolkit. And if I start with PDF, I'm basically building a printer driver. Poppler was the perfect fit -- nicely organized & modularized code, and already set up to build a set of conversion utilities, so plotler fits right in.</p>
<p>I think it would be fun to write a CUPS backend based on Plotler, so I can just click "Print" in any application and have it pop out on a pen plotter.</p>

</body></html>