Subversion Repositories Scribus

Rev

Rev 5387 | Rev 5880 | 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
*/
638 fschmid 7
/***************************************************************************
8
 *                                                                         *
9
 *   This program is free software; you can redistribute it and/or modify  *
10
 *   it under the terms of the GNU General Public License as published by  *
11
 *   the Free Software Foundation; either version 2 of the License, or     *
12
 *   (at your option) any later version.                                   *
13
 *                                                                         *
14
 ***************************************************************************/
3 paul 15
#include "pdfopts.h"
16
#include "pdfopts.moc"
838 cbradney 17
 
3 paul 18
#include "customfdialog.h"
2856 cbradney 19
#include "prefsmanager.h"
415 Franz 20
#include "prefsfile.h"
806 cbradney 21
#include "units.h"
1972 craig 22
#include "pdfoptions.h"
2533 craig 23
#include "util.h"
2952 cbradney 24
#include "commonstrings.h"
2688 craig 25
#include "scconfig.h"
128 Franz 26
 
3 paul 27
#ifdef HAVE_CMS
28
extern bool CMSuse;
29
#endif
30
extern bool CMSavail;
31
 
4260 craig 32
PDFExportDialog::PDFExportDialog( QWidget* parent, const QString & docFileName,
5387 avox 33
                                                                  const QMap<QString, int > & DocFonts,
4260 craig 34
                                                                  ScribusView *currView, PDFOptions & pdfOptions,
35
                                                                  const QValueList<PDFPresentationData> & Eff,
36
                                                                  const ProfilesL & PDFXProfiles, const SCFonts &AllFonts,
37
                                                                  double unitRatio, const ProfilesL & printerProfiles)
38
        : QDialog( parent, "pdf", true, 0 ),
39
        EffVal(Eff),
40
        Opts(pdfOptions),
41
        docUnitRatio(unitRatio),
42
        cmsDescriptorName(""),
43
        components(3),
44
        appPrinterProfiles(printerProfiles)
3 paul 45
{
1987 cbradney 46
        setCaption( tr( "Save as PDF" ) );
245 Franz 47
        setIcon(loadIcon("AppIcon.png"));
4259 craig 48
        PDFExportLayout = new QVBoxLayout( this );
49
        PDFExportLayout->setSpacing( 5 );
50
        PDFExportLayout->setMargin( 10 );
3082 fschmid 51
        Name = new QGroupBox( this, "GroupBox" );
52
        Name->setTitle( tr( "O&utput to File:" ) );
53
        Name->setColumnLayout(0, Qt::Vertical );
54
        Name->layout()->setSpacing( 5 );
55
        Name->layout()->setMargin( 10 );
56
        NameLayout = new QGridLayout( Name->layout() );
57
        NameLayout->setAlignment( Qt::AlignTop );
58
        fileNameLineEdit = new QLineEdit( Name, "fileNameLineEdit" );
2727 cbradney 59
        fileNameLineEdit->setMinimumSize( QSize( 268, 22 ) );
4260 craig 60
        if (!Opts.Datei.isEmpty())
61
                fileNameLineEdit->setText(Opts.Datei);
167 Franz 62
        else
63
        {
2856 cbradney 64
                PrefsContext* dirs = PrefsManager::instance()->prefsFile->getContext("dirs");
2727 cbradney 65
                QFileInfo fi = QFileInfo(docFileName);
415 Franz 66
                QString pdfdir = dirs->get("pdf", fi.dirPath());
67
                if (pdfdir.right(1) != "/")
68
                        pdfdir += "/";
2727 cbradney 69
                fileNameLineEdit->setText(pdfdir+fi.baseName()+".pdf");
167 Franz 70
        }
3082 fschmid 71
        NameLayout->addWidget( fileNameLineEdit, 0, 0 );
72
        FileC = new QToolButton( Name, "FileC" );
341 Franz 73
        FileC->setText( tr( "Cha&nge..." ) );
245 Franz 74
        FileC->setMinimumSize( QSize( 88, 24 ) );
3082 fschmid 75
        NameLayout->addWidget( FileC, 0, 1 );
3085 mrdocs 76
        multiFile = new QCheckBox( tr( "Output one file for eac&h page" ), Name, "multiFile" );
4260 craig 77
        multiFile->setChecked(Opts.doMultiFile);
3082 fschmid 78
        NameLayout->addWidget( multiFile, 1, 0 );
4259 craig 79
        PDFExportLayout->addWidget( Name );
2727 cbradney 80
        Options = new TabPDFOptions( this, pdfOptions, AllFonts, PDFXProfiles, DocFonts,
2965 cbradney 81
                                                                Eff, currView->Doc->unitIndex(), currView->Doc->pageHeight,
2727 cbradney 82
                                                                currView->Doc->pageWidth, currView );
4259 craig 83
        PDFExportLayout->addWidget( Options );
245 Franz 84
        Layout7 = new QHBoxLayout;
85
        Layout7->setSpacing( 5 );
86
        Layout7->setMargin( 0 );
87
        QSpacerItem* spacer_2 = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
88
        Layout7->addItem( spacer_2 );
341 Franz 89
        OK = new QPushButton( tr( "&Save" ), this, "OK" );
245 Franz 90
        OK->setAutoDefault( true );
91
        OK->setDefault( true );
92
        Layout7->addWidget( OK );
2952 cbradney 93
        Cancel = new QPushButton( CommonStrings::tr_Cancel, this, "Cancel" );
245 Franz 94
        Layout7->addWidget( Cancel );
4259 craig 95
        PDFExportLayout->addLayout( Layout7 );
4260 craig 96
        if ((Opts.Version == PDFOptions::PDFVersion_X3) && (Options->InfoString->text().isEmpty()))
3388 fschmid 97
                OK->setEnabled(false);
338 Franz 98
        resize(sizeHint());
99
//      setMaximumSize( sizeHint() );
3085 mrdocs 100
//tooltips
4310 cbradney 101
        QToolTip::add( multiFile, "<qt>" + tr( "This enables exporting one individually named PDF file for each page in the document. Page numbers are added automatically. This is most useful for imposing PDF for commercial printing.") + "</qt>" );
4810 mrdocs 102
        QToolTip::add( OK, "<qt>" + tr( "The save button will be disabled if you are trying to export PDF/X-3 and the info string is missing from the PDF/X-3 tab.") + "</qt>" );
245 Franz 103
        // signals and slots connections
104
        connect( FileC, SIGNAL( clicked() ), this, SLOT( ChangeFile() ) );
248 Franz 105
        connect( OK, SIGNAL( clicked() ), this, SLOT( DoExport() ) );
245 Franz 106
        connect( Cancel, SIGNAL( clicked() ), this, SLOT( reject() ) );
2727 cbradney 107
        connect( fileNameLineEdit, SIGNAL( lostFocus() ), this, SLOT( fileNameChanged() ) );
108
        connect( fileNameLineEdit, SIGNAL( returnPressed() ), this, SLOT( fileNameChanged() ) );
3388 fschmid 109
        connect( Options, SIGNAL(noInfo()), this, SLOT(disableSave()));
110
        connect( Options, SIGNAL(hasInfo()), this, SLOT(enableSave()));
3 paul 111
}
112
 
