Subversion Repositories Scribus

Compare Revisions

Ignore whitespace Rev 17447 → Rev 17448

/trunk/Scribus/scribus/plugins/import/pdf/slaoutput.cpp
32,9 → 32,8
xref = NULL;
m_fontEngine = 0;
m_font = 0;
firstPage = true;
pagecount = 1;
updateGUICounter = 0;
layersSetByOCG = false;
}
 
SlaOutputDev::~SlaOutputDev()
51,8 → 50,6
xref = xrefA;
catalog = catA;
pdfDoc = doc;
firstPage = true;
pagecount = 1;
updateGUICounter = 0;
m_fontEngine = new SplashFontEngine(
#if HAVE_T1LIB_H
66,27 → 63,8
true);
}
 
void SlaOutputDev::startPage(int pageNum, GfxState *state)
void SlaOutputDev::startPage(int, GfxState *)
{
// qDebug() << "starting page" << pageNum;
if (firstPage)
firstPage = false;
else
{
if (importerFlags & LoadSavePlugin::lfCreateDoc)
{
m_doc->addPage(pagecount);
m_doc->currentPage()->setInitialHeight(state->getPageHeight());
m_doc->currentPage()->setInitialWidth(state->getPageWidth());
m_doc->currentPage()->setHeight(state->getPageHeight());
m_doc->currentPage()->setWidth(state->getPageWidth());
m_doc->currentPage()->MPageNam = CommonStrings::trMasterPageNormal;
m_doc->currentPage()->m_pageSize = "Custom";
m_doc->view()->addPage(pagecount, true);
pagecount++;
}
}
// qDebug() << "page size =" << pageSize;
}
 
