Subversion Repositories Scribus

Rev

Rev 5993 | Rev 6169 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4430 cbradney 1
/*
2
For general Scribus (>=1.3.2) copyright and licensing information please refer
3
to the COPYING file provided with the program. Following this notice may exist
4
a copyright and/or license notice that predates the release of Scribus 1.3.2
5
for which a new license (GPL+exception) is in place.
6
*/
3136 fschmid 7
/***************************************************************************
8
                          pslib.cpp  -  description
9
                             -------------------
10
    begin                : Sat May 26 2001
11
    copyright            : (C) 2001 by Franz Schmid
12
    email                : Franz.Schmid@altmuehlnet.de
13
 ***************************************************************************/
14
 
15
/***************************************************************************
16
 *                                                                         *
17
 *   This program is free software; you can redistribute it and/or modify  *
18
 *   it under the terms of the GNU General Public License as published by  *
19
 *   the Free Software Foundation; either version 2 of the License, or     *
20
 *   (at your option) any later version.                                   *
21
 *                                                                         *
22
 ***************************************************************************/
4037 cbradney 23
 
24
#include "pslib.h"
25
#include "pslib.moc"
26
 
3136 fschmid 27
#include <qfileinfo.h>
28
#include <qtextstream.h>
29
#include <qimage.h>
30
#include <qcolor.h>
31
#include <qcstring.h>
32
#include <qfontinfo.h>
33
#include <cstdlib>
34
#include <qregexp.h>
35
 
4037 cbradney 36
#include "commonstrings.h"
3136 fschmid 37
#include "scconfig.h"
38
#include "pluginapi.h"
3939 cbradney 39
#include "prefsmanager.h"
3136 fschmid 40
#include "scribusdoc.h"
4037 cbradney 41
#include "scribus.h"
5243 cbradney 42
#include "scribuscore.h"
3136 fschmid 43
#include "scfonts.h"
3934 cbradney 44
#include "selection.h"
3136 fschmid 45
#include <cmath>
46
#include "util.h"
4037 cbradney 47
#include "multiprogressdialog.h"
48
#include "scribusapp.h"
3136 fschmid 49
 
5184 avox 50
#include "text/nlsconfig.h"
51
 
5387 avox 52
PSLib::PSLib(bool psart, SCFonts &AllFonts, QMap<QString, QMap<uint, FPointArray> > DocFonts, ColorList DocColors, bool pdf, bool spot)
3136 fschmid 53
{
5243 cbradney 54
        usingGUI=ScCore->usingGUI();
4044 cbradney 55
        abortExport=false;
3136 fschmid 56
        QString tmp, tmp2, tmp3, tmp4, CHset;
57
        QStringList wt;
58
        Seiten = 0;
59
        User = "";
60
        Creator = "Scribus" + QString(VERSION);
61
        Titel = "";
62
        FillColor = "0.0 0.0 0.0 0.0";
63
        StrokeColor = "0.0 0.0 0.0 0.0";
64
        Header = psart ? "%!PS-Adobe-3.0\n" : "%!PS-Adobe-3.0 EPSF-3.0\n";
65
        BBox = "";
66
        BBoxH = "";
67
        Art = psart;
68
        isPDF = pdf;
69
        UsedFonts.clear();
70
        Fonts = "";
71
        FontDesc = "";
72
        GraySc = false;
73
        DoSep = false;
4046 fschmid 74
        abortExport = false;
3136 fschmid 75
        useSpotColors = spot;
76
#ifdef HAVE_LIBZ
77
        CompAvail = true;
78
#else
79
        CompAvail = false;
80
#endif
81
        GrayCalc =  "/setcmykcolor {exch 0.11 mul add exch 0.59 mul add exch 0.3 mul add\n";
82
        GrayCalc += "               dup 1 gt {pop 1} if 1 exch sub oldsetgray} bind def\n";
83
        GrayCalc += "/setrgbcolor {0.11 mul exch 0.59 mul add exch 0.3 mul add\n";
84
        GrayCalc += "              oldsetgray} bind def\n";
85
        Farben = "%%CMYKCustomColor: ";
86
        FNamen = "%%DocumentCustomColors: ";
87
        ColorList::Iterator itf;
88
        int c, m, y, k;
89
        bool erst = true;
90
        colorsToUse = DocColors;
91
        spotMap.clear();
92
        colorDesc = "";
93
        for (itf = DocColors.begin(); itf != DocColors.end(); ++itf)
94
        {
95
                if (((DocColors[itf.key()].isSpotColor()) || (DocColors[itf.key()].isRegistrationColor())) && (useSpotColors))
96
                {
97
                        DocColors[itf.key()].getCMYK(&c, &m, &y, &k);
98
                        colorDesc += "/Spot"+PSEncode(itf.key())+" { [ /Separation (";
99
                        if (DocColors[itf.key()].isRegistrationColor())
100
                                colorDesc += "All";
101
                        else
102
                                colorDesc += itf.key();
103
                        colorDesc += ")\n";
104
                        colorDesc += "/DeviceCMYK\n{\ndup "+ToStr(static_cast<double>(c) / 255)+"\nmul exch dup ";
105
                        colorDesc += ToStr(static_cast<double>(m) / 255)+"\nmul exch dup ";
106
                        colorDesc += ToStr(static_cast<double>(y) / 255)+"\nmul exch ";
107
                        colorDesc += ToStr(static_cast<double>(k) / 255)+" mul }] setcolorspace setcolor} bind def\n";
108
                        spotMap.insert(itf.key(), "Spot"+PSEncode(itf.key()));
109
                }
110
                if ((itf.key() != "Cyan") && (itf.key() != "Magenta") && (itf.key() != "Yellow") && (itf.key() != "Black") && DocColors[itf.key()].isSpotColor())
111
                {
112
                        DocColors[itf.key()].getCMYK(&c, &m, &y, &k);
113
                        if (!erst)
114
                        {
115
                                Farben += "%%+ ";
116
                                FNamen += "%%+ ";
117
                        }
118
                        Farben += ToStr(static_cast<double>(c) / 255) + " " + ToStr(static_cast<double>(m) / 255) + " ";
119
                        Farben += ToStr(static_cast<double>(y) / 255) + " " + ToStr(static_cast<double>(k) / 255) + " (" + itf.key() + ")\n";
120
                        FNamen += "(" + itf.key() + ")\n";
121
                        erst = false;
122
                }
123
        }
5387 avox 124
        QMap<QString, QMap<uint, FPointArray> >::Iterator it;
3136 fschmid 125
        int a = 0;
126
        for (it = DocFonts.begin(); it != DocFonts.end(); ++it)
127
        {
128
/* Subset all TTF Fonts until the bug in the TTF-Embedding Code is fixed */
5980 avox 129
                ScFace::FontType type = AllFonts[it.key()].type();
3136 fschmid 130
 
5980 avox 131
                if ((type == ScFace::TTF) || (AllFonts[it.key()].isOTF()) || (AllFonts[it.key()].subset()))
3136 fschmid 132
                {
5387 avox 133
                        QMap<uint, FPointArray>& RealGlyphs(it.data());
5980 avox 134
                        FontDesc += "/"+AllFonts[it.key()].psName().simplifyWhiteSpace().replace( QRegExp("[\\s\\/\\{\\[\\]\\}\\<\\>\\(\\)\\%]"), "_" )+
5387 avox 135
                                        " "+IToStr(RealGlyphs.count()+1)+" dict def\n";
5980 avox 136
                        FontDesc += AllFonts[it.key()].psName().simplifyWhiteSpace().replace( QRegExp("[\\s\\/\\{\\[\\]\\}\\<\\>\\(\\)\\%]"), "_" )+" begin\n";
3136 fschmid 137
                        QMap<uint,FPointArray>::Iterator ig;
5390 avox 138
                        for (ig = RealGlyphs.begin(); ig != RealGlyphs.end(); ++ig)
3136 fschmid 139
                        {
140
                                FontDesc += "/G"+IToStr(ig.key())+" { newpath\n";
141
                                FPoint np, np1, np2;
142
                                bool nPath = true;
143
                                if (ig.data().size() > 3)
144
                                {
145
                                        for (uint poi = 0; poi < ig.data().size()-3; poi += 4)
146
                                        {
147
                                                if (ig.data().point(poi).x() > 900000)
148
                                                {
149
                                                        FontDesc += "cl\n";
150
                                                        nPath = true;
151
                                                        continue;
152
                                                }
153
                                                if (nPath)
154
                                                {
155
                                                        np = ig.data().point(poi);
156
                                                        FontDesc += ToStr(np.x()) + " " + ToStr(-np.y()) + " m\n";
157
                                                        nPath = false;
158
                                                }
159
                                                np = ig.data().point(poi+1);
160
                                                np1 = ig.data().point(poi+3);
161
                                                np2 = ig.data().point(poi+2);
162
                                                FontDesc += ToStr(np.x()) + " " + ToStr(-np.y()) + " " +
163
                                                                ToStr(np1.x()) + " " + ToStr(-np1.y()) + " " +
164
                                                                ToStr(np2.x()) + " " + ToStr(-np2.y()) + " cu\n";
165
                                        }
166
                                }
167
                                FontDesc += "cl\n} bind def\n";
168
                        }
169
                        FontDesc += "end\n";
170
                }
171
                else
172
                {
173
                        UsedFonts.insert(it.key(), "/Fo"+IToStr(a));
5980 avox 174
                        Fonts += "/Fo"+IToStr(a)+" /"+AllFonts[it.key()].psName().simplifyWhiteSpace().replace( QRegExp("[\\s\\/\\{\\[\\]\\}\\<\\>\\(\\)\\%]"), "_" )+" findfont definefont pop\n";
175
                        if (AllFonts[it.key()].embedPs())
3136 fschmid 176
                        {
177
                                QString tmp;
5980 avox 178
                                if(AllFonts[it.key()].EmbedFont(tmp))
3136 fschmid 179
                                {
5980 avox 180
                                        FontDesc += "%%BeginFont: " + AllFonts[it.key()].psName().simplifyWhiteSpace().replace( QRegExp("[\\s\\/\\{\\[\\]\\}\\<\\>\\(\\)\\%]"), "_" ) + "\n";
3136 fschmid 181
                                        FontDesc += tmp + "\n%%EndFont\n";
182
                                }
183
                        }
184
                        GListe gl;
5980 avox 185
                        AllFonts[it.key()].glyphNames(gl);
3136 fschmid 186
                        GlyphsOfFont.insert(it.key(), gl);
187
                        a++;
188
                }
189
        }
190
        Prolog = "%%BeginProlog\n";
191
        Prolog += "/Scribusdict 100 dict def\n";
192
        Prolog += "Scribusdict begin\n";
193
        Prolog += "/sp {showpage} bind def\n";
194
        Prolog += "/oldsetgray /setgray load def\n";
195
        Prolog += "/cmyk {setcmykcolor} def\n";
196
        Prolog += "/m {moveto} bind def\n";
197
        Prolog += "/l {lineto} bind def\n";
198
        Prolog += "/li {lineto} bind def\n";
199
        Prolog += "/cu {curveto} bind def\n";
200
        Prolog += "/cl {closepath} bind def\n";
201
        Prolog += "/gs {gsave} bind def\n";
202
        Prolog += "/gr {grestore} bind def\n";
203
        Prolog += "/tr {translate} bind def\n";
204
        Prolog += "/ro {rotate} bind def\n";
205
        Prolog += "/sh {show} bind def\n";
206
        Prolog += "/shg {setcmykcolor moveto glyphshow} def\n";
3555 fschmid 207
        Prolog += "/shgsp {moveto glyphshow} def\n";
3136 fschmid 208
        Prolog += "/sc {scale} bind def\n";
209
        Prolog += "/se {selectfont} bind def\n";
210
        Prolog += "/sf {setfont} bind def\n";
211
        Prolog += "/sw {setlinewidth} bind def\n";
212
        Prolog += "/f  {findfont} bind def\n";
213
        Prolog += "/fi {fill} bind def\n";
214
        Prolog += "/st {stroke} bind def\n";
215
        Prolog += "/shgf {gs dup scale begin cvx exec fill end gr} bind def\n";
216
        Prolog += "/shgs {gs dup 1 exch div currentlinewidth mul sw dup scale\n";
217
        Prolog += "       begin cvx exec st end gr} bind def\n";
218
        Prolog += "/bEPS {\n";
219
        Prolog += "    /b4_Inc_state save def\n";
220
        Prolog += "    /dict_count countdictstack def\n";
221
        Prolog += "    /op_count count 1 sub def\n";
222
        Prolog += "    userdict begin\n";
223
        Prolog += "    /showpage { } def\n";
224
        Prolog += "    0 setgray 0 setlinecap\n";
225
        Prolog += "    1 setlinewidth 0 setlinejoin\n";
226
        Prolog += "    10 setmiterlimit [ ] 0 setdash newpath\n";
227
        Prolog += "    /languagelevel where\n";
228
        Prolog += "    {pop languagelevel\n";
229
        Prolog += "    1 ne\n";
230
        Prolog += "    {false setstrokeadjust false setoverprint\n";
231
        Prolog += "    } if } if } bind def\n";
232
        Prolog += "/eEPS { count op_count sub {pop} repeat\n";
233
        Prolog += "    countdictstack dict_count sub {end} repeat\n";
234
        Prolog += "    b4_Inc_state restore } bind def\n";
235
        Prolog += "    end\n";
236
        Prolog += "%%EndProlog\n";
237
}
238
 
