1349
1349
(int)floor(x1), (int)floor(y1), (int)ceil(x2), (int)ceil(y2));
1350
1350
if (floor(x1) != ceil(x1) || floor(y1) != ceil(y1) ||
1351
1351
floor(x2) != ceil(x2) || floor(y2) != ceil(y2)) {
1352
writePSFmt("%%HiResBoundingBox: {0:.4g} {1:.4g} {2:.4g} {3:.4g}\n",
1352
writePSFmt("%%HiResBoundingBox: {0:.6g} {1:.6g} {2:.6g} {3:.6g}\n",
1353
1353
x1, y1, x2, y2);
1355
1355
writePS("%%DocumentSuppliedResources: (atend)\n");
1874
1874
font->getWMode());
1877
writePSFmt("/F{0:d}_{1:d} /{2:t} {3:.4g} {4:.4g}\n",
1877
writePSFmt("/F{0:d}_{1:d} /{2:t} {3:.6g} {4:.6g}\n",
1878
1878
font->getID()->num, font->getID()->gen, psName, xs, ys);
1879
1879
for (i = 0; i < 256; i += 8) {
1880
1880
writePS((char *)((i == 0) ? "[ " : " "));
2572
2572
writePS("8 dict begin\n");
2573
2573
writePS("/FontType 3 def\n");
2574
2574
m = font->getFontMatrix();
2575
writePSFmt("/FontMatrix [{0:.4g} {1:.4g} {2:.4g} {3:.4g} {4:.4g} {5:.4g}] def\n",
2575
writePSFmt("/FontMatrix [{0:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g}] def\n",
2576
2576
m[0], m[1], m[2], m[3], m[4], m[5]);
2577
2577
m = font->getFontBBox();
2578
writePSFmt("/FontBBox [{0:.4g} {1:.4g} {2:.4g} {3:.4g}] def\n",
2578
writePSFmt("/FontBBox [{0:.6g} {1:.6g} {2:.6g} {3:.6g}] def\n",
2579
2579
m[0], m[1], m[2], m[3]);
2580
2580
writePS("/Encoding 256 array def\n");
2581
2581
writePS(" 0 1 255 { Encoding exch /.notdef put } for\n");
2607
2607
charProc.free();
2608
2608
if (t3String) {
2609
2609
if (t3Cacheable) {
2610
buf = GooString::format("{0:.4g} {1:.4g} {2:.4g} {3:.4g} {4:.4g} {5:.4g} setcachedevice\n",
2610
buf = GooString::format("{0:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g} setcachedevice\n",
2611
2611
t3WX, t3WY, t3LLX, t3LLY, t3URX, t3URY);
2613
buf = GooString::format("{0:.4g} {1:.4g} setcharwidth\n", t3WX, t3WY);
2613
buf = GooString::format("{0:.6g} {1:.6g} setcharwidth\n", t3WX, t3WY);
2615
2615
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
2931
2931
writePSFmt("/f_{0:d}_{1:d} {{\n", id.num, id.gen);
2932
2932
writePS("q\n");
2933
writePSFmt("[{0:.4gs} {1:.4gs} {2:.4gs} {3:.4gs} {4:.4gs} {5:.4gs}] cm\n",
2933
writePSFmt("[{0:.6gs} {1:.6gs} {2:.6gs} {3:.6gs} {4:.6gs} {5:.6gs}] cm\n",
2934
2934
m[0], m[1], m[2], m[3], m[4], m[5]);
2936
2936
box.x1 = bbox[0];
2976
2976
page->displaySlice(scan, 72, 72, rotateA, useMediaBox, crop,
2977
2977
sliceX, sliceY, sliceW, sliceH,
2978
2978
printing, catalog, abortCheckCbk, abortCheckCbkData);
2979
rasterize = scan->usesTransparency();
2979
rasterize = scan->usesTransparency() || scan->hasLevel1PSBug();
2982
2982
rasterize = gTrue;
3364
3364
tx += rotate == 0 ? imgLLX : imgLLY;
3365
3365
ty += rotate == 0 ? imgLLY : -imgLLX;
3366
3366
if (tx != 0 || ty != 0) {
3367
writePSFmt("{0:.4g} {1:.4g} translate\n", tx, ty);
3367
writePSFmt("{0:.6g} {1:.6g} translate\n", tx, ty);
3369
3369
if (xScale != 1 || yScale != 1) {
3370
writePSFmt("{0:.4f} {1:.4f} scale\n", xScale, yScale);
3370
writePSFmt("{0:.6f} {1:.6f} scale\n", xScale, yScale);
3372
3372
if (clipLLX0 < clipURX0 && clipLLY0 < clipURY0) {
3373
writePSFmt("{0:.4g} {1:.4g} {2:.4g} {3:.4g} re W\n",
3373
writePSFmt("{0:.6g} {1:.6g} {2:.6g} {3:.6g} re W\n",
3374
3374
clipLLX0, clipLLY0, clipURX0 - clipLLX0, clipURY0 - clipLLY0);
3376
3376
writePSFmt("{0:d} {1:d} {2:d} {3:d} re W\n", x1, y1, x2 - x1, y2 - y1);
3449
3449
void PSOutputDev::updateCTM(GfxState *state, double m11, double m12,
3450
3450
double m21, double m22, double m31, double m32) {
3451
writePSFmt("[{0:.4gs} {1:.4gs} {2:.4gs} {3:.4gs} {4:.4gs} {5:.4gs}] cm\n",
3451
writePSFmt("[{0:.6gs} {1:.6gs} {2:.6gs} {3:.6gs} {4:.6gs} {5:.6gs}] cm\n",
3452
3452
m11, m12, m21, m22, m31, m32);
3460
3460
state->getLineDash(&dash, &length, &start);
3462
3462
for (i = 0; i < length; ++i) {
3463
writePSFmt("{0:.4g}{1:w}",
3463
writePSFmt("{0:.6g}{1:w}",
3464
3464
dash[i] < 0 ? 0 : dash[i],
3465
3465
(i == length-1) ? 0 : 1);
3467
writePSFmt("] {0:.4g} d\n", start);
3467
writePSFmt("] {0:.6g} d\n", start);
3470
3470
void PSOutputDev::updateFlatness(GfxState *state) {
3482
3482
void PSOutputDev::updateMiterLimit(GfxState *state) {
3483
writePSFmt("{0:.4g} M\n", state->getMiterLimit());
3483
writePSFmt("{0:.6g} M\n", state->getMiterLimit());
3486
3486
void PSOutputDev::updateLineWidth(GfxState *state) {
3487
writePSFmt("{0:.4g} w\n", state->getLineWidth());
3487
writePSFmt("{0:.6g} w\n", state->getLineWidth());
3490
3490
void PSOutputDev::updateFillColorSpace(GfxState *state) {
3721
3721
void PSOutputDev::updateFont(GfxState *state) {
3722
3722
if (state->getFont()) {
3723
writePSFmt("/F{0:d}_{1:d} {2:.4g} Tf\n",
3723
writePSFmt("/F{0:d}_{1:d} {2:.6g} Tf\n",
3724
3724
state->getFont()->getID()->num, state->getFont()->getID()->gen,
3725
3725
fabs(state->getFontSize()) < 0.00001 ? 0.00001
3726
3726
: state->getFontSize());
3733
3733
mat = state->getTextMat();
3734
3734
if (fabs(mat[0] * mat[3] - mat[1] * mat[2]) < 0.00001) {
3735
3735
// avoid a singular (or close-to-singular) matrix
3736
writePSFmt("[0.00001 0 0 0.00001 {0:.4g} {1:.4g}] Tm\n", mat[4], mat[5]);
3736
writePSFmt("[0.00001 0 0 0.00001 {0:.6g} {1:.6g}] Tm\n", mat[4], mat[5]);
3738
writePSFmt("[{0:.4g} {1:.4g} {2:.4g} {3:.4g} {4:.4g} {5:.4g}] Tm\n",
3738
writePSFmt("[{0:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g}] Tm\n",
3739
3739
mat[0], mat[1], mat[2], mat[3], mat[4], mat[5]);
3743
3743
void PSOutputDev::updateCharSpace(GfxState *state) {
3744
writePSFmt("{0:.4g} Tc\n", state->getCharSpace());
3744
writePSFmt("{0:.6g} Tc\n", state->getCharSpace());
3747
3747
void PSOutputDev::updateRender(GfxState *state) {
3758
3758
void PSOutputDev::updateRise(GfxState *state) {
3759
writePSFmt("{0:.4g} Ts\n", state->getRise());
3759
writePSFmt("{0:.6g} Ts\n", state->getRise());
3762
3762
void PSOutputDev::updateWordSpace(GfxState *state) {
3763
writePSFmt("{0:.4g} Tw\n", state->getWordSpace());
3763
writePSFmt("{0:.6g} Tw\n", state->getWordSpace());
3766
3766
void PSOutputDev::updateHorizScaling(GfxState *state) {
3770
3770
if (fabs(h) < 0.01) {
3773
writePSFmt("{0:.4g} Tz\n", h);
3773
writePSFmt("{0:.6g} Tz\n", h);
3776
3776
void PSOutputDev::updateTextPos(GfxState *state) {
3777
writePSFmt("{0:.4g} {1:.4g} Td\n", state->getLineX(), state->getLineY());
3777
writePSFmt("{0:.6g} {1:.6g} Td\n", state->getLineX(), state->getLineY());
3780
3780
void PSOutputDev::updateTextShift(GfxState *state, double shift) {
3781
3781
if (state->getFont()->getWMode()) {
3782
writePSFmt("{0:.4g} TJmV\n", shift);
3782
writePSFmt("{0:.6g} TJmV\n", shift);
3784
writePSFmt("{0:.4g} TJm\n", shift);
3784
writePSFmt("{0:.6g} TJm\n", shift);
3818
3818
writePS("8 dict begin\n");
3819
3819
writePS("/FontType 3 def\n");
3820
3820
writePS("/FontMatrix [1 0 0 1 0 0] def\n");
3821
writePSFmt("/FontBBox [{0:.4g} {1:.4g} {2:.4g} {3:.4g}] def\n",
3821
writePSFmt("/FontBBox [{0:.6g} {1:.6g} {2:.6g} {3:.6g}] def\n",
3822
3822
bbox[0], bbox[1], bbox[2], bbox[3]);
3823
3823
writePS("/Encoding 256 array def\n");
3824
3824
writePS(" 0 1 255 { Encoding exch /.notdef put } for\n");
3841
3841
gfx = new Gfx(xref, this, resDict, m_catalog, &box, NULL);
3842
3842
writePS("/x {\n");
3843
3843
if (paintType == 2) {
3844
writePSFmt("{0:.4g} 0 {1:.4g} {2:.4g} {3:.4g} {4:.4g} setcachedevice\n",
3844
writePSFmt("{0:.6g} 0 {1:.6g} {2:.6g} {3:.6g} {4:.6g} setcachedevice\n",
3845
3845
xStep, bbox[0], bbox[1], bbox[2], bbox[3]);
3848
3848
if (x1 - 1 <= x0) {
3849
3849
writePS("1 0 setcharwidth\n");
3851
writePSFmt("{0:.4g} 0 setcharwidth\n", xStep);
3851
writePSFmt("{0:.6g} 0 setcharwidth\n", xStep);
3854
3854
inType3Char = gTrue;
3865
3865
// draw the tiles
3866
3866
writePSFmt("/xpdfTile{0:d} findfont setfont\n", numTilingPatterns);
3867
writePSFmt("gsave [{0:.4g} {1:.4g} {2:.4g} {3:.4g} {4:.4g} {5:.4g}] concat\n",
3867
writePSFmt("gsave [{0:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g}] concat\n",
3868
3868
mat[0], mat[1], mat[2], mat[3], mat[4], mat[5]);
3869
writePSFmt("{0:d} 1 {1:d} {{ {2:.4g} exch {3:.4g} mul m {4:d} 1 {5:d} {{ pop (x) show }} for }} for\n",
3869
writePSFmt("{0:d} 1 {1:d} {{ {2:.6g} exch {3:.6g} mul m {4:d} 1 {5:d} {{ pop (x) show }} for }} for\n",
3870
3870
y0, y1 - 1, x0 * xStep, yStep, x0, x1 - 1);
3871
3871
writePS("grestore\n");
3889
3889
shading->getDomain(&x0, &y0, &x1, &y1);
3890
3890
mat = shading->getMatrix();
3891
writePSFmt("/mat [{0:.4g} {1:.4g} {2:.4g} {3:.4g} {4:.4g} {5:.4g}] def\n",
3891
writePSFmt("/mat [{0:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g}] def\n",
3892
3892
mat[0], mat[1], mat[2], mat[3], mat[4], mat[5]);
3893
3893
writePSFmt("/n {0:d} def\n", shading->getColorSpace()->getNComps());
3894
3894
if (shading->getNFuncs() == 1) {
3910
3910
writePS("} def\n");
3912
writePSFmt("{0:.4g} {1:.4g} {2:.4g} {3:.4g} 0 funcSH\n", x0, y0, x1, y1);
3912
writePSFmt("{0:.6g} {1:.6g} {2:.6g} {3:.6g} 0 funcSH\n", x0, y0, x1, y1);
3971
3971
t1 = shading->getDomain1();
3973
3973
// generate the PS code
3974
writePSFmt("/t0 {0:.4g} def\n", t0);
3975
writePSFmt("/t1 {0:.4g} def\n", t1);
3976
writePSFmt("/dt {0:.4g} def\n", t1 - t0);
3977
writePSFmt("/x0 {0:.4g} def\n", x0);
3978
writePSFmt("/y0 {0:.4g} def\n", y0);
3979
writePSFmt("/dx {0:.4g} def\n", x1 - x0);
3980
writePSFmt("/x1 {0:.4g} def\n", x1);
3981
writePSFmt("/y1 {0:.4g} def\n", y1);
3982
writePSFmt("/dy {0:.4g} def\n", y1 - y0);
3983
writePSFmt("/xMin {0:.4g} def\n", xMin);
3984
writePSFmt("/yMin {0:.4g} def\n", yMin);
3985
writePSFmt("/xMax {0:.4g} def\n", xMax);
3986
writePSFmt("/yMax {0:.4g} def\n", yMax);
3974
writePSFmt("/t0 {0:.6g} def\n", t0);
3975
writePSFmt("/t1 {0:.6g} def\n", t1);
3976
writePSFmt("/dt {0:.6g} def\n", t1 - t0);
3977
writePSFmt("/x0 {0:.6g} def\n", x0);
3978
writePSFmt("/y0 {0:.6g} def\n", y0);
3979
writePSFmt("/dx {0:.6g} def\n", x1 - x0);
3980
writePSFmt("/x1 {0:.6g} def\n", x1);
3981
writePSFmt("/y1 {0:.6g} def\n", y1);
3982
writePSFmt("/dy {0:.6g} def\n", y1 - y0);
3983
writePSFmt("/xMin {0:.6g} def\n", xMin);
3984
writePSFmt("/yMin {0:.6g} def\n", yMin);
3985
writePSFmt("/xMax {0:.6g} def\n", xMax);
3986
writePSFmt("/yMax {0:.6g} def\n", yMax);
3987
3987
writePSFmt("/n {0:d} def\n", shading->getColorSpace()->getNComps());
3988
3988
if (shading->getNFuncs() == 1) {
3989
3989
writePS("/func ");
4123
4123
// generate the PS code
4124
writePSFmt("/x0 {0:.4g} def\n", x0);
4125
writePSFmt("/x1 {0:.4g} def\n", x1);
4126
writePSFmt("/dx {0:.4g} def\n", x1 - x0);
4127
writePSFmt("/y0 {0:.4g} def\n", y0);
4128
writePSFmt("/y1 {0:.4g} def\n", y1);
4129
writePSFmt("/dy {0:.4g} def\n", y1 - y0);
4130
writePSFmt("/r0 {0:.4g} def\n", r0);
4131
writePSFmt("/r1 {0:.4g} def\n", r1);
4132
writePSFmt("/dr {0:.4g} def\n", r1 - r0);
4133
writePSFmt("/t0 {0:.4g} def\n", t0);
4134
writePSFmt("/t1 {0:.4g} def\n", t1);
4135
writePSFmt("/dt {0:.4g} def\n", t1 - t0);
4124
writePSFmt("/x0 {0:.6g} def\n", x0);
4125
writePSFmt("/x1 {0:.6g} def\n", x1);
4126
writePSFmt("/dx {0:.6g} def\n", x1 - x0);
4127
writePSFmt("/y0 {0:.6g} def\n", y0);
4128
writePSFmt("/y1 {0:.6g} def\n", y1);
4129
writePSFmt("/dy {0:.6g} def\n", y1 - y0);
4130
writePSFmt("/r0 {0:.6g} def\n", r0);
4131
writePSFmt("/r1 {0:.6g} def\n", r1);
4132
writePSFmt("/dr {0:.6g} def\n", r1 - r0);
4133
writePSFmt("/t0 {0:.6g} def\n", t0);
4134
writePSFmt("/t1 {0:.6g} def\n", t1);
4135
writePSFmt("/dt {0:.6g} def\n", t1 - t0);
4136
4136
writePSFmt("/n {0:d} def\n", shading->getColorSpace()->getNComps());
4137
4137
writePSFmt("/encl {0:s} def\n", enclosed ? "true" : "false");
4138
writePSFmt("/a1 {0:.4g} def\n", a1);
4139
writePSFmt("/a2 {0:.4g} def\n", a2);
4138
writePSFmt("/a1 {0:.6g} def\n", a1);
4139
writePSFmt("/a2 {0:.6g} def\n", a2);
4140
4140
if (shading->getNFuncs() == 1) {
4141
4141
writePS("/func ");
4142
4142
cvtFunction(shading->getFunc(0));
4176
4176
if (level == psLevel2Sep || level == psLevel3Sep) {
4177
writePSFmt("{0:.4g} radialCol aload pop k\n", ta);
4177
writePSFmt("{0:.6g} radialCol aload pop k\n", ta);
4179
writePSFmt("{0:.4g} radialCol sc\n", ta);
4179
writePSFmt("{0:.6g} radialCol sc\n", ta);
4181
writePSFmt("{0:.4g} {1:.4g} {2:.4g} 0 360 arc h f*\n", xa, ya, ra);
4181
writePSFmt("{0:.6g} {1:.6g} {2:.6g} 0 360 arc h f*\n", xa, ya, ra);
4184
4184
// extend the larger circle
4198
4198
if (level == psLevel2Sep || level == psLevel3Sep) {
4199
writePSFmt("{0:.4g} radialCol aload pop k\n", ta);
4199
writePSFmt("{0:.6g} radialCol aload pop k\n", ta);
4201
writePSFmt("{0:.4g} radialCol sc\n", ta);
4201
writePSFmt("{0:.6g} radialCol sc\n", ta);
4203
writePSFmt("{0:.4g} {1:.4g} {2:.4g} 0 360 arc h\n", xa, ya, ra);
4204
writePSFmt("{0:.4g} {1:.4g} m {2:.4g} {3:.4g} l {4:.4g} {5:.4g} l {6:.4g} {7:.4g} l h f*\n",
4203
writePSFmt("{0:.6g} {1:.6g} {2:.6g} 0 360 arc h\n", xa, ya, ra);
4204
writePSFmt("{0:.6g} {1:.6g} m {2:.6g} {3:.6g} l {4:.6g} {5:.6g} l {6:.6g} {7:.6g} l h f*\n",
4205
4205
xMin, yMin, xMin, yMax, xMax, yMax, xMax, yMin);
4245
4245
x3 = subpath->getX(3);
4246
4246
y3 = subpath->getY(3);
4247
4247
if (x0 == x1 && x2 == x3 && y0 == y3 && y1 == y2) {
4248
writePSFmt("{0:.4g} {1:.4g} {2:.4g} {3:.4g} re\n",
4248
writePSFmt("{0:.6g} {1:.6g} {2:.6g} {3:.6g} re\n",
4249
4249
x0 < x2 ? x0 : x2, y0 < y1 ? y0 : y1,
4250
4250
fabs(x2 - x0), fabs(y1 - y0));
4252
4252
} else if (x0 == x3 && x1 == x2 && y0 == y1 && y2 == y3) {
4253
writePSFmt("{0:.4g} {1:.4g} {2:.4g} {3:.4g} re\n",
4253
writePSFmt("{0:.6g} {1:.6g} {2:.6g} {3:.6g} re\n",
4254
4254
x0 < x1 ? x0 : x1, y0 < y2 ? y0 : y2,
4255
4255
fabs(x1 - x0), fabs(y2 - y0));
4261
4261
for (i = 0; i < n; ++i) {
4262
4262
subpath = path->getSubpath(i);
4263
4263
m = subpath->getNumPoints();
4264
writePSFmt("{0:.4g} {1:.4g} m\n", subpath->getX(0), subpath->getY(0));
4264
writePSFmt("{0:.6g} {1:.6g} m\n", subpath->getX(0), subpath->getY(0));
4266
4266
while (j < m) {
4267
4267
if (subpath->getCurve(j)) {
4268
writePSFmt("{0:.4g} {1:.4g} {2:.4g} {3:.4g} {4:.4g} {5:.4g} c\n",
4268
writePSFmt("{0:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g} c\n",
4269
4269
subpath->getX(j), subpath->getY(j),
4270
4270
subpath->getX(j+1), subpath->getY(j+1),
4271
4271
subpath->getX(j+2), subpath->getY(j+2));
4274
writePSFmt("{0:.4g} {1:.4g} l\n", subpath->getX(j), subpath->getY(j));
4274
writePSFmt("{0:.6g} {1:.6g} l\n", subpath->getX(j), subpath->getY(j));
4386
4386
writePSString(s2);
4387
4387
if (font->isCIDFont()) {
4389
writePSFmt(" {0:d} {1:.4g} Tj16V\n", nChars, dy);
4389
writePSFmt(" {0:d} {1:.6g} Tj16V\n", nChars, dy);
4391
writePSFmt(" {0:d} {1:.4g} Tj16\n", nChars, dx);
4391
writePSFmt(" {0:d} {1:.6g} Tj16\n", nChars, dx);
4394
writePSFmt(" {0:.4g} Tj\n", dx);
4394
writePSFmt(" {0:.6g} Tj\n", dx);
4417
4417
if (state->getFillColorSpace()->getMode() != csPattern) {
4418
4418
double cxMin, cyMin, cxMax, cyMax;
4419
4419
state->getClipBBox(&cxMin, &cyMin, &cxMax, &cyMax);
4420
writePSFmt("{0:.4g} {1:.4g} {2:.4g} {3:.4g} re\n",
4420
writePSFmt("{0:.6g} {1:.6g} {2:.6g} {3:.6g} re\n",
4423
4423
writePS("f*\n");
4865
4865
// make each rectangle path and clip.
4866
4866
writePS("gsave newpath\n");
4867
4867
for (i = 0; i < rectsOutLen; ++i) {
4868
writePSFmt("{0:.4g} {1:.4g} {2:.4g} {3:.4g} re\n",
4868
writePSFmt("{0:.6g} {1:.6g} {2:.6g} {3:.6g} re\n",
4869
4869
((double)rectsOut[i].x0)/maskWidth,
4870
4870
((double)rectsOut[i].y0)/maskHeight,
4871
4871
((double)(rectsOut[i].x1 - rectsOut[i].x0))/maskWidth,
5047
5047
// make each rectangle path and clip.
5048
5048
writePS("gsave newpath\n");
5049
5049
for (i = 0; i < rectsOutLen; ++i) {
5050
writePSFmt("{0:.4g} {1:.4g} {2:.4g} {3:.4g} re\n",
5050
writePSFmt("{0:.6g} {1:.6g} {2:.6g} {3:.6g} re\n",
5051
5051
((double)rectsOut[i].x0)/width,
5052
5052
((double)rectsOut[i].y0)/height,
5053
5053
((double)(rectsOut[i].x1 - rectsOut[i].x0))/width,
6231
6231
opiTransform(state, ulx, uly, &tulx, &tuly);
6232
6232
opiTransform(state, urx, ury, &turx, &tury);
6233
6233
opiTransform(state, lrx, lry, &tlrx, &tlry);
6234
writePSFmt("%ALDImagePosition: {0:.4g} {1:.4g} {2:.4g} {3:.4g} {4:.4g} {5:.4g} {6:.4g} {7:.4g}\n",
6234
writePSFmt("%ALDImagePosition: {0:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g} {6:.6g} {7:.6g}\n",
6235
6235
tllx, tlly, tulx, tuly, turx, tury, tlrx, tlry);
6335
6335
#endif // OPI_SUPPORT
6337
6337
void PSOutputDev::type3D0(GfxState *state, double wx, double wy) {
6338
writePSFmt("{0:.4g} {1:.4g} setcharwidth\n", wx, wy);
6338
writePSFmt("{0:.6g} {1:.6g} setcharwidth\n", wx, wy);
6339
6339
writePS("q\n");
6340
6340
t3NeedsRestore = gTrue;
6401
6401
writePSFmt("/xpdfSamples{0:d} [\n", thisFunc);
6402
6402
for (i = 0; i < nSamples; ++i) {
6403
writePSFmt("{0:.4g}\n", func0->getSamples()[i]);
6403
writePSFmt("{0:.6g}\n", func0->getSamples()[i]);
6405
6405
writePS("] def\n");
6406
6406
writePSFmt("{{ {0:d} array {1:d} array {2:d} 2 roll\n", 2*m, m, m+2);
6407
6407
// [e01] [efrac] x0 x1 ... xm-1
6408
6408
for (i = m-1; i >= 0; --i) {
6409
6409
// [e01] [efrac] x0 x1 ... xi
6410
writePSFmt("{0:.4g} sub {1:.4g} mul {2:.4g} add\n",
6410
writePSFmt("{0:.6g} sub {1:.6g} mul {2:.6g} add\n",
6411
6411
func0->getDomainMin(i),
6412
6412
(func0->getEncodeMax(i) - func0->getEncodeMin(i)) /
6413
6413
(func0->getDomainMax(i) - func0->getDomainMin(i)),
6457
6457
// [e01] [efrac] s'(0) s'(1) ... s(2^(m-j-1)-1)
6459
6459
// [e01] [efrac] y(0) ... y(i-1) s
6460
writePSFmt("{0:.4g} mul {1:.4g} add\n",
6460
writePSFmt("{0:.6g} mul {1:.6g} add\n",
6461
6461
func0->getDecodeMax(i) - func0->getDecodeMin(i),
6462
6462
func0->getDecodeMin(i));
6463
writePSFmt("dup {0:.4g} lt {{ pop {1:.4g} }} {{ dup {2:.4g} gt {{ pop {3:.4g} }} if }} ifelse\n",
6463
writePSFmt("dup {0:.6g} lt {{ pop {1:.6g} }} {{ dup {2:.6g} gt {{ pop {3:.6g} }} if }} ifelse\n",
6464
6464
func0->getRangeMin(i), func0->getRangeMin(i),
6465
6465
func0->getRangeMax(i), func0->getRangeMax(i));
6466
6466
// [e01] [efrac] y(0) ... y(i-1) y(i)
6472
6472
case 2: // exponential
6473
6473
func2 = (ExponentialFunction *)func;
6474
6474
n = func2->getOutputSize();
6475
writePSFmt("{{ dup {0:.4g} lt {{ pop {1:.4g} }} {{ dup {2:.4g} gt {{ pop {3:.4g} }} if }} ifelse\n",
6475
writePSFmt("{{ dup {0:.6g} lt {{ pop {1:.6g} }} {{ dup {2:.6g} gt {{ pop {3:.6g} }} if }} ifelse\n",
6476
6476
func2->getDomainMin(0), func2->getDomainMin(0),
6477
6477
func2->getDomainMax(0), func2->getDomainMax(0));
6479
6479
for (i = 0; i < n; ++i) {
6480
6480
// x y(0) .. y(i-1)
6481
writePSFmt("{0:d} index {1:.4g} exp {2:.4g} mul {3:.4g} add\n",
6481
writePSFmt("{0:d} index {1:.6g} exp {2:.6g} mul {3:.6g} add\n",
6482
6482
i, func2->getE(), func2->getC1()[i] - func2->getC0()[i],
6483
6483
func2->getC0()[i]);
6484
6484
if (func2->getHasRange()) {
6485
writePSFmt("dup {0:.4g} lt {{ pop {1:.4g} }} {{ dup {2:.4g} gt {{ pop {3:.4g} }} if }} ifelse\n",
6485
writePSFmt("dup {0:.6g} lt {{ pop {1:.6g} }} {{ dup {2:.6g} gt {{ pop {3:.6g} }} if }} ifelse\n",
6486
6486
func2->getRangeMin(i), func2->getRangeMin(i),
6487
6487
func2->getRangeMax(i), func2->getRangeMax(i));
6498
6498
cvtFunction(func3->getFunc(i));
6499
6499
writePSFmt("/xpdfFunc{0:d}_{1:d} exch def\n", thisFunc, i);
6501
writePSFmt("{{ dup {0:.4g} lt {{ pop {1:.4g} }} {{ dup {2:.4g} gt {{ pop {3:.4g} }} if }} ifelse\n",
6501
writePSFmt("{{ dup {0:.6g} lt {{ pop {1:.6g} }} {{ dup {2:.6g} gt {{ pop {3:.6g} }} if }} ifelse\n",
6502
6502
func3->getDomainMin(0), func3->getDomainMin(0),
6503
6503
func3->getDomainMax(0), func3->getDomainMax(0));
6504
6504
for (i = 0; i < func3->getNumFuncs() - 1; ++i) {
6505
writePSFmt("dup {0:.4g} lt {{ {1:.4g} sub {2:.4g} mul {3:.4g} add xpdfFunc{4:d}_{5:d} }} {{\n",
6505
writePSFmt("dup {0:.6g} lt {{ {1:.6g} sub {2:.6g} mul {3:.6g} add xpdfFunc{4:d}_{5:d} }} {{\n",
6506
6506
func3->getBounds()[i+1],
6507
6507
func3->getBounds()[i],
6508
6508
func3->getScale()[i],
6509
6509
func3->getEncode()[2*i],
6512
writePSFmt("{0:.4g} sub {1:.4g} mul {2:.4g} add xpdfFunc{3:d}_{4:d}\n",
6512
writePSFmt("{0:.6g} sub {1:.6g} mul {2:.6g} add xpdfFunc{3:d}_{4:d}\n",
6513
6513
func3->getBounds()[i],
6514
6514
func3->getScale()[i],
6515
6515
func3->getEncode()[2*i],