void SlaOutputDev::endPage()
1404,6 → 1382,8
{
if (QString(name) == "Layer") // Handle Adobe Illustrator Layer command
{
if (layersSetByOCG)
return;
Object obj;
QString lName = QString("Layer_%1").arg(layerNum + 1);
if (properties->lookup((char*)"Title", &obj))
/trunk/Scribus/scribus/plugins/import/pdf/importpdf.cpp
16,6 → 16,7
#include <QDebug>
#include "slaoutput.h"
#include <GlobalParams.h>
#include <poppler-config.h>
 
#include "importpdf.h"
 
277,7 → 278,9
 
bool PdfPlug::convert(QString fn)
{
QString tmp;
bool firstLayer = true;
bool firstPg = true;
int currentLayer = m_Doc->activeLayer();
importedColors.clear();
if(progressDialog)
{
298,6 → 301,8
{
GooString *fname = new GooString(QFile::encodeName(fn).data());
globalParams->setErrQuiet(gTrue);
GBool hasOcg = gFalse;
QList<OptionalContentGroup*> ocgGroups;
// globalParams->setPrintCommands(gTrue);
PDFDoc *pdfDoc = new PDFDoc(fname, 0, 0, 0);
if (pdfDoc)
308,77 → 313,94
double vDPI = 72.0;
int firstPage = 1;
int lastPage = pdfDoc->getNumPages();
OCGs* ocg = pdfDoc->getOptContentConfig();
if (ocg)
SlaOutputDev *dev = new SlaOutputDev(m_Doc, &Elements, &importedColors, importerFlags);
if (dev->isOk())
{
GBool hasOcg = ocg->hasOCGs();
if (hasOcg)
OCGs* ocg = pdfDoc->getOptContentConfig();
if (ocg)
{
// qDebug() << "File has OCGs";
Array *order = ocg->getOrderArray();
if (order)
hasOcg = ocg->hasOCGs();
if (hasOcg)
{
for (int i = 0; i < order->getLength (); ++i)
Array *order = ocg->getOrderArray();
if (order)
{
Object orderItem;
order->get(i, &orderItem);
if (orderItem.isDict())
for (int i = 0; i < order->getLength (); ++i)
{
Object ref;
order->getNF(i, &ref);
if (ref.isRef())
Object orderItem;
order->get(i, &orderItem);
if (orderItem.isDict())
{
OptionalContentGroup *oc = ocg->findOcgByRef(ref.getRef());
// qDebug() << "Name" << UnicodeParsedString(oc->getName()) << "State" << oc->getState() << "View" << oc->getViewState() << "Print" << oc->getPrintState();
oc->setState(OptionalContentGroup::On);
Object ref;
order->getNF(i, &ref);
if (ref.isRef())
{
OptionalContentGroup *oc = ocg->findOcgByRef(ref.getRef());
ocgGroups.prepend(oc);
}
ref.free();
}
ref.free();
}
}
}
else
{
GooList *ocgs;
int i;
ocgs = ocg->getOCGs ();
for (i = 0; i < ocgs->getLength (); ++i)
else
{
OptionalContentGroup *oc = (OptionalContentGroup *)ocgs->get(i);
// qDebug() << "Name" << UnicodeParsedString(oc->getName()) << "State" << oc->getState() << "View" << oc->getViewState() << "Print" << oc->getPrintState();
oc->setState(OptionalContentGroup::On);
GooList *ocgs;
int i;
ocgs = ocg->getOCGs ();
for (i = 0; i < ocgs->getLength (); ++i)
{
OptionalContentGroup *oc = (OptionalContentGroup *)ocgs->get(i);
ocgGroups.prepend(oc);
}
}
}
}
}
// qDebug() << "converting page" << firstPage;
SlaOutputDev *dev = new SlaOutputDev(m_Doc, &Elements, &importedColors, importerFlags);
if (dev->isOk())
{
GBool useMediaBox = gTrue;
GBool crop = gFalse;
GBool printing = gFalse;
dev->startDoc(pdfDoc, pdfDoc->getXRef(), pdfDoc->getCatalog());
int rotate = pdfDoc->getPageRotate(firstPage);
/* PDFRectangle *rect = pdfDoc->getPage(firstPage)->getMediaBox();
qDebug() << "Media Box" << rect->x1 << rect->y1 << rect->x2 << rect->y2;
rect = pdfDoc->getPage(firstPage)->getCropBox();
qDebug() << "Crop Box " << rect->x1 << rect->y1 << rect->x2 << rect->y2;
rect = pdfDoc->getPage(firstPage)->getBleedBox();
qDebug() << "Bleed Box" << rect->x1 << rect->y1 << rect->x2 << rect->y2;
rect = pdfDoc->getPage(firstPage)->getTrimBox();
qDebug() << "Trim Box " << rect->x1 << rect->y1 << rect->x2 << rect->y2;
rect = pdfDoc->getPage(firstPage)->getArtBox();
qDebug() << "Art Box " << rect->x1 << rect->y1 << rect->x2 << rect->y2; */
if (importerFlags & LoadSavePlugin::lfCreateDoc)
{
m_Doc->currentPage()->setInitialHeight(pdfDoc->getPageMediaHeight(firstPage));
m_Doc->currentPage()->setInitialWidth(pdfDoc->getPageMediaWidth(firstPage));
m_Doc->currentPage()->setHeight(pdfDoc->getPageMediaHeight(firstPage));
m_Doc->currentPage()->setWidth(pdfDoc->getPageMediaWidth(firstPage));
m_Doc->currentPage()->MPageNam = CommonStrings::trMasterPageNormal;
m_Doc->currentPage()->m_pageSize = "Custom";
m_Doc->setPageSize("Custom");
m_Doc->reformPages(true);
if (hasOcg)
{
for (int a = 0; a < ocgGroups.count(); a++)
{
OptionalContentGroup *oc = ocgGroups[a];
if (firstLayer)
{
m_Doc->changeLayerName(m_Doc->activeLayer(), UnicodeParsedString(oc->getName()));
currentLayer = m_Doc->activeLayer();
firstLayer = false;
}
else
currentLayer = m_Doc->addLayer(UnicodeParsedString(oc->getName()), false);
// POPPLER_VERSION appeared in 0.19.0 first
#ifdef POPPLER_VERSION
if ((oc->getViewState() == OptionalContentGroup::ocUsageOn) || (oc->getViewState() == OptionalContentGroup::ocUsageUnset))
m_Doc->setLayerVisible(currentLayer, true);
else
m_Doc->setLayerVisible(currentLayer, false);
if ((oc->getPrintState() == OptionalContentGroup::ocUsageOn) || (oc->getPrintState() == OptionalContentGroup::ocUsageUnset))
m_Doc->setLayerPrintable(currentLayer, true);
else
m_Doc->setLayerPrintable(currentLayer, false);
#else
if (oc->getState() == OptionalContentGroup::On)
{
m_Doc->setLayerVisible(currentLayer, true);
m_Doc->setLayerPrintable(currentLayer, true);
}
else
{
m_Doc->setLayerVisible(currentLayer, false);
m_Doc->setLayerPrintable(currentLayer, false);
}
#endif
oc->setState(OptionalContentGroup::Off);
}
dev->layersSetByOCG = true;
}
Object info;
pdfDoc->getDocInfo(&info);
if (info.isDict())
412,10 → 434,47
}
}
info.free();
pdfDoc->displayPages(dev, firstPage, lastPage, hDPI, vDPI, rotate, useMediaBox, crop, printing);
for (int pp = 0; pp < lastPage; pp++)
{
if (firstPg)
firstPg = false;
else
m_Doc->addPage(pp);
m_Doc->currentPage()->setInitialHeight(pdfDoc->getPageMediaHeight(pp + 1));
m_Doc->currentPage()->setInitialWidth(pdfDoc->getPageMediaWidth(pp + 1));
m_Doc->currentPage()->setHeight(pdfDoc->getPageMediaHeight(pp + 1));
m_Doc->currentPage()->setWidth(pdfDoc->getPageMediaWidth(pp + 1));
m_Doc->currentPage()->MPageNam = CommonStrings::trMasterPageNormal;
m_Doc->currentPage()->m_pageSize = "Custom";
m_Doc->setPageSize("Custom");
m_Doc->reformPages(true);
if (hasOcg)
{
for (int a = 0; a < ocgGroups.count(); a++)
{
OptionalContentGroup *oc = ocgGroups[a];
m_Doc->setActiveLayer(UnicodeParsedString(oc->getName()));
currentLayer = m_Doc->activeLayer();
oc->setState(OptionalContentGroup::On);
pdfDoc->displayPage(dev, pp + 1, hDPI, vDPI, rotate, useMediaBox, crop, printing);
oc->setState(OptionalContentGroup::Off);
}
}
else
pdfDoc->displayPage(dev, pp + 1, hDPI, vDPI, rotate, useMediaBox, crop, printing);
}
}
else
{
if (hasOcg)
{
for (int a = 0; a < ocgGroups.count(); a++)
{
ocgGroups[a]->setState(OptionalContentGroup::On);
}
}
pdfDoc->displayPage(dev, firstPage, hDPI, vDPI, rotate, useMediaBox, crop, printing);
}
}
delete dev;
}
/trunk/Scribus/scribus/plugins/import/pdf/slaoutput.h
83,7 → 83,7
virtual GBool useTilingPatternFill() { return gTrue; }
virtual GBool useShadedFills(int type) { return type <= 7; }
virtual GBool useFillColorStop() { return gTrue; }
virtual void startPage(int pageNum, GfxState *state);
virtual void startPage(int, GfxState *);
virtual void endPage();
// grapics state
virtual void saveState(GfxState *state);
165,6 → 165,7
virtual void endType3Char(GfxState * /*state*/);
virtual void type3D0(GfxState * /*state*/, double /*wx*/, double /*wy*/);
virtual void type3D1(GfxState * /*state*/, double /*wx*/, double /*wy*/, double /*llx*/, double /*lly*/, double /*urx*/, double /*ury*/);
bool layersSetByOCG;
 
private:
void getPenState(GfxState *state);
174,7 → 175,6
void applyMask(PageItem *ite);
void pushGroup(QString maskName = "", GBool forSoftMask = gFalse, GBool alpha = gFalse, bool inverted = false);
bool pathIsClosed;
bool firstLayer;
QString CurrColorFill;
QString CurrColorStroke;
Qt::PenCapStyle PLineEnd;
220,9 → 220,8
int grStackDepth;
int layerNum;
int currentLayer;
bool firstLayer;
int importerFlags;
bool firstPage;
int pagecount;
int updateGUICounter;
XRef *xref; // xref table for current document
PDFDoc *pdfDoc;