Subversion Repositories Scribus

Rev

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