239
void PSLib::PutSeite(QString c)
240
{
241
        QTextStream t(&Spool);
242
        t.writeRawBytes(c, c.length());
243
}
244
 
5234 fschmid 245
void PSLib::PutSeite(QByteArray& array, bool hexEnc)
246
{
247
        QTextStream t(&Spool);
248
        if(hexEnc)
249
        {
250
                int length = 0;
5308 fschmid 251
                for (uint i = 0; i < array.size(); i++)
5234 fschmid 252
                {
253
                        length++;
254
                        t << toHex(array[i]);
255
                        if ( length > 40 )
256
                        {
257
                                t << "\n";
258
                                length = 0;
259
                        }
260
                }
261
        }
262
        else
263
                t.writeRawBytes(array, array.size());
264
}
265
 
266
void PSLib::PutSeite(const char* array, int length, bool hexEnc)
267
{
268
        QTextStream t(&Spool);
269
        if(hexEnc)
270
        {
271
                int len = 0;
272
                for (int i = 0; i < length; i++)
273
                {
274
                        len++;
275
                        t << toHex(array[i]);
276
                        if ( len > 40 )
277
                        {
278
                                t << "\n";
279
                                len = 0;
280
                        }
281
                }
282
        }
283
        else
284
                t.writeRawBytes(array, length);
285
}
286
 
3136 fschmid 287
void PSLib::PutDoc(QString c)
288
{
289
        QTextStream t(&Spool);
290
        t.writeRawBytes(c, c.length());
291
}
292
 
5234 fschmid 293
void PSLib::PutDoc(QByteArray& array, bool hexEnc)
294
{
295
        QTextStream t(&Spool);
296
        if(hexEnc)
297
        {
298
                int length = 0;
5387 avox 299
                for (uint i = 0; i < array.size(); i++)
5234 fschmid 300
                {
301
                        length++;
302
                        t << toHex(array[i]);
303
                        if ( length > 40 )
304
                        {
305
                                t << "\n";
306
                                length = 0;
307
                        }
308
                }
309
        }
310
        else
311
                t.writeRawBytes(array, array.size());
312
}
313
 
314
void PSLib::PutDoc(const char* array, int length, bool hexEnc)
315
{
316
        QTextStream t(&Spool);
317
        if(hexEnc)
318
        {
319
                int len = 0;
320
                for (int i = 0; i < length; i++)
321
                {
322
                        len++;
323
                        t << toHex(array[i]);
324
                        if ( len > 40 )
325
                        {
326
                                t << "\n";
327
                                len = 0;
328
                        }
329
                }
330
        }
331
        else
332
                t.writeRawBytes(array, length);
333
}
334
 
3136 fschmid 335
QString PSLib::ToStr(double c)
336
{
337
        QString cc;
338
        return cc.setNum(c);
339
}
340
 
341
QString PSLib::IToStr(int c)
342
{
343
        QString cc;
344
        return cc.setNum(c);
345
}
346
 
347
void PSLib::PS_set_Info(QString art, QString was)
348
{
349
        if (art == "Author")
350
                User = was;
351
        if (art == "Creator")
352
                Creator = was;
353
        if (art == "Title")
354
                Titel = was;
355
}
356
 
357
bool PSLib::PS_set_file(QString fn)
358
{
359
        Spool.setName(fn);
360
        return Spool.open(IO_WriteOnly);
361
}
362
 
5308 fschmid 363
void PSLib::PS_begin_doc(int, double x, double y, double breite, double hoehe, int numpage, bool doDev, bool sep, bool over)
3136 fschmid 364
{
365
        PutDoc(Header);
366
        PutDoc("%%For: " + User + "\n");
367
        PutDoc("%%Title: " + Titel + "\n");
368
        PutDoc("%%Creator: " + Creator + "\n");
369
        PutDoc("%%Pages: " + IToStr(numpage) + "\n");
370
        BBox = "%%BoundingBox: " + IToStr(qRound(x)) + " " + IToStr(qRound(y)) + " " + IToStr(qRound(breite)) + " " + IToStr(qRound(hoehe)) + "\n";
371
        BBoxH = "%%HiResBoundingBox: " + ToStr(x) + " " + ToStr(y) + " " + ToStr(breite) + " " + ToStr(hoehe) + "\n";
372
        if (!Art)
373
        {
374
                PutDoc(BBox);
375
                PutDoc(BBoxH);
376
        }
377
        PutDoc(FNamen);
378
        PutDoc(Farben);
379
        PutDoc("%%LanguageLevel: 3\n");
380
        PutDoc("%%EndComments\n");
381
        PutDoc(Prolog);
382
        PutDoc("%%BeginSetup\n");
383
        PutDoc("/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse\n");
384
        if (!FontDesc.isEmpty())
385
                PutDoc(FontDesc);
386
        if ((!colorDesc.isEmpty()) && (!sep))
387
                PutDoc(colorDesc);
388
        PutDoc("Scribusdict begin\n");
389
        PutDoc(Fonts);
390
        if (GraySc)
391
                PutDoc(GrayCalc);
392
        if ((Art) && (doDev))
393
        {
394
                PutSeite("<< /PageSize [ "+ToStr(breite)+" "+ToStr(hoehe)+" ]\n");
395
                PutSeite(">> setpagedevice\n");
396
        }
5308 fschmid 397
        if (over)
5316 fschmid 398
        {
5308 fschmid 399
                PutDoc("true setoverprint\n");
5316 fschmid 400
                PutDoc("true setoverprintmode\n");
401
        }
3136 fschmid 402
        PutDoc("%%EndSetup\n");
403
        Prolog = "";
404
        FontDesc = "";
405
}
406
 
407
QString PSLib::PSEncode(QString in)
408
{
3622 avox 409
        static QRegExp badchars("[\\s\\/\\{\\[\\]\\}\\<\\>\\(\\)\\%]");
3136 fschmid 410
        QString tmp = "";
3622 avox 411
        tmp = in.simplifyWhiteSpace().replace( badchars, "_" );
3136 fschmid 412
        return tmp;
413
}
414
 
415
void PSLib::PS_TemplateStart(QString Name)
416
{
417
        PutDoc("/"+PSEncode(Name)+"\n{\n");
418
}
419
 
420
void PSLib::PS_UseTemplate(QString Name)
421
{
422
        PutDoc(PSEncode(Name)+"\n");
423
}
424
 
425
void PSLib::PS_TemplateEnd()
426
{
427
        PutDoc("} bind def\n");
428
}
429
 
430
void PSLib::PS_begin_page(double breite, double hoehe, struct MarginStruct* Ma, bool Clipping)
431
{
432
        if (Clipping)
433
        {
434
                PDev = ToStr(Ma->Left) + " " + ToStr(Ma->Bottom) + " m\n";
435
                PDev += ToStr(breite - Ma->Right) + " " + ToStr(Ma->Bottom) + " li\n";
436
                PDev += ToStr(breite - Ma->Right) + " " + ToStr(hoehe - Ma->Top) + " li\n";
437
                PDev += ToStr(Ma->Left) + " " + ToStr(hoehe - Ma->Top) + " li cl clip newpath\n";
438
        }
439
        Seiten++;
440
        PutSeite("%%Page: " + IToStr(Seiten) + " " + IToStr(Seiten) + "\nsave\n");
441
        if (Clipping)
442
                PutSeite(PDev);
443
        PutSeite("/DeviceCMYK setcolorspace\n");
444
}
445
 
446
void PSLib::PS_end_page()
447
{
448
        PutSeite("%%PageTrailer\nrestore\nsp\n");
449
}
450
 
451
void PSLib::PS_curve(double x1, double y1, double x2, double y2, double x3, double y3)
452
{
453
        PutSeite(ToStr(x1) + " " + ToStr(y1) + " " + ToStr(x2) + " " + ToStr(y2) + " " + ToStr(x3) + " " + ToStr(y3) + " curveto\n");
454
}
455
 
456
void PSLib::PS_moveto(double x, double y)
457
{
458
        PutSeite(ToStr(x) + " " + ToStr(y) + " m\n");
459
}
460
 
461
void PSLib::PS_lineto(double x, double y)
462
{
463
        PutSeite(ToStr(x) + " " + ToStr(y) + " li\n");
464
}
465
 
466
void PSLib::PS_closepath()
467
{
468
        PutSeite("cl\n");
469
}
470
 
471
void PSLib::PS_translate(double x, double y)
472
{
473
        PutSeite(ToStr(x) + " " + ToStr(y) + " tr\n");
474
}
475
 
476
void PSLib::PS_scale(double x, double y)
477
{
478
        PutSeite(ToStr(x) + " " + ToStr(y) + " sc\n");
479
}
480
 
481
void PSLib::PS_rotate(double x)
482
{
483
        PutSeite(ToStr(x) + " ro\n");
484
}
485
 
486
void PSLib::PS_clip(bool mu)
487
{
488
        PutSeite( mu ? "eoclip newpath\n" : "clip newpath\n" );
489
}
490
 
491
void PSLib::PS_save()
492
{
493
        PutSeite("gs\n");
494
}
495
 
496
void PSLib::PS_restore()
497
{
498
        PutSeite("gr\n");
499
}
500
 
501
void PSLib::PS_setcmykcolor_fill(double c, double m, double y, double k)
502
{
503
        FillColor = ToStr(c) + " " + ToStr(m) + " " + ToStr(y) + " " + ToStr(k);
504
}
505
 
506
void PSLib::PS_setcmykcolor_dummy()
507
{
508
        PutSeite("0 0 0 0 cmyk\n");
509
}
510
 
511
void PSLib::PS_setcmykcolor_stroke(double c, double m, double y, double k)
512
{
513
        StrokeColor = ToStr(c) + " " + ToStr(m) + " " + ToStr(y) + " " + ToStr(k);
514
}
515
 
516
void PSLib::PS_setlinewidth(double w)
517
{
518
        PutSeite(ToStr(w) + " sw\n");
519
        LineW = w;
520
}
521
 
522
void PSLib::PS_setdash(Qt::PenStyle st, double offset, QValueList<double> dash)
523
{
524
        QString Dt = ToStr(QMAX(2*LineW, 1));
525
        QString Da = ToStr(QMAX(6*LineW, 1));
526
        if (dash.count() != 0)
527
        {
528
                PutSeite("[ ");
529
                QValueList<double>::iterator it;
530
                for ( it = dash.begin(); it != dash.end(); ++it )
531
                {
532
                        PutSeite(IToStr(static_cast<int>(*it))+" ");
533
                }
534
                PutSeite("] "+IToStr(static_cast<int>(offset))+" setdash\n");
535
        }
536
        else
537
        {
538
                switch (st)
539
                {
540
                        case Qt::SolidLine:
541
                                PutSeite("[] 0 setdash\n");
542
                                break;
543
                        case Qt::DashLine:
544
                                PutSeite("["+Da+" "+Dt+"] 0 setdash\n");
545
                                break;
546
                        case Qt::DotLine:
547
                                PutSeite("["+Dt+"] 0 setdash\n");
548
                                break;
549
                        case Qt::DashDotLine:
550
                                PutSeite("["+Da+" "+Dt+" "+Dt+" "+Dt+"] 0 setdash\n");
551
                                break;
552
                        case Qt::DashDotDotLine:
553
                                PutSeite("["+Da+" "+Dt+" "+Dt+" "+Dt+" "+Dt+" "+Dt+"] 0 setdash\n");
554
                                break;
555
                        default:
556
                                PutSeite("[] 0 setdash\n");
557
                                break;
558
                }
559
        }
560
}
561
void PSLib::PS_setcapjoin(Qt::PenCapStyle ca, Qt::PenJoinStyle jo)
562
{
563
        switch (ca)
564
                {
565
                case Qt::FlatCap:
566
                        PutSeite("0 setlinecap\n");
567
                        break;
568
                case Qt::SquareCap:
569
                        PutSeite("2 setlinecap\n");
570
                        break;
571
                case Qt::RoundCap:
572
                        PutSeite("1 setlinecap\n");
573
                        break;
574
                default:
575
                        PutSeite("0 setlinecap\n");
576
                        break;
577
                }
578
        switch (jo)
579
                {
580
                case Qt::MiterJoin:
581
                        PutSeite("0 setlinejoin\n");
582
                        break;
583
                case Qt::BevelJoin:
584
                        PutSeite("2 setlinejoin\n");
585
                        break;
586
                case Qt::RoundJoin:
587
                        PutSeite("1 setlinejoin\n");
588
                        break;
589
                default:
590
                        PutSeite("0 setlinejoin\n");
591
                        break;
592
                }
593
}
594
 