4259 craig 113
void PDFExportDialog::enableSave()
3388 fschmid 114
{
115
        OK->setEnabled(true);
116
}
117
 
4259 craig 118
void PDFExportDialog::disableSave()
3388 fschmid 119
{
120
        OK->setEnabled(false);
121
}
122
 
4259 craig 123
void PDFExportDialog::DoExport()
248 Franz 124
{
2727 cbradney 125
        QString fn = fileNameLineEdit->text();
248 Franz 126
        if (overwrite(this, fn))
337 Franz 127
        {
1307 fschmid 128
                EffVal = Options->EffVal;
129
                EffVal[Options->PgSel].pageViewDuration = Options->PageTime->value();
130
                EffVal[Options->PgSel].pageEffectDuration = Options->EffectTime->value();
131
                EffVal[Options->PgSel].effectType = Options->EffectType->currentItem();
132
                EffVal[Options->PgSel].Dm = Options->EDirection->currentItem();
133
                EffVal[Options->PgSel].M = Options->EDirection_2->currentItem();
134
                EffVal[Options->PgSel].Di = Options->EDirection_2_2->currentItem();
4260 craig 135
                Opts.LPISettings[Options->SelLPIcolor].Frequency = Options->LPIfreq->value();
136
                Opts.LPISettings[Options->SelLPIcolor].Angle = Options->LPIangle->value();
137
                Opts.LPISettings[Options->SelLPIcolor].SpotFunc = Options->LPIfunc->currentItem();
248 Franz 138
                accept();
337 Franz 139
        }
248 Franz 140
        else
141
                return;
142
}
143
 
4259 craig 144
void PDFExportDialog::ChangeFile()
3 paul 145
{
146
        QString fn;
2856 cbradney 147
        PrefsContext* dirs = PrefsManager::instance()->prefsFile->getContext("dirs");
415 Franz 148
        QString wdir = dirs->get("pdf", ".");
5846 jghali 149
        CustomFDialog dia(this, wdir, tr("Save as"), tr("PDF Files (*.pdf);;All Files (*)"), fdNone);
2877 cbradney 150
        if (!fileNameLineEdit->text().isEmpty())
2727 cbradney 151
                dia.setSelection(fileNameLineEdit->text());
3 paul 152
        if (dia.exec() == QDialog::Accepted)
415 Franz 153
        {
3 paul 154
                fn = dia.selectedFile();
415 Franz 155
                dirs->set("pdf", fn.left(fn.findRev("/")));
156
        }
3 paul 157
        else
158
                return;
2727 cbradney 159
        fileNameLineEdit->setText(fn);
3 paul 160
}
2725 cbradney 161
 
