Okay, to reiterate your opening "that's weird" remark,
let me add "and this is weirder":), as follows...
(1) So I first downloaded all your files, one-by-one using wget,
and ran pdfcrop croptest.pdf jftest.pdf against your original
pdf, just as a check. But this time, voila, it worked as
you advertised. So maybe you think it has something to do with
my original pdf versus yours??? Nope, read on...
(2) As I'm writing this, I'm working on a different box, this one
running slackware 14.2 linux, whereas the tests I ran yesterday,
while posting preceding followup, were on a box running 14.1.
That earlier box didn't have pdfcrop at all, so I got it from
sourceforge,
https://sourceforge.net/projects/pdfcrop/files/
clicking the "latest version Download pdfcrop_v0.4b.tar.gz (18.8 kB)"
link. And **that's** what produced (and still does) the problem.
This current box, running slackware 14.2, has PDFCROP 1.5, 2004/06/24
according to its --help. The downloaded one doesn't show version/date
with its --help, but its source file perl script says
PDFCrop version 0.4b Copyright 2011. So a later date by seven years,
but earlier version. And the 0.4b version continues to produce
the original bad result I reported, even when run on this box.
(3) Try it...I dare you:). Download that sourceforge version, which
they're advertising as "latest", and run that against your original
croptest.pdf. I've got $20 USD that says you'll now reproduce my
originally-reported bad result. So do I win??? I think maybe
sourceforge needs to be updated. Or something.
Anyway, now using pdftoppm -mono, rather than convert, seems to work
okay, except it produces a compressed P4 file, and I have to run that
through convert anyway to get a P1 file. Not seeing a pdftoppm -switch
for that. Only other diff is that (both run against exactly the same pdf)
convert produces a default 16x7 file, whereas pdftoppm's is 34x15.
Not sure where they're getting their respective default resolutions from,
though they're both -switch-settable. In any case, it seems to be
pretty much "six of one, half-a-dozen of the other", with respect to
the "which is better?" question. I'll certainly program it both ways
(and likely any third way that's suggested), with one or the other
as default, with an optional user override at runtime. It's trivial to
set up the corresponding commandstrings and system() calls,
and I certainly want to have all different possibilities documented
in the code. Thanks again,