595
void PSLib::PS_selectfont(QString f, double s)
596
{
597
        PutSeite(UsedFonts[f] + " " + ToStr(s) + " se\n");
598
}
599
 
600
void PSLib::PS_fill()
601
{
4477 fschmid 602
        if (fillRule)
603
                PutSeite(FillColor + " cmyk eofill\n");
604
        else
605
                PutSeite(FillColor + " cmyk fill\n");
3136 fschmid 606
}
607
 
608
void PSLib::PS_fillspot(QString color, int shade)
609
{
4477 fschmid 610
        if (fillRule)
611
                PutSeite(ToStr(shade / 100.0)+" "+spotMap[color]+" eofill\n");
612
        else
613
                PutSeite(ToStr(shade / 100.0)+" "+spotMap[color]+" fill\n");
3136 fschmid 614
}
615
 
616
void PSLib::PS_strokespot(QString color, int shade)
617
{
618
        PutSeite(ToStr(shade / 100.0)+" "+spotMap[color]+" st\n");
619
}
620
 
621
void PSLib::PS_stroke()
622
{
623
        PutSeite(StrokeColor + " cmyk st\n");
624
}
625
 
626
void PSLib::PS_fill_stroke()
627
{
628
        PS_save();
629
        PS_fill();
630
        PS_restore();
631
        PS_stroke();
632
}
633
 
634
void PSLib::PS_newpath()
635
{
636
        PutSeite("newpath\n");
637
}
638
 
639
void PSLib::PS_MultiRadGradient(double w, double h, double x, double y, QValueList<double> Stops, QStringList Colors)
640
{
641
        bool first = true;
642
        PutSeite( "clipsave\n" );
643
        PutSeite("eoclip\n");
644
        for (uint c = 0; c < Colors.count()-1; ++c)
645
        {
646
                PutSeite("<<\n");
647
                PutSeite("/ShadingType 3\n");
648
                PutSeite( DoSep ? "/ColorSpace /DeviceGray\n" : "/ColorSpace /DeviceCMYK\n" );
649
                PutSeite("/BBox [0 "+ToStr(h)+" "+ToStr(w)+" 0]\n");
650
                if (Colors.count() == 2)
651
                        PutDoc("/Extend [true true]\n");
652
                else
653
                {
654
                        if (first)
655
                                PutSeite("/Extend [false true]\n");
656
                        else
657
                        {
658
                                if (c == Colors.count()-2)
659
                                        PutSeite("/Extend [true false]\n");
660
                                else
661
                                        PutSeite("/Extend [false false]\n");
662
                        }
663
                }
664
                PutSeite("/Coords ["+ToStr(x)+" "+ToStr(y)+" "+ToStr((*Stops.at(c+1)))+" "+ToStr(x)+" "+ToStr(y)+" "+ToStr((*Stops.at(c)))+"]\n");
665
                PutSeite("/Function\n");
666
                PutSeite("<<\n");
667
                PutSeite("/FunctionType 2\n");
668
                PutSeite("/Domain [0 1]\n");
669
                if (DoSep)
670
                {
671
                        int pla = Plate - 1 < 0 ? 3 : Plate - 1;
672
                        QStringList cols1 = QStringList::split(" ", Colors[c+1]);
673
                        QStringList cols2 = QStringList::split(" ", Colors[c]);
674
                        PutSeite("/C1 ["+ToStr(1-cols1[pla].toDouble())+"]\n");
675
                        PutSeite("/C0 ["+ToStr(1-cols2[pla].toDouble())+"]\n");
676
                }
677
                else
678
                {
679
                        PutSeite("/C0 ["+Colors[c+1]+"]\n");
680
                        PutSeite("/C1 ["+Colors[c]+"]\n");
681
                }
682
                PutSeite("/N 1\n");
683
                PutSeite(">>\n");
684
                PutSeite(">>\n");
685
                PutSeite("shfill\n");
686
                first = false;
687
        }
688
        PutSeite("cliprestore\n");
689
}
690
 
691
void PSLib::PS_MultiLinGradient(double w, double h, QValueList<double> Stops, QStringList Colors)
692
{
693
        bool first = true;
694
        PutSeite( "clipsave\n" );
695
        PutSeite("eoclip\n");
696
        for (uint c = 0; c < Colors.count()-1; ++c)
697
        {
698
                PutSeite("<<\n");
699
                PutSeite("/ShadingType 2\n");
700
                PutSeite( DoSep ? "/ColorSpace /DeviceGray\n" : "/ColorSpace /DeviceCMYK\n" );
701
                PutSeite("/BBox [0 "+ToStr(h)+" "+ToStr(w)+" 0]\n");
702
                if (Colors.count() == 2)
703
                        PutDoc("/Extend [true true]\n");
704
                else
705
                {
706
                        if (first)
707
                                PutSeite("/Extend [true false]\n");
708
                        else
709
                        {
710
                                if (c == Colors.count()-2)
711
                                        PutSeite("/Extend [false true]\n");
712
                                else
713
                                        PutSeite("/Extend [false false]\n");
714
                        }
715
                }
716
                first = false;
717
                PutSeite("/Coords ["+ToStr((*Stops.at(c*2)))+"  "+ToStr((*Stops.at(c*2+1)))+" "+ToStr((*Stops.at(c*2+2)))+" "+ToStr((*Stops.at(c*2+3)))+"]\n");
718
                PutSeite("/Function\n");
719
                PutSeite("<<\n");
720
                PutSeite("/FunctionType 2\n");
721
                PutSeite("/Domain [0 1]\n");
722
                if (DoSep)
723
                {
724
                        int pla = Plate - 1 < 0 ? 3 : Plate - 1;
725
                        QStringList cols1 = QStringList::split(" ", Colors[c]);
726
                        QStringList cols2 = QStringList::split(" ", Colors[c+1]);
727
                        PutSeite("/C1 ["+ToStr(1-cols1[pla].toDouble())+"]\n");
728
                        PutSeite("/C0 ["+ToStr(1-cols2[pla].toDouble())+"]\n");
729
                }
730
                else
731
                {
732
                        PutSeite("/C0 ["+Colors[c]+"]\n");
733
                        PutSeite("/C1 ["+Colors[c+1]+"]\n");
734
                }
735
                PutSeite("/N 1\n");
736
                PutSeite(">>\n");
737
                PutSeite(">>\n");
738
                PutSeite("shfill\n");
739
        }
740
        PutSeite("cliprestore\n");
741
}
742
 
6163 avox 743
void PSLib::PS_show_xyG(QString font, uint glyph, double x, double y, bool spot)
3136 fschmid 744
{
745
        QString Name;
6163 avox 746
        Name = GlyphsOfFont[font].contains(glyph) ? GlyphsOfFont[font][glyph].second : QString(".notdef");
3555 fschmid 747
        if (spot)
748
                PutSeite("/"+Name+" "+ToStr(x)+" "+ToStr(y)+" shgsp\n");
749
        else
750
                PutSeite("/"+Name+" "+ToStr(x)+" "+ToStr(y)+" "+StrokeColor+" shg\n");
3136 fschmid 751
}
752
 
753
void PSLib::PS_show(double x, double y)
754
{
755
        PS_moveto(x, y);
756
        PutSeite("/hyphen glyphshow\n");
757
}
758
 
759
void PSLib::PS_showSub(uint chr, QString font, double size, bool stroke)
760
{
761
        PutSeite(" (G"+IToStr(chr)+") "+font+" "+ToStr(size / 10.0)+" ");
762
        PutSeite(stroke ? "shgs\n" : "shgf\n");
763
}
764
 
765
void PSLib::PS_ImageData(PageItem *c, QString fn, QString Name, QString Prof, bool UseEmbedded, bool UseProf)
766
{
767
        bool dummy;
5234 fschmid 768
        QCString tmp;
3136 fschmid 769
        QFileInfo fi = QFileInfo(fn);
770
        QString ext = fi.extension(false).lower();
771
        if (ext == "eps")
772
        {
5234 fschmid 773
                if (loadRawText(fn, tmp))
3136 fschmid 774
                {
775
                        PutSeite("currentfile 1 (%ENDEPSDATA) /SubFileDecode filter /ReusableStreamDecode filter\n");
776
                        PutSeite("%%BeginDocument: " + fi.fileName() + "\n");
5234 fschmid 777
                        if (getDouble(QString(tmp.mid(0, 4)), true) == 0xC5D0D3C6)
3136 fschmid 778
                        {
5234 fschmid 779
                                char* data = tmp.data();
780
                                uint startPos = getDouble(QString(tmp.mid(4, 4)), false);
781
                                uint length = getDouble(QString(tmp.mid(8, 4)), false);
782
                                PutSeite(data+startPos, length, false);
3136 fschmid 783
                        }
784
                        else
5234 fschmid 785
                                PutSeite(tmp, false);
786
                        PutSeite("\n%ENDEPSDATA\n");
3136 fschmid 787
                        PutSeite("%%EndDocument\n");
788
                        PutSeite("/"+PSEncode(Name)+"Bild exch def\n");
789
                }
790
                return;
791
        }
792
        ScImage image;
5234 fschmid 793
        QByteArray imgArray;
3136 fschmid 794
        image.imgInfo.valid = false;
795
        image.imgInfo.clipPath = "";
796
        image.imgInfo.PDSpathData.clear();
797
        image.imgInfo.layerInfo.clear();
798
        image.imgInfo.RequestProps = c->pixm.imgInfo.RequestProps;
799
        image.imgInfo.isRequest = c->pixm.imgInfo.isRequest;
5959 jghali 800
        CMSettings cms(c->doc(), Prof, c->IRender);
801
        image.LoadPicture(fn, cms, UseEmbedded, UseProf, ScImage::CMYKData, 300, &dummy);
3136 fschmid 802
        image.applyEffect(c->effectsInUse, colorsToUse, true);
5234 fschmid 803
        imgArray = image.ImageToCMYK_PS(-1, true);
3136 fschmid 804
        if (CompAvail)
805
        {
806
                PutSeite("currentfile /ASCIIHexDecode filter /FlateDecode filter /ReusableStreamDecode filter\n");
5234 fschmid 807
                imgArray = CompressArray(&imgArray);
3136 fschmid 808
        }
809
        else
810
                PutSeite("currentfile /ASCIIHexDecode filter /ReusableStreamDecode filter\n");
5234 fschmid 811
        PutSeite(imgArray, true);
3136 fschmid 812
        PutSeite("\n>\n");
813
        PutSeite("/"+PSEncode(Name)+"Bild exch def\n");
5234 fschmid 814
        imgArray.resize(0);
815
        QByteArray maskArray;
816
        maskArray = image.getAlpha(fn, false, false);
817
        if (maskArray.size() > 0)
3136 fschmid 818
        {
819
                if (CompAvail)
820
                {
821
                        PutSeite("currentfile /ASCIIHexDecode filter /FlateDecode filter /ReusableStreamDecode filter\n");
5234 fschmid 822
                        maskArray = CompressArray(&maskArray);
3136 fschmid 823
                }
824
                else
825
                        PutSeite("currentfile /ASCIIHexDecode filter /ReusableStreamDecode filter\n");
5234 fschmid 826
                PutSeite(maskArray, true);
3136 fschmid 827
                PutSeite("\n>\n");
828
                PutSeite("/"+PSEncode(Name)+"Mask exch def\n");
829
        }
830
}
831
 
