for (int i=0; i<6; i++) {
if (i)
s += " ";
- char buf[16];
- snprintf(buf, sizeof(buf), "%.3f", m[i]);
- s += buf;
+ s += pdf_coord(m[i], 6);
}
return s;
}
string BBox::to_rect()
{
- char buf[64];
- snprintf(buf, sizeof(buf), "%.1f %.1f %.1f %.1f", x_min, y_min, width(), height());
- return string(buf);
+ return
+ pdf_coord(x_min) + " " +
+ pdf_coord(y_min) + " " +
+ pdf_coord(width()) + " " +
+ pdf_coord(height());
}
bool BBox::parse(QPDFObjectHandle h)
swap(y_min, y_max);
}
+BBox BBox::transformed(pdf_matrix &m)
+{
+ BBox b = *this;
+ b.transform(m);
+ return b;
+}
+
void BBox::join(BBox &with)
{
x_min = min(x_min, with.x_min);
xo_stream.replaceStreamData(ph, QPDFObjectHandle::newNull(), QPDFObjectHandle::newNull());
return xo_stream;
}
+
+/*** Formatting of coordinates ***/
+
+string pdf_coord(double x, uint digits)
+{
+ char buf[16];
+ snprintf(buf, sizeof(buf), "%.*f", digits, x);
+ int n = strlen(buf);
+ while (n > 0 && buf[n-1] == '0')
+ buf[--n] = 0;
+ if (n > 0 && buf[n-1] == '.')
+ buf[--n] = 0;
+ return buf;
+}