void ImageConverter::Work() { PoDoFo::PdfMemDocument document; std::vector<std::string>::const_iterator it = m_vecImages.begin(); PoDoFo::PdfRect size = PoDoFo::PdfPage::CreateStandardPageSize( PoDoFo::ePdfPageSize_A4, false ); PoDoFo::PdfPainter painter; double dScaleX = 1.0; double dScaleY = 1.0; double dScale = 1.0; while( it != m_vecImages.end() ) { PoDoFo::PdfPage* pPage; PoDoFo::PdfImage image( &document ); image.LoadFromFile( (*it).c_str() ); if( m_bUseImageSize ) { size = PoDoFo::PdfRect( 0.0, 0.0, image.GetWidth(), image.GetHeight() ); } pPage = document.CreatePage( size ); dScaleX = size.GetWidth() / image.GetWidth(); dScaleY = size.GetHeight() / image.GetHeight(); dScale = PoDoFo::PDF_MIN( dScaleX, dScaleY ); painter.SetPage( pPage ); if( dScale < 1.0 ) { painter.DrawImage( 0.0, 0.0, &image, dScale, dScale ); } else { // Center Image double dX = (size.GetWidth() - image.GetWidth())/2.0; double dY = (size.GetHeight() - image.GetHeight())/2.0; painter.DrawImage( dX, dY, &image ); } painter.FinishPage(); ++it; } document.Write( m_sOutputFilename.c_str() ); }
bool EPSPlug::import(QString fName, const TransactionSettings &trSettings, int flags, bool showProgress) { #ifdef Q_OS_OSX #if QT_VERSION >= 0x050300 showProgress = false; #endif #endif bool success = false; interactive = (flags & LoadSavePlugin::lfInteractive); cancel = false; double x, y, b, h; bool ret = false; bool found = false; CustColors.clear(); QFileInfo fi = QFileInfo(fName); QString ext = fi.suffix().toLower(); if ( !ScCore->usingGUI() ) { interactive = false; showProgress = false; } if ( showProgress ) { ScribusMainWindow* mw=(m_Doc==0) ? ScCore->primaryMainWindow() : m_Doc->scMW(); progressDialog = new MultiProgressDialog( tr("Importing: %1").arg(fi.fileName()), CommonStrings::tr_Cancel, mw); QStringList barNames, barTexts; barNames << "GI"; barTexts << tr("Analyzing PostScript:"); QList<bool> barsNumeric; barsNumeric << false; progressDialog->addExtraProgressBars(barNames, barTexts, barsNumeric); progressDialog->setOverallTotalSteps(3); progressDialog->setOverallProgress(0); progressDialog->setProgress("GI", 0); progressDialog->show(); connect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelRequested())); qApp->processEvents(); } else { progressDialog = NULL; } /* Set default Page to size defined in Preferences */ x = 0.0; y = 0.0; b = PrefsManager::instance()->appPrefs.docSetupPrefs.pageWidth; h = PrefsManager::instance()->appPrefs.docSetupPrefs.pageHeight; if (extensionIndicatesEPSorPS(ext)) { QString tmp, BBox, tmp2, FarNam; ScColor cc; QFile f(fName); if (f.open(QIODevice::ReadOnly)) { /* Try to find Bounding Box */ QDataStream ts(&f); while (!ts.atEnd()) { tmp = readLinefromDataStream(ts); if (tmp.startsWith("%%BoundingBox:")) { found = true; BBox = tmp.remove("%%BoundingBox:"); } if (!found) { if (tmp.startsWith("%%BoundingBox")) { found = true; BBox = tmp.remove("%%BoundingBox"); } } if (tmp.startsWith("%%EndComments")) break; } f.close(); if (found) { QStringList bb = BBox.split(" ", QString::SkipEmptyParts); if (bb.count() == 4) { x = ScCLocale::toDoubleC(bb[0]); y = ScCLocale::toDoubleC(bb[1]); b = ScCLocale::toDoubleC(bb[2]); h = ScCLocale::toDoubleC(bb[3]); } } } importColorsFromFile(fName, CustColors); } #ifdef HAVE_PODOFO else if (extensionIndicatesPDF(ext)) { try { PoDoFo::PdfError::EnableDebug( false ); #if (PODOFO_VERSION == 0 && PODOFO_MINOR > 6) PoDoFo::PdfError::EnableLogging( false ); #endif #if (PODOFO_VERSION == 0 && PODOFO_MINOR == 5 && PODOFO_REVISION == 99) || PODOFO_MINOR > 5 PoDoFo::PdfMemDocument doc( fName.toLocal8Bit().data() ); #else PoDoFo::PdfDocument doc( fName.toLocal8Bit().data() ); #endif PoDoFo::PdfPage *curPage = doc.GetPage(0); if (curPage != NULL) { PoDoFo::PdfRect rect = curPage->GetMediaBox(); b = rect.GetWidth() - rect.GetLeft(); h = rect.GetHeight() - rect.GetBottom(); } } catch(PoDoFo::PdfError& e) { qDebug("%s", "PoDoFo error while reading page size!"); e.PrintErrorMsg(); } } #endif baseX = 0; baseY = 0; if (!interactive || (flags & LoadSavePlugin::lfInsertPage)) { m_Doc->setPage(b-x, h-y, 0, 0, 0, 0, 0, 0, false, false); m_Doc->addPage(0); m_Doc->view()->addPage(0, true); baseX = 0; baseY = 0; } else { if (!m_Doc || (flags & LoadSavePlugin::lfCreateDoc)) { m_Doc=ScCore->primaryMainWindow()->doFileNew(b-x, h-y, 0, 0, 0, 0, 0, 0, false, false, 0, false, 0, 1, "Custom", true); ScCore->primaryMainWindow()->HaveNewDoc(); ret = true; baseX = 0; baseY = 0; } } if ((!ret) && (interactive)) { baseX = m_Doc->currentPage()->xOffset(); baseY = m_Doc->currentPage()->yOffset(); } if ((ret) || (!interactive)) { if (b-x > h-y) m_Doc->setPageOrientation(1); else m_Doc->setPageOrientation(0); m_Doc->setPageSize("Custom"); } ColorList::Iterator it; for (it = CustColors.begin(); it != CustColors.end(); ++it) { if (!m_Doc->PageColors.contains(it.key())) m_Doc->PageColors.insert(it.key(), it.value()); } boundingBoxRect.addRect(0, 0, b-x, h-y); Elements.clear(); m_Doc->setLoading(true); m_Doc->DoDrawing = false; if (!(flags & LoadSavePlugin::lfLoadAsPattern)) m_Doc->view()->updatesOn(false); m_Doc->scMW()->setScriptRunning(true); qApp->changeOverrideCursor(QCursor(Qt::WaitCursor)); QString CurDirP = QDir::currentPath(); QDir::setCurrent(fi.path()); if (convert(fName, x, y, b, h)) { // m_Doc->m_Selection->clear(); tmpSel->clear(); QDir::setCurrent(CurDirP); // if ((Elements.count() > 1) && (interactive)) if (Elements.count() > 1) m_Doc->groupObjectsList(Elements); m_Doc->DoDrawing = true; m_Doc->scMW()->setScriptRunning(false); m_Doc->setLoading(false); qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor)); if ((Elements.count() > 0) && (!ret) && (interactive)) { if (flags & LoadSavePlugin::lfScripted) { bool loadF = m_Doc->isLoading(); m_Doc->setLoading(false); m_Doc->changed(); m_Doc->setLoading(loadF); if (!(flags & LoadSavePlugin::lfLoadAsPattern)) { m_Doc->m_Selection->delaySignalsOn(); for (int dre=0; dre<Elements.count(); ++dre) { m_Doc->m_Selection->addItem(Elements.at(dre), true); } m_Doc->m_Selection->delaySignalsOff(); m_Doc->m_Selection->setGroupRect(); m_Doc->view()->updatesOn(true); } } else { m_Doc->DragP = true; m_Doc->DraggedElem = 0; m_Doc->DragElements.clear(); m_Doc->m_Selection->delaySignalsOn(); for (int dre=0; dre<Elements.count(); ++dre) { tmpSel->addItem(Elements.at(dre), true); } tmpSel->setGroupRect(); ScriXmlDoc *ss = new ScriXmlDoc(); ScElemMimeData* md = new ScElemMimeData(); md->setScribusElem(ss->WriteElem(m_Doc, tmpSel)); delete ss; /*#ifndef Q_WS_MAC*/ // see #2196 m_Doc->itemSelection_DeleteItem(tmpSel); /*#else qDebug() << "psimport: leaving items on page"; #endif*/ m_Doc->view()->updatesOn(true); m_Doc->m_Selection->delaySignalsOff(); // We must copy the TransationSettings object as it is owned // by handleObjectImport method afterwards TransactionSettings* transacSettings = new TransactionSettings(trSettings); m_Doc->view()->handleObjectImport(md, transacSettings); m_Doc->DragP = false; m_Doc->DraggedElem = 0; m_Doc->DragElements.clear(); } } else { m_Doc->changed(); m_Doc->reformPages(); if (!(flags & LoadSavePlugin::lfLoadAsPattern)) m_Doc->view()->updatesOn(true); } success = true; } else { QDir::setCurrent(CurDirP); m_Doc->DoDrawing = true; m_Doc->scMW()->setScriptRunning(false); m_Doc->view()->updatesOn(true); qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor)); } if (interactive) m_Doc->setLoading(false); //CB If we have a gui we must refresh it if we have used the progressbar if (!(flags & LoadSavePlugin::lfLoadAsPattern)) { if ((showProgress) && (!interactive)) m_Doc->view()->DrawNew(); } return success; }