4259 craig 162
void PDFExportDialog::fileNameChanged()
2725 cbradney 163
{
2834 cbradney 164
        fileNameLineEdit->setText(checkFileExtension(fileNameLineEdit->text(),"pdf"));
2725 cbradney 165
}
3059 cbradney 166
 
4259 craig 167
void PDFExportDialog::updateDocOptions()
3059 cbradney 168
{
4260 craig 169
        Opts.Datei = fileNameLineEdit->text();
170
        Opts.doMultiFile = multiFile->isChecked();
171
        Opts.Thumbnails = Options->CheckBox1->isChecked();
172
        Opts.Compress = Options->Compression->isChecked();
173
        Opts.CompressMethod = Options->CMethod->currentItem();
174
        Opts.Quality = Options->CQuality->currentItem();
175
        Opts.Resolution = Options->Resolution->value();
176
        Opts.EmbedList = Options->FontsToEmbed;
177
        Opts.SubsetList = Options->FontsToSubset;
178
        Opts.RecalcPic = Options->DSColor->isChecked();
179
        Opts.PicRes = Options->ValC->value();
180
        Opts.Bookmarks = Options->CheckBM->isChecked();
181
        Opts.Binding = Options->ComboBind->currentItem();
182
        Opts.MirrorH = Options->MirrorH->isOn();
183
        Opts.MirrorV = Options->MirrorV->isOn();
4649 fschmid 184
        Opts.doClip = Options->ClipMarg->isChecked();
4260 craig 185
        Opts.RotateDeg = Options->RotateDeg->currentItem() * 90;
186
        Opts.PresentMode = Options->CheckBox10->isChecked();
187
        Opts.PresentVals = EffVal;
188
        Opts.Articles = Options->Article->isChecked();
189
        Opts.Encrypt = Options->Encry->isChecked();
190
        Opts.UseLPI = Options->UseLPI->isChecked();
191
        Opts.useLayers = Options->useLayers->isChecked();
192
        Opts.UseSpotColors = !Options->useSpot->isChecked();
5320 fschmid 193
        Opts.doOverprint = Options->overprintMode->isChecked();
4260 craig 194
        Opts.displayBookmarks = Options->useBookmarks->isChecked();
195
        Opts.displayFullscreen = Options->useFullScreen->isChecked();
196
        Opts.displayLayers = Options->useLayers2->isChecked();
197
        Opts.displayThumbs = Options->useThumbnails->isChecked();
198
        Opts.hideMenuBar = Options->hideMenuBar->isChecked();
199
        Opts.hideToolBar = Options->hideToolBar->isChecked();
200
        Opts.fitWindow = Options->fitWindow->isChecked();
4197 fschmid 201
        int pgl = PDFOptions::SinglePage;
202
        if (Options->singlePage->isChecked())
203
                pgl = PDFOptions::SinglePage;
204
        else if (Options->continuousPages->isChecked())
205
                pgl = PDFOptions::OneColumn;
206
        else if (Options->doublePageLeft->isChecked())
207
                pgl = PDFOptions::TwoColumnLeft;
208
        else if (Options->doublePageRight->isChecked())
209
                pgl = PDFOptions::TwoColumnRight;
4260 craig 210
        Opts.PageLayout = pgl;
4197 fschmid 211
        if (Options->actionCombo->currentItem() != 0)
4260 craig 212
                Opts.openAction = Options->actionCombo->currentText();
4197 fschmid 213
        else
4260 craig 214
                Opts.openAction = "";
3059 cbradney 215
        if (Options->Encry->isChecked())
216
        {
217
                int Perm = -64;
218
                if (Options->PDFVersionCombo->currentItem() == 1)
219
                        Perm &= ~0x00240000;
220
                if (Options->PrintSec->isChecked())
221
                        Perm += 4;
222
                if (Options->ModifySec->isChecked())
223
                        Perm += 8;
224
                if (Options->CopySec->isChecked())
225
                        Perm += 16;
226
                if (Options->AddSec->isChecked())
227
                        Perm += 32;
4260 craig 228
                Opts.Permissions = Perm;
229
                Opts.PassOwner = Options->PassOwner->text();
230
                Opts.PassUser = Options->PassUser->text();
3059 cbradney 231
        }
232
        if (Options->PDFVersionCombo->currentItem() == 0)
4260 craig 233
                Opts.Version = PDFOptions::PDFVersion_13;
3059 cbradney 234
        if (Options->PDFVersionCombo->currentItem() == 1)
4260 craig 235
                Opts.Version = PDFOptions::PDFVersion_14;
3059 cbradney 236
        if (Options->PDFVersionCombo->currentItem() == 2)
4260 craig 237
                Opts.Version = PDFOptions::PDFVersion_15;
3059 cbradney 238
        if (Options->PDFVersionCombo->currentItem() == 3)
4260 craig 239
                Opts.Version = PDFOptions::PDFVersion_X3;
3059 cbradney 240
        if (Options->OutCombo->currentItem() == 0)
241
        {
4260 craig 242
                Opts.UseRGB = true;
243
                Opts.isGrayscale = false;
244
                Opts.UseProfiles = false;
245
                Opts.UseProfiles2 = false;
3059 cbradney 246
        }
247
        else
248
        {
249
                if (Options->OutCombo->currentItem() == 2)
250
                {
4260 craig 251
                        Opts.isGrayscale = true;
252
                        Opts.UseRGB = false;
253
                        Opts.UseProfiles = false;
254
                        Opts.UseProfiles2 = false;
3059 cbradney 255
                }
256
                else
257
                {
4260 craig 258
                        Opts.isGrayscale = false;
259
                        Opts.UseRGB = false;
3059 cbradney 260
#ifdef HAVE_CMS
261
                        if (CMSuse)
262
                        {
4260 craig 263
                                Opts.UseProfiles = Options->EmbedProfs->isChecked();
264
                                Opts.UseProfiles2 = Options->EmbedProfs2->isChecked();
265
                                Opts.Intent = Options->IntendS->currentItem();
266
                                Opts.Intent2 = Options->IntendI->currentItem();
267
                                Opts.EmbeddedI = Options->NoEmbedded->isChecked();
268
                                Opts.SolidProf = Options->SolidPr->currentText();
269
                                Opts.ImageProf = Options->ImageP->currentText();
270
                                Opts.PrintProf = Options->PrintProfC->currentText();
271
                                if (Opts.Version == PDFOptions::PDFVersion_X3)
3059 cbradney 272
                                {
273
                                        cmsHPROFILE hIn;
4260 craig 274
                                        QCString profilePath( appPrinterProfiles[Opts.PrintProf].local8Bit() );
3745 craig 275
                                        hIn = cmsOpenProfileFromFile(profilePath.data(), "r");
3059 cbradney 276
                                        const char *Descriptor = cmsTakeProductDesc(hIn);
277
                                        cmsDescriptorName = QString(Descriptor);
278
                                        if (static_cast<int>(cmsGetColorSpace(hIn)) == icSigRgbData)
279
                                                components = 3;
280
                                        if (static_cast<int>(cmsGetColorSpace(hIn)) == icSigCmykData)
281
                                                components = 4;
282
                                        if (static_cast<int>(cmsGetColorSpace(hIn)) == icSigCmyData)
283
                                                components = 3;
284
                                        cmsCloseProfile(hIn);
4260 craig 285
                                        Opts.Info = Options->InfoString->text();
286
                                        Opts.BleedTop = Options->BleedTop->value()/docUnitRatio;
287
                                        Opts.BleedLeft = Options->BleedLeft->value()/docUnitRatio;
288
                                        Opts.BleedRight = Options->BleedRight->value()/docUnitRatio;
289
                                        Opts.BleedBottom = Options->BleedBottom->value()/docUnitRatio;
290
                                        Opts.Encrypt = false;
291
                                        Opts.MirrorH = false;
292
                                        Opts.MirrorV = false;
293
                                        Opts.RotateDeg = 0;
294
                                        Opts.PresentMode = false;
295
                                        Opts.Encrypt = false;
3059 cbradney 296
                                }
297
                        }
298
                        else
299
                        {
4260 craig 300
                                Opts.UseProfiles = false;
301
                                Opts.UseProfiles2 = false;
3059 cbradney 302
                        }
303
#else
4260 craig 304
                        Opts.UseProfiles = false;
305
                        Opts.UseProfiles2 = false;
3059 cbradney 306
#endif
307
                }
308
        }
309
}
310
 
4259 craig 311
const QString PDFExportDialog::cmsDescriptor()
3059 cbradney 312
{
313
        return cmsDescriptorName;
314
}
315
 
4259 craig 316
const int PDFExportDialog::colorSpaceComponents()
3059 cbradney 317
{
318
        return components;
319
}
3062 cbradney 320
 
4259 craig 321
const QString PDFExportDialog::getPagesString()
3062 cbradney 322
{
323
        if (Options->AllPages->isChecked())
324
                return "*";
325
        return Options->PageNr->text();
326
}