832
void PSLib::PS_image(PageItem *c, double x, double y, QString fn, double scalex, double scaley, QString Prof, bool UseEmbedded, bool UseProf, QString Name)
833
{
834
        bool dummy;
5234 fschmid 835
        QCString tmp;
3136 fschmid 836
        QFileInfo fi = QFileInfo(fn);
837
        QString ext = fi.extension(false).lower();
838
        if (ext == "eps")
839
        {
5234 fschmid 840
                if (loadRawText(fn, tmp))
3136 fschmid 841
                {
842
                        PutSeite("bEPS\n");
4335 fschmid 843
                        PutSeite(ToStr(PrefsManager::instance()->appPrefs.gs_Resolution / 72.0 * scalex) + " " + ToStr(PrefsManager::instance()->appPrefs.gs_Resolution / 72.0 * scaley) + " sc\n");
844
                        PutSeite(ToStr(-c->BBoxX+x * scalex) + " " + ToStr(y * scalex) + " tr\n");
3136 fschmid 845
                        if (!Name.isEmpty())
846
                        {
847
                                PutSeite(PSEncode(Name)+"Bild cvx exec\n");
848
                                PutSeite(PSEncode(Name)+"Bild resetfile\n");
849
                        }
850
                        else
851
                        {
852
                                PutSeite("%%BeginDocument: " + fi.fileName() + "\n");
5234 fschmid 853
                                        if (getDouble(QString(tmp.mid(0, 4)), true) == 0xC5D0D3C6)
3136 fschmid 854
                                        {
5234 fschmid 855
                                                char* data = tmp.data();
3136 fschmid 856
                                                uint startPos = getDouble(tmp.mid(4, 4), false);
857
                                                uint length = getDouble(tmp.mid(8, 4), false);
5234 fschmid 858
                                                PutSeite(data+startPos, length, false);
3136 fschmid 859
                                        }
860
                                        else
5234 fschmid 861
                                                PutSeite(tmp);
862
                                        PutSeite("\n%%EndDocument\n");
3136 fschmid 863
                        }
864
                        PutSeite("eEPS\n");
865
                }
866
        }
867
        else
868
        {
869
                ScImage image;
5234 fschmid 870
                QByteArray imgArray;
3136 fschmid 871
                image.imgInfo.valid = false;
872
                image.imgInfo.clipPath = "";
873
                image.imgInfo.PDSpathData.clear();
874
                image.imgInfo.layerInfo.clear();
875
                image.imgInfo.RequestProps = c->pixm.imgInfo.RequestProps;
876
                image.imgInfo.isRequest = c->pixm.imgInfo.isRequest;
5959 jghali 877
                CMSettings cms(c->doc(), Prof, c->IRender);
878
                image.LoadPicture(fn, cms, UseEmbedded, UseProf, ScImage::CMYKData, 300, &dummy);
3136 fschmid 879
                image.applyEffect(c->effectsInUse, colorsToUse, true);
880
                int w = image.width();
881
                int h = image.height();
882
                if (ext == "pdf")
883
                {
4335 fschmid 884
                        scalex *= PrefsManager::instance()->appPrefs.gs_Resolution / 300.0;
885
                        scaley *= PrefsManager::instance()->appPrefs.gs_Resolution / 300.0;
3136 fschmid 886
                }
887
                PutSeite(ToStr(x*scalex) + " " + ToStr(y*scaley) + " tr\n");
888
                PutSeite(ToStr(scalex*w) + " " + ToStr(scaley*h) + " sc\n");
889
                PutSeite(((!DoSep) && (!GraySc)) ? "/DeviceCMYK setcolorspace\n" : "/DeviceGray setcolorspace\n");
5234 fschmid 890
                QByteArray maskArray;
3136 fschmid 891
                ScImage img2;
5234 fschmid 892
                maskArray = img2.getAlpha(fn, false, false);
893
                if (maskArray.size() > 0)
3136 fschmid 894
                {
895
                        if (DoSep)
5234 fschmid 896
                                imgArray = image.ImageToCMYK_PS(Plate, true);
3136 fschmid 897
                        else
5234 fschmid 898
                                imgArray = GraySc ? image.ImageToCMYK_PS( -2, true) : image.ImageToCMYK_PS(-1, true);
3136 fschmid 899
                        if (Name.isEmpty())
900
                        {
901
                                if (CompAvail)
902
                                {
903
                                        PutSeite("currentfile /ASCIIHexDecode filter /FlateDecode filter /ReusableStreamDecode filter\n");
5234 fschmid 904
                                        imgArray = CompressArray(&imgArray);
3136 fschmid 905
                                }
906
                                else
907
                                        PutSeite("currentfile /ASCIIHexDecode filter /ReusableStreamDecode filter\n");
5234 fschmid 908
                                PutSeite(imgArray, true);
909
                                imgArray.resize(0);
3136 fschmid 910
                                PutSeite("\n>\n");
911
                                PutSeite("/Bild exch def\n");
912
                                if (CompAvail)
913
                                {
914
                                        PutSeite("currentfile /ASCIIHexDecode filter /FlateDecode filter /ReusableStreamDecode filter\n");
5234 fschmid 915
                                        maskArray = CompressArray(&maskArray);
3136 fschmid 916
                                }
917
                                else
918
                                        PutSeite("currentfile /ASCIIHexDecode filter /ReusableStreamDecode filter\n");
5234 fschmid 919
                                PutSeite(maskArray, true);
3136 fschmid 920
                                PutSeite("\n>\n");
921
                                PutSeite("/Mask exch def\n");
922
                        }
923
                        PutSeite("<<\n");
924
                        PutSeite("  /PaintType   1\n");
925
                        PutSeite("  /PatternType 1\n");
926
                        PutSeite("  /TilingType  3\n");
927
                        PutSeite("  /BBox        [ 0 0 1 1 ]\n");
928
                        PutSeite("  /XStep       2\n");
929
                        PutSeite("  /YStep       2\n");
930
                        PutSeite("  /PaintProc   {\n");
931
                        PutSeite("   pop\n");
932
                        PutSeite("   1 1 1 1 setcmykcolor\n");
933
                        PutSeite("   <<\n");
934
                        PutSeite("   /ImageType 1\n");
935
                        PutSeite("   /Height    " + IToStr(h) + "\n");
936
                        PutSeite("   /Width     " + IToStr(w) + "\n");
937
                        PutSeite("   /ImageMatrix [" + IToStr(w) + " 0 0 " + IToStr(-h) + " 0 " + IToStr(h)
938
                                +"]\n");
939
                        if (DoSep)
940
                                PutSeite("   /Decode [1 0]\n");
941
                        else
942
                                PutSeite( GraySc ? "   /Decode [1 0]\n" : "   /Decode [0 1 0 1 0 1 0 1]\n" );
943
                        PutSeite("   /BitsPerComponent 8\n");
944
                        PutSeite("   /DataSource "+PSEncode(Name)+"Bild\n");
945
                        PutSeite("   >>\n");
946
                        PutSeite("   image\n");
947
                        PutSeite("   }\n");
948
                        PutSeite(">> matrix makepattern setpattern\n");
949
                        PutSeite("<< /ImageType 1\n");
950
                        PutSeite("   /Width " + IToStr(w) + "\n");
951
                        PutSeite("   /Height " + IToStr(h) + "\n");
952
                        PutSeite("   /BitsPerComponent 1\n");
953
                        PutSeite("   /Decode [1 0]\n");
954
                        PutSeite("   /ImageMatrix [" + IToStr(w) + " 0 0 " + IToStr(-h) + " 0 " + IToStr(h) + "]\n");
955
                        PutSeite("   /DataSource "+PSEncode(Name)+"Mask\n");
956
                        PutSeite(">>\n");
957
                        PutSeite("imagemask\n");
958
                        if (!Name.isEmpty())
959
                        {
960
                                PutSeite(PSEncode(Name)+"Bild resetfile\n");
961
                                PutSeite(PSEncode(Name)+"Mask resetfile\n");
962
                        }
963
                }
964
                else
965
                {
966
                        PutSeite("<< /ImageType 1\n");
967
                        PutSeite("   /Width " + IToStr(w) + "\n");
968
                        PutSeite("   /Height " + IToStr(h) + "\n");
969
                        PutSeite("   /BitsPerComponent 8\n");
970
                        if (DoSep)
971
                                PutSeite("   /Decode [1 0]\n");
972
                        else
973
                                PutSeite( GraySc ? "   /Decode [1 0]\n" : "   /Decode [0 1 0 1 0 1 0 1]\n");
974
                        PutSeite("   /ImageMatrix [" + IToStr(w) + " 0 0 " + IToStr(-h) + " 0 " + IToStr(h) +
975
                                        "]\n");
976
                        if (!Name.isEmpty())
977
                        {
978
                                PutSeite("   /DataSource "+PSEncode(Name)+"Bild >>\n");
979
                                PutSeite("image\n");
980
                                PutSeite(PSEncode(Name)+"Bild resetfile\n");
981
                        }
982
                        else
983
                        {
984
                                PutSeite ( CompAvail ? "   /DataSource currentfile /ASCIIHexDecode filter /FlateDecode filter >>\n" :
985
                                                        "   /DataSource currentfile /ASCIIHexDecode filter >>\n");
986
                                PutSeite("image\n");
987
                                if (DoSep)
5234 fschmid 988
                                        imgArray = image.ImageToCMYK_PS(Plate, true);
3136 fschmid 989
                                else
5234 fschmid 990
                                        imgArray = GraySc ? image.ImageToCMYK_PS(-2, true) : image.ImageToCMYK_PS(-1, true);
3136 fschmid 991
                                if (CompAvail)
5234 fschmid 992
                                        imgArray = CompressArray(&imgArray);
993
                                PutSeite(imgArray, true);
3136 fschmid 994
                                PutSeite("\n>\n");
995
                        }
996
                }
997
        }
998
}
999
 
1000
 
1001
void PSLib::PS_plate(int nr, QString name)
1002
{
1003
        switch (nr)
1004
        {
1005
                case 0:
1006
                        PutSeite("%%PlateColor Black\n");
1007
                        PutSeite("/setcmykcolor {exch pop exch pop exch pop 1 exch sub oldsetgray} bind def\n");
1008
                        PutSeite("/setrgbcolor {pop pop pop 1 oldsetgray} bind def\n");
1009
                        break;
1010
                case 1:
1011
                        PutSeite("%%PlateColor Cyan\n");
1012
                        PutSeite("/setcmykcolor {pop pop pop 1 exch sub oldsetgray} bind def\n");
1013
                        PutSeite("/setrgbcolor {pop pop oldsetgray} bind def\n");
1014
                        break;
1015
                case 2:
1016
                        PutSeite("%%PlateColor Magenta\n");
1017
                        PutSeite("/setcmykcolor {pop pop exch pop 1 exch sub oldsetgray} bind def\n");
1018
                        PutSeite("/setrgbcolor {pop exch pop oldsetgray} bind def\n");
1019
                        break;
1020
                case 3:
1021
                        PutSeite("%%PlateColor Yellow\n");
1022
                        PutSeite("/setcmykcolor {pop exch pop exch pop 1 exch sub oldsetgray} bind def\n");
1023
                        PutSeite("/setrgbcolor {exch pop exch pop oldsetgray} bind def\n");
1024
                        break;
1025
                default:
1026
                        PutSeite("%%PlateColor "+name+"\n");
1027
                        PutSeite("/setcmykcolor {exch 0.11 mul add exch 0.59 mul add exch 0.3 mul add dup 1 gt {pop 1} if 1 exch sub oldsetgray} bind def\n");
1028
                        PutSeite("/setrgbcolor {0.11 mul exch 0.59 mul add exch 0.3 mul add oldsetgray} bind def\n");
1029
                        break;
1030
        }
1031
        Plate = nr;
1032
        currentSpot = name;
1033
        DoSep = true;
1034
}
1035
 
1036
void PSLib::PS_setGray()
1037
{
1038
        GraySc = true;
1039
}
1040
 
1041
void PSLib::PDF_Bookmark(QString text, uint Seite)
1042
{
1043
        PutSeite("[/Title ("+text+") /Page "+IToStr(Seite)+" /View [/Fit]\n");
1044
        PutSeite("/OUT pdfmark\n");
1045
        isPDF = true;
1046
}
1047
 
1048
void PSLib::PDF_Annotation(QString text, double x, double y, double b, double h)
1049
{
1050
        PutSeite("[ /Rect [ "+ToStr(static_cast<int>(x))+" "+ToStr(static_cast<int>(y))
1051
                        +" "+ToStr(static_cast<int>(b))+" "+ToStr(static_cast<int>(h))+" ]\n");
1052
        PutSeite("  /Contents ("+text+")\n  /Open false\n");
1053
        PutSeite("/ANN pdfmark\n");
1054
        isPDF = true;
1055
}
1056
 
1057
 
1058
void PSLib::PS_close()
1059
{
1060
        PutDoc("%%Trailer\n");
1061
        PutDoc("end\n");
1062
        PutDoc("%%EOF\n");
1063
        Spool.close();
1064
}
1065
 
1066
 
1067
void PSLib::PS_insert(QString i)
1068
{
1069
        PutDoc(i);
1070
}
1071
 
5308 fschmid 1072
int PSLib::CreatePS(ScribusDoc* Doc, std::vector<int> &pageNs, bool sep, QString SepNam, QStringList spots, bool farb, bool Hm, bool Vm, bool Ic, bool gcr, bool doDev, bool doClip, bool over)
3136 fschmid 1073
{
1074
        int sepac;
1075
        int pagemult;
5320 fschmid 1076
        doOverprint = over;
3136 fschmid 1077
        if ((sep) && (SepNam == QObject::tr("All")))
1078
                pagemult = spots.count();
1079
        else
3230 fschmid 1080
                pagemult = 1;
3136 fschmid 1081
        QValueList<double> dum;
1082
        double gx, gy, gw, gh;
1083
        dum.clear();
1084
        PS_set_Info("Author", Doc->documentInfo.getAuthor());
1085
        PS_set_Info("Title", Doc->documentInfo.getTitle());
1086
        if (!farb)
1087
                PS_setGray();
4546 subik 1088
 
4037 cbradney 1089
        if (usingGUI)
1090
        {
1091
                QString title=QObject::tr("Exporting PostScript File");
1092
                if (Art)
1093
                        title=QObject::tr("Printing File");
5781 cbradney 1094
                progressDialog=new MultiProgressDialog(title, CommonStrings::tr_Cancel, Doc->scMW(), "psexportprogress");
4037 cbradney 1095
                if (progressDialog==0)
1096
                        usingGUI=false;
1097
                else
1098
                {
1099
                        QStringList barNames, barTexts;
1100
                        barNames << "EMP" << "EP";
5370 cbradney 1101
                        barTexts << tr("Processing Master Page:") << tr("Exporting Page:");
1102
                        QValueList<bool> barsNumeric;
1103
                        barsNumeric << true << true;
1104
                        progressDialog->addExtraProgressBars(barNames, barTexts, barsNumeric);
4037 cbradney 1105
                        progressDialog->setOverallTotalSteps(pageNs.size()+Doc->MasterPages.count());
1106
                        progressDialog->setTotalSteps("EMP", Doc->MasterPages.count());
1107
                        progressDialog->setTotalSteps("EP", pageNs.size());
1108
                        progressDialog->setOverallProgress(0);
1109
                        progressDialog->setProgress("EMP", 0);
1110
                        progressDialog->setProgress("EP", 0);
1111
                        progressDialog->show();
1112
                        connect(progressDialog->buttonCancel, SIGNAL(clicked()), this, SLOT(cancelRequested()));
1113
                        ScQApp->processEvents();
1114
                }
1115
        }
3934 cbradney 1116
        //if ((!Art) && (view->SelItem.count() != 0))
4847 cbradney 1117
        uint docSelectionCount=Doc->m_Selection->count();
3934 cbradney 1118
        if ((!Art) && (docSelectionCount != 0))
3136 fschmid 1119
        {
3394 fschmid 1120
                double minx = 99999.9;
1121
                double miny = 99999.9;
1122
                double maxx = -99999.9;
1123
                double maxy = -99999.9;
3934 cbradney 1124
                for (uint ep = 0; ep < docSelectionCount; ++ep)
3394 fschmid 1125
                {
3934 cbradney 1126
                        //PageItem* currItem = view->SelItem.at(ep);
4847 cbradney 1127
                        PageItem* currItem = Doc->m_Selection->itemAt(ep);
3394 fschmid 1128
                        double lw = currItem->lineWidth() / 2.0;
3934 cbradney 1129
                        if (currItem->rotation() != 0)
3394 fschmid 1130
                        {
1131
                                FPointArray pb;
1132
                                pb.resize(0);
3903 cbradney 1133
                                pb.addPoint(FPoint(currItem->xPos()-lw, currItem->yPos()-lw));
3934 cbradney 1134
                                pb.addPoint(FPoint(currItem->width()+lw*2.0, -lw, currItem->xPos()-lw, currItem->yPos()-lw, currItem->rotation(), 1.0, 1.0));
1135
                                pb.addPoint(FPoint(currItem->width()+lw*2.0, currItem->height()+lw*2.0, currItem->xPos()-lw, currItem->yPos()-lw, currItem->rotation(), 1.0, 1.0));
1136
                                pb.addPoint(FPoint(-lw, currItem->height()+lw*2.0, currItem->xPos()-lw, currItem->yPos()-lw, currItem->rotation(), 1.0, 1.0));
3394 fschmid 1137
                                for (uint pc = 0; pc < 4; ++pc)
1138
                                {
1139
                                        minx = QMIN(minx, pb.point(pc).x());
1140
                                        miny = QMIN(miny, pb.point(pc).y());
1141
                                        maxx = QMAX(maxx, pb.point(pc).x());
1142
                                        maxy = QMAX(maxy, pb.point(pc).y());
1143
                                }
1144
                        }
1145
                        else
1146
                        {
3903 cbradney 1147
                                minx = QMIN(minx, currItem->xPos()-lw);
1148
                                miny = QMIN(miny, currItem->yPos()-lw);
3934 cbradney 1149
                                maxx = QMAX(maxx, currItem->xPos()-lw + currItem->width()+lw*2.0);
1150
                                maxy = QMAX(maxy, currItem->yPos()-lw + currItem->height()+lw*2.0);
3394 fschmid 1151
                        }
1152
                }
1153
                gx = minx;
1154
                gy = miny;
1155
                gw = maxx - minx;
1156
                gh = maxy - miny;
3136 fschmid 1157
                int pgNum = pageNs[0]-1;
3724 cbradney 1158
                gx -= Doc->Pages->at(pgNum)->xOffset();
1159
                gy -= Doc->Pages->at(pgNum)->yOffset();
5308 fschmid 1160
                PS_begin_doc(Doc->PageOri, gx, Doc->pageHeight - (gy+gh), gx + gw, Doc->pageHeight - gy, 1*pagemult, false, sep, over);
3136 fschmid 1161
        }
1162
        else
4037 cbradney 1163
        {
5308 fschmid 1164
                PS_begin_doc(Doc->PageOri, 0.0, 0.0, Doc->pageWidth, Doc->pageHeight, pageNs.size()*pagemult, doDev, sep, over);
4037 cbradney 1165
        }
1166
        uint ap=0;
1167
        for (; ap < Doc->MasterPages.count() && !abortExport; ++ap)
3136 fschmid 1168
        {
4037 cbradney 1169
                progressDialog->setOverallProgress(ap);
1170
                progressDialog->setProgress("EMP", ap);
1171
                ScQApp->processEvents();
3136 fschmid 1172
                if (Doc->MasterItems.count() != 0)
1173
                {
1174
                        int Lnr = 0;
1175
                        struct Layer ll;
1176
                        ll.isPrintable = false;
1177
                        ll.LNr = 0;
1178
                        for (uint lam = 0; lam < Doc->Layers.count(); ++lam)
1179
                        {
1180
                                Level2Layer(Doc, &ll, Lnr);
1181
                                if (ll.isPrintable)
1182
                                {
1183
                                        for (uint api = 0; api < Doc->MasterItems.count(); ++api)
1184
                                        {
1185
                                                QString tmps;
1186
                                                PageItem *it = Doc->MasterItems.at(api);
4698 cbradney 1187
                                                if ((it->LayerNr != ll.LNr) || (!it->printEnabled()))
3136 fschmid 1188
                                                        continue;
3200 cbradney 1189
                                                int x = static_cast<int>(Doc->MasterPages.at(ap)->xOffset());
1190
                                                int y = static_cast<int>(Doc->MasterPages.at(ap)->yOffset());
1191
                                                int w = static_cast<int>(Doc->MasterPages.at(ap)->width());
1192
                                                int h = static_cast<int>(Doc->MasterPages.at(ap)->height());
4580 cbradney 1193
                                                double ilw=it->lineWidth();
1194
                                                int x2 = static_cast<int>(it->BoundingX - ilw / 2.0);
1195
                                                int y2 = static_cast<int>(it->BoundingY - ilw / 2.0);
1196
                                                int w2 = static_cast<int>(it->BoundingW + ilw);
1197
                                                int h2 = static_cast<int>(it->BoundingH + ilw);
3136 fschmid 1198
                                                if (!QRect(x, y, w, h).intersects(QRect(x2, y2, w2, h2)))
1199
                                                        continue;
3200 cbradney 1200
                                                if ((it->OwnPage != static_cast<int>(Doc->MasterPages.at(ap)->pageNr())) && (it->OwnPage != -1))
3136 fschmid 1201
                                                        continue;
4698 cbradney 1202
                                                if ((it->asImageFrame()) && (it->PicAvail) && (!it->Pfile.isEmpty()) && (it->printEnabled()) && (!sep) && (farb))
3136 fschmid 1203
                                                        PS_ImageData(it, it->Pfile, it->itemName(), it->IProfile, it->UseEmbedded, Ic);
5685 cbradney 1204
                                                PS_TemplateStart(Doc->MasterPages.at(ap)->pageName() + tmps.setNum(it->ItemNr));
3136 fschmid 1205
                                                ProcessItem(Doc, Doc->MasterPages.at(ap), it, ap+1, sep, farb, Ic, gcr, true);
1206
                                                PS_TemplateEnd();
1207
                                        }
1208
                                }
1209
                                Lnr++;
1210
                        }
1211
                }
1212
        }
1213
        sepac = 0;
1214
        uint aa = 0;
5781 cbradney 1215
        uint a;
4037 cbradney 1216
        while (aa < pageNs.size() && !abortExport)
3136 fschmid 1217
        {
4037 cbradney 1218
                progressDialog->setProgress("EP", aa);
1219
                progressDialog->setOverallProgress(ap+aa);
1220
                ScQApp->processEvents();
3136 fschmid 1221
                a = pageNs[aa]-1;
3934 cbradney 1222
                //if ((!Art) && (view->SelItem.count() != 0))
4847 cbradney 1223
                if ((!Art) && (Doc->m_Selection->count() != 0))
3136 fschmid 1224
                {
1225
                        struct MarginStruct Ma;
1226
                        Ma.Left = gx;
1227
                        Ma.Top = gy;
3724 cbradney 1228
                        Ma.Bottom = Doc->Pages->at(a)->height() - (gy + gh);
1229
                        Ma.Right = Doc->Pages->at(a)->width() - (gx + gw);
1230
                        PS_begin_page(Doc->Pages->at(a)->width(), Doc->Pages->at(a)->height(), &Ma, true);
3136 fschmid 1231
                }
1232
                else
4649 fschmid 1233
                        PS_begin_page(Doc->Pages->at(a)->width(), Doc->Pages->at(a)->height(), &Doc->Pages->at(a)->Margins, doClip);
3136 fschmid 1234
                if (Hm)
1235
                {
3724 cbradney 1236
                        PS_translate(Doc->Pages->at(a)->width(), 0);
3136 fschmid 1237
                        PS_scale(-1, 1);
1238
                }
1239
                if (Vm)
1240
                {
3724 cbradney 1241
                        PS_translate(0, Doc->Pages->at(a)->height());
3136 fschmid 1242
                        PS_scale(1, -1);
1243
                }
1244
                if (sep)
1245
                {
1246
                        if (SepNam == QObject::tr("Black"))
1247
                                PS_plate(0);
1248
                        else if (SepNam == QObject::tr("Cyan"))
1249
                                PS_plate(1);
1250
                        else if (SepNam == QObject::tr("Magenta"))
1251
                                PS_plate(2);
1252
                        else if (SepNam == QObject::tr("Yellow"))
1253
                                PS_plate(3);
1254
                        else if (SepNam == QObject::tr("All"))
1255
                                PS_plate(sepac, spots[sepac]);
1256
                        else
1257
                                PS_plate(4, SepNam);
1258
                }
3724 cbradney 1259
                if (!Doc->Pages->at(a)->MPageNam.isEmpty())
3136 fschmid 1260
                {
1261
                        int h, s, v, k;
5721 avox 1262
                        QCString chstrc;
1263
                        QString chstr;
3136 fschmid 1264
                        int Lnr = 0;
1265
                        struct Layer ll;
1266
                        ll.isPrintable = false;
1267
                        ll.LNr = 0;
3724 cbradney 1268
                        Page* mPage = Doc->MasterPages.at(Doc->MasterNames[Doc->Pages->at(a)->MPageNam]);
3136 fschmid 1269
                        if (Doc->MasterItems.count() != 0)
1270
                        {
1271
                                for (uint lam = 0; lam < Doc->Layers.count(); ++lam)
1272
                                {
1273
                                        Level2Layer(Doc, &ll, Lnr);
1274
                                        if (ll.isPrintable)
1275
                                        {
3724 cbradney 1276
                                                for (uint am = 0; am < Doc->Pages->at(a)->FromMaster.count(); ++am)
3136 fschmid 1277
                                                {
1278
                                                        QString tmps;
3724 cbradney 1279
                                                        PageItem *ite = Doc->Pages->at(a)->FromMaster.at(am);
4698 cbradney 1280
                                                        if ((ite->LayerNr != ll.LNr) || (!ite->printEnabled()))
3136 fschmid 1281
                                                                continue;
3625 avox 1282
                                                        if (!(ite->asTextFrame()) && !(ite->asImageFrame()))
3724 cbradney 1283
                                                                PS_UseTemplate(Doc->Pages->at(a)->MPageNam + tmps.setNum(ite->ItemNr));
3625 avox 1284
                                                        else if (ite->asImageFrame())
3136 fschmid 1285
                                                        {
1286
                                                                PS_save();
5795 jghali 1287
                                                                // JG : replace what seems mostly duplicate code by corresponding function call (#3936)
1288
                                                                ProcessItem(Doc, Doc->Pages->at(a), ite, a, sep, farb, Ic, gcr, false, false, true);
1289
                                                                /*if (!doOverprint)
5320 fschmid 1290
                                                                {
1291
                                                                        if (ite->doOverprint)
1292
                                                                        {
1293
                                                                                PutSeite("true setoverprint\n");
1294
                                                                                PutSeite("true setoverprintmode\n");
1295
                                                                        }
1296
                                                                }
5795 jghali 1297
                                                                PS_translate(ite->xPos() - Doc->Pages->at(a)->xOffset(), Doc->Pages->at(a)->height() -(ite->yPos()) - Doc->Pages->at(a)->yOffset());
3934 cbradney 1298
                                                                if (ite->rotation() != 0)
1299
                                                                        PS_rotate(-ite->rotation());
4546 subik 1300
                                                                if (ite->fillColor() != CommonStrings::None)
3136 fschmid 1301
                                                                {
1302
                                                                        SetClipPath(&ite->PoLine);
1303
                                                                        PS_closepath();
1304
                                                                        SetFarbe(ite->fillColor(), ite->fillShade(), &h, &s, &v, &k, gcr);
1305
                                                                        PS_setcmykcolor_fill(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
1306
                                                                        putColor(ite->fillColor(), ite->fillShade(), true);
1307
                                                                }
1308
                                                                else
1309
                                                                        PS_setcmykcolor_dummy();
1310
                                                                if (ite->imageClip.size() != 0)
1311
                                                                        SetClipPath(&ite->imageClip);
1312
                                                                else
1313
                                                                        SetClipPath(&ite->PoLine);
1314
                                                                PS_closepath();
1315
                                                                PS_clip(false);
1316
                                                                PS_save();
1317
                                                                if (ite->imageFlippedH())
1318
                                                                {
3934 cbradney 1319
                                                                        PS_translate(ite->width(), 0);
3136 fschmid 1320
                                                                        PS_scale(-1, 1);
1321
                                                                }
1322
                                                                if (ite->imageFlippedV())
1323
                                                                {
3934 cbradney 1324
                                                                        PS_translate(0, -ite->height());
3136 fschmid 1325
                                                                        PS_scale(1, -1);
1326
                                                                }
1327
                                                                if ((ite->PicAvail) && (!ite->Pfile.isEmpty()))
1328
                                                                {
3985 cbradney 1329
                                                                        PS_translate(0, -ite->BBoxH*ite->imageYScale());
3136 fschmid 1330
                                                                        if ((!sep) && (farb))
5795 jghali 1331
                                                                                PS_image(ite, ite->imageXOffset(), -ite->imageYOffset(), ite->Pfile, ite->imageXScale(), ite->imageYScale(), ite->IProfile, ite->UseEmbedded, Ic, ite->itemName());
3136 fschmid 1332
                                                                        else
5795 jghali 1333
                                                                                PS_image(ite, ite->imageXOffset(), -ite->imageYOffset(), ite->Pfile, ite->imageXScale(), ite->imageYScale(), ite->IProfile, ite->UseEmbedded, Ic);
3136 fschmid 1334
                                                                }
1335
                                                                PS_restore();
4546 subik 1336
                                                                if (((ite->lineColor() != CommonStrings::None) || (!ite->NamedLStyle.isEmpty())) && (!ite->isTableItem))
3136 fschmid 1337
                                                                {
4580 cbradney 1338
                                                                        if ((ite->NamedLStyle.isEmpty()) && (ite->lineWidth() != 0.0))
3136 fschmid 1339
                                                                        {
1340
                                                                                SetFarbe(ite->lineColor(), ite->lineShade(), &h, &s, &v, &k, gcr);
1341
                                                                                PS_setcmykcolor_stroke(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
4580 cbradney 1342
                                                                                PS_setlinewidth(ite->lineWidth());
3136 fschmid 1343
                                                                                PS_setcapjoin(ite->PLineEnd, ite->PLineJoin);
1344
                                                                                PS_setdash(ite->PLineArt, ite->DashOffset, ite->DashValues);
1345
                                                                                SetClipPath(&ite->PoLine);
1346
                                                                                PS_closepath();
1347
                                                                                putColor(ite->lineColor(), ite->lineShade(), false);
1348
                                                                        }
1349
                                                                        else
1350
                                                                        {
1351
                                                                                multiLine ml = Doc->MLineStyles[ite->NamedLStyle];
1352
                                                                                for (int it = ml.size()-1; it > -1; it--)
1353
                                                                                {
1354
                                                                                        SetFarbe(ml[it].Color, ml[it].Shade, &h, &s, &v, &k, gcr);
1355
                                                                                        PS_setcmykcolor_stroke(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
1356
                                                                                        PS_setlinewidth(ml[it].Width);
1357
                                                                                        PS_setcapjoin(static_cast<Qt::PenCapStyle>(ml[it].LineEnd), static_cast<Qt::PenJoinStyle>(ml[it].LineJoin));
1358
                                                                                        PS_setdash(static_cast<Qt::PenStyle>(ml[it].Dash), 0, dum);
1359
                                                                                        SetClipPath(&ite->PoLine);
1360
                                                                                        PS_closepath();
1361
                                                                                        putColor(ml[it].Color, ml[it].Shade, false);
1362
                                                                                }
1363
                                                                        }
5795 jghali 1364
                                                                }*/
3136 fschmid 1365
                                                                PS_restore();
1366
                                                        }
3625 avox 1367
                                                        else if (ite->asTextFrame())
3136 fschmid 1368
                                                        {
1369
                                                                PS_save();
5320 fschmid 1370
                                                                if (!doOverprint)
1371
                                                                {
1372
                                                                        if (ite->doOverprint)
1373
                                                                        {
1374
                                                                                PutSeite("true setoverprint\n");
1375
                                                                                PutSeite("true setoverprintmode\n");
1376
                                                                        }
1377
                                                                }
4546 subik 1378
                                                                if (ite->fillColor() != CommonStrings::None)
3136 fschmid 1379
                                                                {
1380
                                                                        SetFarbe(ite->fillColor(), ite->fillShade(), &h, &s, &v, &k, gcr);
1381
                                                                        PS_setcmykcolor_fill(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
1382
                                                                }
3903 cbradney 1383
                                                                PS_translate(ite->xPos() - mPage->xOffset(), mPage->height() - (ite->yPos() - mPage->yOffset()));
3934 cbradney 1384
                                                                if (ite->rotation() != 0)
1385
                                                                        PS_rotate(-ite->rotation());
4546 subik 1386
                                                                if ((ite->fillColor() != CommonStrings::None) || (ite->GrType != 0))
3136 fschmid 1387
                                                                {
1388
                                                                        SetClipPath(&ite->PoLine);
1389
                                                                        PS_closepath();
4046 fschmid 1390
                                                                        if (ite->GrType != 0)
1391
                                                                                HandleGradient(ite, ite->width(), ite->height(), gcr);
1392
                                                                        else
1393
                                                                                putColor(ite->fillColor(), ite->fillShade(), true);
3136 fschmid 1394
                                                                }
1395
                                                                if (ite->imageFlippedH())
1396
                                                                {
3934 cbradney 1397
                                                                        PS_translate(ite->width(), 0);
3136 fschmid 1398
                                                                        PS_scale(-1, 1);
1399
                                                                }
1400
                                                                if (ite->imageFlippedV())
1401
                                                                {
3934 cbradney 1402
                                                                        PS_translate(0, -ite->height());
3136 fschmid 1403
                                                                        PS_scale(1, -1);
1404
                                                                }
1405
                                                                setTextSt(Doc, ite, gcr, a, mPage, sep, farb, Ic, true);
4546 subik 1406
                                                                if (((ite->lineColor() != CommonStrings::None) || (!ite->NamedLStyle.isEmpty())) && (!ite->isTableItem))
3136 fschmid 1407
                                                                {
4580 cbradney 1408
                                                                        if ((ite->NamedLStyle.isEmpty()) && (ite->lineWidth() != 0.0))
3136 fschmid 1409
                                                                        {
1410
                                                                                SetFarbe(ite->lineColor(), ite->lineShade(), &h, &s, &v, &k, gcr);
1411
                                                                                PS_setcmykcolor_stroke(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
4580 cbradney 1412
                                                                                PS_setlinewidth(ite->lineWidth());
3136 fschmid 1413
                                                                                PS_setcapjoin(ite->PLineEnd, ite->PLineJoin);
1414
                                                                                PS_setdash(ite->PLineArt, ite->DashOffset, ite->DashValues);
1415
                                                                                SetClipPath(&ite->PoLine);
1416
                                                                                PS_closepath();
1417
                                                                                putColor(ite->lineColor(), ite->lineShade(), false);
1418
                                                                        }
1419
                                                                        else
1420
                                                                        {
1421
                                                                                multiLine ml = Doc->MLineStyles[ite->NamedLStyle];
1422
                                                                                for (int it = ml.size()-1; it > -1; it--)
1423
                                                                                {
1424
                                                                                        SetFarbe(ml[it].Color, ml[it].Shade, &h, &s, &v, &k, gcr);
1425
                                                                                        PS_setcmykcolor_stroke(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
1426
                                                                                        PS_setlinewidth(ml[it].Width);
1427
                                                                                        PS_setcapjoin(static_cast<Qt::PenCapStyle>(ml[it].LineEnd), static_cast<Qt::PenJoinStyle>(ml[it].LineJoin));
1428
                                                                                        PS_setdash(static_cast<Qt::PenStyle>(ml[it].Dash), 0, dum);
1429
                                                                                        SetClipPath(&ite->PoLine);
1430
                                                                                        PS_closepath();
1431
                                                                                        putColor(ml[it].Color, ml[it].Shade, false);
1432
                                                                                }
1433
                                                                        }
1434
                                                                }
1435
                                                                PS_restore();
1436
                                                        }
1437
                                                }
1438
                                        }
3724 cbradney 1439
                                        for (uint am = 0; am < Doc->Pages->at(a)->FromMaster.count(); ++am)
3136 fschmid 1440
                                        {
3724 cbradney 1441
                                                PageItem *ite = Doc->Pages->at(a)->FromMaster.at(am);
3136 fschmid 1442
                                                if (!ite->isTableItem)
1443
                                                        continue;
4698 cbradney 1444
                                                if (ite->printEnabled())
3136 fschmid 1445
                                                {
1446
                                                        PS_save();
5320 fschmid 1447
                                                        if (!doOverprint)
1448
                                                        {
1449
                                                                if (ite->doOverprint)
1450
                                                                {
1451
                                                                        PutSeite("true setoverprint\n");
1452
                                                                        PutSeite("true setoverprintmode\n");
1453
                                                                }
1454
                                                        }
4546 subik 1455
                                                        if (ite->lineColor() != CommonStrings::None)
3136 fschmid 1456
                                                        {
1457
                                                                SetFarbe(ite->lineColor(), ite->lineShade(), &h, &s, &v, &k, gcr);
1458
                                                                PS_setcmykcolor_stroke(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
1459
                                                        }
4580 cbradney 1460
                                                        PS_setlinewidth(ite->lineWidth());
3136 fschmid 1461
                                                        PS_setcapjoin(ite->PLineEnd, ite->PLineJoin);
1462
                                                        PS_setdash(ite->PLineArt, ite->DashOffset, ite->DashValues);
3903 cbradney 1463
                                                        PS_translate(ite->xPos() - mPage->xOffset(), mPage->height() - (ite->yPos() - mPage->yOffset()));
3934 cbradney 1464
                                                        if (ite->rotation() != 0)
1465
                                                                PS_rotate(-ite->rotation());
3136 fschmid 1466
                                                        if ((ite->TopLine) || (ite->RightLine) || (ite->BottomLine) || (ite->LeftLine))
1467
                                                        {
1468
                                                                if (ite->TopLine)
1469
                                                                {
1470
                                                                        PS_moveto(0, 0);
3934 cbradney 1471
                                                                        PS_lineto(ite->width(), 0);
3136 fschmid 1472
                                                                }
1473
                                                                if (ite->RightLine)
1474
                                                                {
3934 cbradney 1475
                                                                        PS_moveto(ite->width(), 0);
1476
                                                                        PS_lineto(ite->width(), -ite->height());
3136 fschmid 1477
                                                                }
1478
                                                                if (ite->BottomLine)
1479
                                                                {
3934 cbradney 1480
                                                                        PS_moveto(0, -ite->height());
1481
                                                                        PS_lineto(ite->width(), -ite->height());
3136 fschmid 1482
                                                                }
1483
                                                                if (ite->LeftLine)
1484
                                                                {
1485
                                                                        PS_moveto(0, 0);
3934 cbradney 1486
                                                                        PS_lineto(0, -ite->height());
3136 fschmid 1487
                                                                }
1488
                                                                putColor(ite->lineColor(), ite->lineShade(), false);
1489
                                                        }
1490
                                                        PS_restore();
1491
                                                }
1492
                                        }
1493
                                        Lnr++;
1494
                                }
1495
                        }
1496
                }
4037 cbradney 1497
                if (!abortExport)
1498
                        ProcessPage(Doc, Doc->Pages->at(a), a+1, sep, farb, Ic, gcr);
1499
                if (!abortExport)
1500
                        PS_end_page();
3136 fschmid 1501
                if (sep)
1502
                {
1503
                        if (SepNam != QObject::tr("All"))
1504
                                aa++;
1505
                        else
1506
                        {
1507
                                if (sepac == static_cast<int>(spots.count()-1))
1508
                                {
1509
                                        aa++;
1510
                                        sepac = 0;
1511
                                }
1512
                                else
1513
                                        sepac++;
1514
                        }
1515
                }
1516
                else
1517
                        aa++;
1518
        }
1519
        PS_close();
4037 cbradney 1520
        if (usingGUI) progressDialog->close();
1521
        if (!abortExport)
1522
                return 0;
1523
        else
1524
                return 2; //CB Lets leave 1 for general error condition
3136 fschmid 1525
}
1526
 
5795 jghali 1527
void PSLib::ProcessItem(ScribusDoc* Doc, Page* a, PageItem* c, uint PNr, bool sep, bool farb, bool ic, bool gcr, bool master, bool embedded, bool useTemplate)
3136 fschmid 1528
{
1529
        int h, s, v, k, tsz;
5732 avox 1530
        int d;
4689 mrdocs 1531
        ScText *hl;
3136 fschmid 1532
        QValueList<double> dum;
1533
        dum.clear();
5721 avox 1534
        QString tmps, chstr;
4698 cbradney 1535
        if (c->printEnabled())
3136 fschmid 1536
        {
4477 fschmid 1537
                fillRule = true;
3136 fschmid 1538
                PS_save();
5320 fschmid 1539
                if (!doOverprint)
1540
                {
1541
                        if (c->doOverprint)
1542
                        {
1543
                                PutSeite("true setoverprint\n");
1544
                                PutSeite("true setoverprintmode\n");
1545
                        }
1546
                }
4546 subik 1547
                if (c->fillColor() != CommonStrings::None)
3136 fschmid 1548
                {
1549
                        SetFarbe(c->fillColor(), c->fillShade(), &h, &s, &v, &k, gcr);
1550
                        PS_setcmykcolor_fill(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
1551
                }
4546 subik 1552
                if (c->lineColor() != CommonStrings::None)
3136 fschmid 1553
                {
1554
                        SetFarbe(c->lineColor(), c->lineShade(), &h, &s, &v, &k, gcr);
1555
                        PS_setcmykcolor_stroke(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
1556
                }
4580 cbradney 1557
                PS_setlinewidth(c->lineWidth());
3136 fschmid 1558
                PS_setcapjoin(c->PLineEnd, c->PLineJoin);
1559
                PS_setdash(c->PLineArt, c->DashOffset, c->DashValues);
1560
                if (!embedded)
1561
                {
3903 cbradney 1562
                        PS_translate(c->xPos() - a->xOffset(), a->height() - (c->yPos() - a->yOffset()));
3136 fschmid 1563
                }
3934 cbradney 1564
                if (c->rotation() != 0)
1565
                        PS_rotate(-c->rotation());
3136 fschmid 1566
                switch (c->itemType())
1567
                {
1568
                case PageItem::ImageFrame:
1569
                        if (master)
1570
                                break;
4546 subik 1571
                        if ((c->fillColor() != CommonStrings::None) || (c->GrType != 0))
3136 fschmid 1572
                        {
1573
                                SetClipPath(&c->PoLine);
1574
                                PS_closepath();
5685 cbradney 1575
                                if ((c->GrType != 0) && (a->pageName().isEmpty()))
3934 cbradney 1576
                                        HandleGradient(c, c->width(), c->height(), gcr);
3136 fschmid 1577
                                else
1578
                                        putColor(c->fillColor(), c->fillShade(), true);
1579
                                PS_newpath();
1580
                        }
1581
                        PS_save();
1582
                        if (c->imageClip.size() != 0)
4744 fschmid 1583
                        {
3136 fschmid 1584
                                SetClipPath(&c->imageClip);
4744 fschmid 1585
                                PS_closepath();
1586
                                PS_clip(true);
1587
                        }
1588
                        SetClipPath(&c->PoLine);
3136 fschmid 1589
                        PS_closepath();
1590
                        PS_clip(true);
1591
                        if (c->imageFlippedH())
1592
                        {
3934 cbradney 1593
                                PS_translate(c->width(), 0);
3136 fschmid 1594
                                PS_scale(-1, 1);
1595
                        }
1596
                        if (c->imageFlippedV())
1597
                        {
3934 cbradney 1598
                                PS_translate(0, -c->height());
3136 fschmid 1599
                                PS_scale(1, -1);
1600
                        }
1601
                        if ((c->PicAvail) && (!c->Pfile.isEmpty()))
1602
                        {
3985 cbradney 1603
                                PS_translate(0, -c->BBoxH*c->imageYScale());
5795 jghali 1604
                                if (((!a->pageName().isEmpty()) && (!sep) && (farb)) || useTemplate)
4335 fschmid 1605
                                        PS_image(c, /*-c->BBoxX+*/c->imageXOffset(), -c->imageYOffset(), c->Pfile, c->imageXScale(), c->imageYScale(), c->IProfile, c->UseEmbedded, ic, c->itemName());
3136 fschmid 1606
                                else
4335 fschmid 1607
                                        PS_image(c, /*-c->BBoxX+*/c->imageXOffset(), -c->imageYOffset(), c->Pfile, c->imageXScale(), c->imageYScale(), c->IProfile, c->UseEmbedded, ic);
3136 fschmid 1608
                        }
1609
                        PS_restore();
4546 subik 1610
                        if (((c->lineColor() != CommonStrings::None) || (!c->NamedLStyle.isEmpty())) && (!c->isTableItem))
3136 fschmid 1611
                        {
4580 cbradney 1612
                                if ((c->NamedLStyle.isEmpty()) && (c->lineWidth() != 0.0))
3136 fschmid 1613
                                {
1614
                                        SetFarbe(c->lineColor(), c->lineShade(), &h, &s, &v, &k, gcr);
1615
                                        PS_setcmykcolor_stroke(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
4580 cbradney 1616
                                        PS_setlinewidth(c->lineWidth());
3136 fschmid 1617
                                        PS_setcapjoin(c->PLineEnd, c->PLineJoin);
1618
                                        PS_setdash(c->PLineArt, c->DashOffset, c->DashValues);
1619
                                        SetClipPath(&c->PoLine);
1620
                                        PS_closepath();
1621
                                        putColor(c->lineColor(), c->lineShade(), false);
1622
                                }
1623
                                else
1624
                                {
1625
                                        multiLine ml = Doc->MLineStyles[c->NamedLStyle];
1626
                                        for (int it = ml.size()-1; it > -1; it--)
1627
                                        {
1628
                                                SetFarbe(ml[it].Color, ml[it].Shade, &h, &s, &v, &k, gcr);
1629
                                                PS_setcmykcolor_stroke(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
1630
                                                PS_setlinewidth(ml[it].Width);
1631
                                                PS_setcapjoin(static_cast<Qt::PenCapStyle>(ml[it].LineEnd), static_cast<Qt::PenJoinStyle>(ml[it].LineJoin));
1632
                                                PS_setdash(static_cast<Qt::PenStyle>(ml[it].Dash), 0, dum);
1633
                                                SetClipPath(&c->PoLine);
1634
                                                PS_closepath();
1635
                                                putColor(ml[it].Color, ml[it].Shade, false);
1636
                                        }
1637
                                }
1638
                        }
1639
                        break;
1640
                case PageItem::TextFrame:
1641
                        if (master)
1642
                                break;
1643
                        if (c->isBookmark)
1644
                        {
1645
                                QString bm = "";
1646
                                QString cc;
5387 avox 1647
                                for (int d = 0; d < c->itemText.length(); ++d)
3136 fschmid 1648
                                {
5184 avox 1649
                                        if ((c->itemText.text(d) == QChar(13)) || (c->itemText.text(d) == QChar(10)) || (c->itemText.text(d) == QChar(28)))
3136 fschmid 1650
                                                break;
5184 avox 1651
                                        bm += "\\"+cc.setNum(QMAX(c->itemText.text(d).unicode(), 32), 8);
3136 fschmid 1652
                                }
3200 cbradney 1653
                                PDF_Bookmark(bm, a->pageNr()+1);
3136 fschmid 1654
                        }
4084 cbradney 1655
                        if (c->isAnnotation())
3136 fschmid 1656
                        {
1657
                                QString bm = "";
1658
                                QString cc;
5387 avox 1659
                                for (int d = 0; d < c->itemText.length(); ++d)
3136 fschmid 1660
                                {
5184 avox 1661
                                        bm += "\\"+cc.setNum(QMAX(c->itemText.text(d).unicode(), 32), 8);
3136 fschmid 1662
                                }
3934 cbradney 1663
                                PDF_Annotation(bm, 0, 0, c->width(), -c->height());
3136 fschmid 1664
                                break;
1665
                        }
4546 subik 1666
                        if ((c->fillColor() != CommonStrings::None) || (c->GrType != 0))
3136 fschmid 1667
                        {
1668
                                SetClipPath(&c->PoLine);
1669
                                PS_closepath();
5685 cbradney 1670
                                if ((c->GrType != 0) && (a->pageName().isEmpty()))
3934 cbradney 1671
                                        HandleGradient(c, c->width(), c->height(), gcr);
3136 fschmid 1672
                                else
1673
                                        putColor(c->fillColor(), c->fillShade(), true);
1674
                        }
1675
                        if (c->imageFlippedH())
1676
                        {
3934 cbradney 1677
                                PS_translate(c->width(), 0);
3136 fschmid 1678
                                PS_scale(-1, 1);
1679
                        }
1680
                        if (c->imageFlippedV())
1681
                        {
3934 cbradney 1682
                                PS_translate(0, -c->height());
3136 fschmid 1683
                                PS_scale(1, -1);
1684
                        }
1685
                        setTextSt(Doc, c, gcr, PNr-1, a, sep, farb, ic, master);
4546 subik 1686
                        if (((c->lineColor() != CommonStrings::None) || (!c->NamedLStyle.isEmpty())) && (!c->isTableItem))
3136 fschmid 1687
                        {
1688
                                SetFarbe(c->lineColor(), c->lineShade(), &h, &s, &v, &k, gcr);
1689
                                PS_setcmykcolor_stroke(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
4580 cbradney 1690
                                PS_setlinewidth(c->lineWidth());
3136 fschmid 1691
                                PS_setcapjoin(c->PLineEnd, c->PLineJoin);
1692
                                PS_setdash(c->PLineArt, c->DashOffset, c->DashValues);
4580 cbradney 1693
                                if ((c->NamedLStyle.isEmpty()) && (c->lineWidth() != 0.0))
3136 fschmid 1694
                                {
1695
                                        SetClipPath(&c->PoLine);
1696
                                        PS_closepath();
1697
                                        putColor(c->lineColor(), c->lineShade(), false);
1698
                                }
1699
                                else
1700
                                {
1701
                                        multiLine ml = Doc->MLineStyles[c->NamedLStyle];
1702
                                        for (int it = ml.size()-1; it > -1; it--)
1703
                                        {
1704
                                                SetFarbe(ml[it].Color, ml[it].Shade, &h, &s, &v, &k, gcr);
1705
                                                PS_setcmykcolor_stroke(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
1706
                                                PS_setlinewidth(ml[it].Width);
1707
                                                PS_setcapjoin(static_cast<Qt::PenCapStyle>(ml[it].LineEnd), static_cast<Qt::PenJoinStyle>(ml[it].LineJoin));
1708
                                                PS_setdash(static_cast<Qt::PenStyle>(ml[it].Dash), 0, dum);
1709
                                                SetClipPath(&c->PoLine);
1710
                                                PS_closepath();
1711
                                                putColor(ml[it].Color, ml[it].Shade, false);
1712
                                        }
1713
                                }
1714
                        }
1715
                        break;
1716
                case PageItem::Line:
4580 cbradney 1717
                        if ((c->NamedLStyle.isEmpty()) && (c->lineWidth() != 0.0))
3136 fschmid 1718
                        {
1719
                                PS_moveto(0, 0);
3934 cbradney 1720
                                PS_lineto(c->width(), 0);
3136 fschmid 1721
                                putColor(c->lineColor(), c->lineShade(), false);
1722
                        }
1723
                        else
1724
                        {
1725
                                multiLine ml = Doc->MLineStyles[c->NamedLStyle];
1726
                                for (int it = ml.size()-1; it > -1; it--)
1727
                                {
1728
                                        SetFarbe(ml[it].Color, ml[it].Shade, &h, &s, &v, &k, gcr);
1729
                                        PS_setcmykcolor_stroke(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
1730
                                        PS_setlinewidth(ml[it].Width);
1731
                                        PS_setcapjoin(static_cast<Qt::PenCapStyle>(ml[it].LineEnd), static_cast<Qt::PenJoinStyle>(ml[it].LineJoin));
1732
                                        PS_setdash(static_cast<Qt::PenStyle>(ml[it].Dash), 0, dum);
1733
                                        PS_moveto(0, 0);
3934 cbradney 1734
                                        PS_lineto(c->width(), 0);
3136 fschmid 1735
                                        putColor(ml[it].Color, ml[it].Shade, false);
1736
                                }
1737
                        }
4061 craig 1738
                        if (c->startArrowIndex() != 0)
3136 fschmid 1739
                        {
1740
                                QWMatrix arrowTrans;
4061 craig 1741
                                FPointArray arrow = (*Doc->arrowStyles.at(c->startArrowIndex()-1)).points.copy();
3136 fschmid 1742
                                arrowTrans.translate(0, 0);
4580 cbradney 1743
                                arrowTrans.scale(c->lineWidth(), c->lineWidth());
3136 fschmid 1744
                                arrowTrans.scale(-1,1);
1745
                                arrow.map(arrowTrans);
1746
                                SetFarbe(c->lineColor(), c->lineShade(), &h, &s, &v, &k, gcr);
1747
                                PS_setcmykcolor_fill(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
1748
                                PS_newpath();
1749
                                SetClipPath(&arrow);
1750
                                PS_closepath();
1751
                                putColor(c->lineColor(), c->lineShade(), true);
1752
                        }
4061 craig 1753
                        if (c->endArrowIndex() != 0)
3136 fschmid 1754
                        {
1755
                                QWMatrix arrowTrans;
4061 craig 1756
                                FPointArray arrow = (*Doc->arrowStyles.at(c->endArrowIndex()-1)).points.copy();
3934 cbradney 1757
                                arrowTrans.translate(c->width(), 0);
4580 cbradney 1758
                                arrowTrans.scale(c->lineWidth(), c->lineWidth());
3136 fschmid 1759
                                arrow.map(arrowTrans);
1760
                                SetFarbe(c->lineColor(), c->lineShade(), &h, &s, &v, &k, gcr);
1761
                                PS_setcmykcolor_fill(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
1762
                                PS_newpath();
1763
                                SetClipPath(&arrow);
1764
                                PS_closepath();
1765
                                putColor(c->lineColor(), c->lineShade(), true);
1766
                        }
1767
                        break;
1768
                /* OBSOLETE CR 2005-02-06
1769
                case 1:
1770
                case 3:
1771
                */
3232 cbradney 1772
                case PageItem::ItemType1:
1773
                case PageItem::ItemType3:
3136 fschmid 1774
                case PageItem::Polygon:
4546 subik 1775
                        if ((c->fillColor() != CommonStrings::None) || (c->GrType != 0))
3136 fschmid 1776
                        {
1777
                                SetClipPath(&c->PoLine);
1778
                                PS_closepath();
4477 fschmid 1779
                                fillRule = c->fillRule;
3136 fschmid 1780
                                if (c->GrType != 0)
3934 cbradney 1781
                                        HandleGradient(c, c->width(), c->height(), gcr);
3136 fschmid 1782
                                else
1783
                                        putColor(c->fillColor(), c->fillShade(), true);
1784
                        }
4546 subik 1785
                        if ((c->lineColor() != CommonStrings::None) || (!c->NamedLStyle.isEmpty()))
3136 fschmid 1786
                        {
4580 cbradney 1787
                                if ((c->NamedLStyle.isEmpty()) && (c->lineWidth() != 0.0))
3136 fschmid 1788
                                {
1789
                                        SetClipPath(&c->PoLine);
1790
                                        PS_closepath();
1791
                                        putColor(c->lineColor(), c->lineShade(), false);
1792
                                }
1793
                                else
1794
                                {
1795
                                        multiLine ml = Doc->MLineStyles[c->NamedLStyle];
1796
                                        for (int it = ml.size()-1; it > -1; it--)
1797
                                        {
1798
                                                SetFarbe(ml[it].Color, ml[it].Shade, &h, &s, &v, &k, gcr);
1799
                                                PS_setcmykcolor_stroke(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
1800
                                                PS_setlinewidth(ml[it].Width);
1801
                                                PS_setcapjoin(static_cast<Qt::PenCapStyle>(ml[it].LineEnd), static_cast<Qt::PenJoinStyle>(ml[it].LineJoin));
1802
                                                PS_setdash(static_cast<Qt::PenStyle>(ml[it].Dash), 0, dum);
1803
                                                SetClipPath(&c->PoLine);
1804
                                                PS_closepath();
1805
                                                putColor(ml[it].Color, ml[it].Shade, false);
1806
                                        }
1807
                                }
1808
                        }
1809
                        break;
1810
                case PageItem::PolyLine:
4546 subik 1811
                        if ((c->fillColor() != CommonStrings::None) || (c->GrType != 0))
3136 fschmid 1812
                        {
1813
                                SetClipPath(&c->PoLine);
1814
                                PS_closepath();
1815
                                if (c->GrType != 0)
3934 cbradney 1816
                                        HandleGradient(c, c->width(), c->height(), gcr);
3136 fschmid 1817
                                else
1818
                                        putColor(c->fillColor(), c->fillShade(), true);
1819
                                PS_newpath();
1820
                        }
4546 subik 1821
                        if ((c->lineColor() != CommonStrings::None) || (!c->NamedLStyle.isEmpty()))
3136 fschmid 1822
                        {
4580 cbradney 1823
                                if ((c->NamedLStyle.isEmpty()) && (c->lineWidth() != 0.0))
3136 fschmid 1824
                                {
1825
                                        SetClipPath(&c->PoLine, false);
3339 fschmid 1826
                                        putColor(c->lineColor(), c->lineShade(), false);
3136 fschmid 1827
                                }
3339 fschmid 1828
                                else
1829
                                {
1830
                                        multiLine ml = Doc->MLineStyles[c->NamedLStyle];
1831
                                        for (int it = ml.size()-1; it > -1; it--)
1832
                                        {
1833
                                                SetFarbe(ml[it].Color, ml[it].Shade, &h, &s, &v, &k, gcr);
1834
                                                PS_setcmykcolor_stroke(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
1835
                                                PS_setlinewidth(ml[it].Width);
1836
                                                PS_setcapjoin(static_cast<Qt::PenCapStyle>(ml[it].LineEnd), static_cast<Qt::PenJoinStyle>(ml[it].LineJoin));
1837
                                                PS_setdash(static_cast<Qt::PenStyle>(ml[it].Dash), 0, dum);
1838
                                                SetClipPath(&c->PoLine, false);
1839
                                                putColor(ml[it].Color, ml[it].Shade, false);
1840
                                        }
1841
                                }
3136 fschmid 1842
                        }
4061 craig 1843
                        if (c->startArrowIndex() != 0)
3136 fschmid 1844
                        {
1845
                                FPoint Start = c->PoLine.point(0);
1846
                                for (uint xx = 1; xx < c->PoLine.size(); xx += 2)
1847
                                {
1848
                                        FPoint Vector = c->PoLine.point(xx);
1849
                                        if ((Start.x() != Vector.x()) || (Start.y() != Vector.y()))
1850
                                        {
1851
                                                double r = atan2(Start.y()-Vector.y(),Start.x()-Vector.x())*(180.0/M_PI);
1852
                                                QWMatrix arrowTrans;
4061 craig 1853
                                                FPointArray arrow = (*Doc->arrowStyles.at(c->startArrowIndex()-1)).points.copy();
3136 fschmid 1854
                                                arrowTrans.translate(Start.x(), Start.y());
1855
                                                arrowTrans.rotate(r);
4580 cbradney 1856
                                                arrowTrans.scale(c->lineWidth(), c->lineWidth());
3136 fschmid 1857
                                                arrow.map(arrowTrans);
1858
                                                SetFarbe(c->lineColor(), c->lineShade(), &h, &s, &v, &k, gcr);
1859
                                                PS_setcmykcolor_fill(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
1860
                                                PS_newpath();
1861
                                                SetClipPath(&arrow);
1862
                                                PS_closepath();
1863
                                                putColor(c->lineColor(), c->lineShade(), true);
1864
                                                break;
1865
                                        }
1866
                                }
1867
                        }
4061 craig 1868
                        if (c->endArrowIndex() != 0)
3136 fschmid 1869
                        {
1870
                                FPoint End = c->PoLine.point(c->PoLine.size()-2);
1871
                                for (uint xx = c->PoLine.size()-1; xx > 0; xx -= 2)
1872
                                {
1873
                                        FPoint Vector = c->PoLine.point(xx);
1874
                                        if ((End.x() != Vector.x()) || (End.y() != Vector.y()))
1875
                                        {
1876
                                                double r = atan2(End.y()-Vector.y(),End.x()-Vector.x())*(180.0/M_PI);
1877
                                                QWMatrix arrowTrans;
4061 craig 1878
                                                FPointArray arrow = (*Doc->arrowStyles.at(c->endArrowIndex()-1)).points.copy();
3136 fschmid 1879
                                                arrowTrans.translate(End.x(), End.y());
1880
                                                arrowTrans.rotate(r);
4580 cbradney 1881
                                                arrowTrans.scale(c->lineWidth(), c->lineWidth());
3136 fschmid 1882
                                                arrow.map(arrowTrans);
1883
                                                SetFarbe(c->lineColor(), c->lineShade(), &h, &s, &v, &k, gcr);
1884
                                                PS_setcmykcolor_fill(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
1885
                                                PS_newpath();
1886
                                                SetClipPath(&arrow);
1887
                                                PS_closepath();
1888
                                                putColor(c->lineColor(), c->lineShade(), true);
1889
                                                break;
1890
                                        }
1891
                                }
1892
                        }
1893
                        break;
1894
                case PageItem::PathText:
1895
                        if (c->PoShow)
1896
                        {
1897
                                if (c->PoLine.size() > 3)
1898
                                {
1899
                                        PS_save();
4580 cbradney 1900
                                        if ((c->NamedLStyle.isEmpty()) && (c->lineWidth() != 0.0))
3136 fschmid 1901
                    &