summaryrefslogtreecommitdiff
path: root/Build/source/libs/poppler/poppler-0.12.4/qt4/src/poppler-document.cc
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/poppler/poppler-0.12.4/qt4/src/poppler-document.cc')
-rw-r--r--Build/source/libs/poppler/poppler-0.12.4/qt4/src/poppler-document.cc619
1 files changed, 0 insertions, 619 deletions
diff --git a/Build/source/libs/poppler/poppler-0.12.4/qt4/src/poppler-document.cc b/Build/source/libs/poppler/poppler-0.12.4/qt4/src/poppler-document.cc
deleted file mode 100644
index c2563f4026f..00000000000
--- a/Build/source/libs/poppler/poppler-0.12.4/qt4/src/poppler-document.cc
+++ /dev/null
@@ -1,619 +0,0 @@
-/* poppler-document.cc: qt interface to poppler
- * Copyright (C) 2005, Net Integration Technologies, Inc.
- * Copyright (C) 2005, 2008, Brad Hards <bradh@frogmouth.net>
- * Copyright (C) 2005-2009, Albert Astals Cid <aacid@kde.org>
- * Copyright (C) 2006-2009, Pino Toscano <pino@kde.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include "poppler-qt4.h"
-
-#include <config.h>
-#include <ErrorCodes.h>
-#include <GlobalParams.h>
-#include <Outline.h>
-#include <PDFDoc.h>
-#include <Stream.h>
-#include <Catalog.h>
-#include <DateInfo.h>
-#include <GfxState.h>
-
-#include <QtCore/QDebug>
-#include <QtCore/QFile>
-#include <QtCore/QByteArray>
-
-#include "poppler-private.h"
-
-#if defined(USE_CMS)
-#include <lcms.h>
-#endif
-
-namespace Poppler {
-
- int DocumentData::count = 0;
-
- Document *Document::load(const QString &filePath, const QByteArray &ownerPassword,
- const QByteArray &userPassword)
- {
- DocumentData *doc = new DocumentData(new GooString(QFile::encodeName(filePath)),
- new GooString(ownerPassword.data()),
- new GooString(userPassword.data()));
- return DocumentData::checkDocument(doc);
- }
-
- Document *Document::loadFromData(const QByteArray &fileContents,
- const QByteArray &ownerPassword,
- const QByteArray &userPassword)
- {
- // create stream
- DocumentData *doc = new DocumentData(fileContents,
- new GooString(ownerPassword.data()),
- new GooString(userPassword.data()));
- return DocumentData::checkDocument(doc);
- }
-
- Document *DocumentData::checkDocument(DocumentData *doc)
- {
- Document *pdoc;
- if (doc->doc->isOk() || doc->doc->getErrorCode() == errEncrypted) {
- pdoc = new Document(doc);
- if (doc->doc->getErrorCode() == errEncrypted)
- pdoc->m_doc->locked = true;
- else
- {
- pdoc->m_doc->locked = false;
- pdoc->m_doc->fillMembers();
- }
- return pdoc;
- }
- else
- {
- delete doc;
- }
- return NULL;
- }
-
- Document::Document(DocumentData *dataA)
- {
- m_doc = dataA;
- }
-
- Document::~Document()
- {
- delete m_doc;
- }
-
- Page *Document::page(int index) const
- {
- return new Page(m_doc, index);
- }
-
- bool Document::isLocked() const
- {
- return m_doc->locked;
- }
-
- bool Document::unlock(const QByteArray &ownerPassword,
- const QByteArray &userPassword)
- {
- if (m_doc->locked) {
- /* racier then it needs to be */
- DocumentData *doc2;
- if (!m_doc->fileContents.isEmpty())
- {
- doc2 = new DocumentData(m_doc->fileContents,
- new GooString(ownerPassword.data()),
- new GooString(userPassword.data()));
- }
- else
- {
- doc2 = new DocumentData(new GooString(m_doc->doc->getFileName()),
- new GooString(ownerPassword.data()),
- new GooString(userPassword.data()));
- }
- if (!doc2->doc->isOk()) {
- delete doc2;
- } else {
- delete m_doc;
- m_doc = doc2;
- m_doc->locked = false;
- m_doc->fillMembers();
- }
- }
- return m_doc->locked;
- }
-
- Document::PageMode Document::pageMode() const
- {
- switch (m_doc->doc->getCatalog()->getPageMode()) {
- case Catalog::pageModeNone:
- return UseNone;
- case Catalog::pageModeOutlines:
- return UseOutlines;
- case Catalog::pageModeThumbs:
- return UseThumbs;
- case Catalog::pageModeFullScreen:
- return FullScreen;
- case Catalog::pageModeOC:
- return UseOC;
- case Catalog::pageModeAttach:
- return UseAttach;
- default:
- return UseNone;
- }
- }
-
- Document::PageLayout Document::pageLayout() const
- {
- switch (m_doc->doc->getCatalog()->getPageLayout()) {
- case Catalog::pageLayoutNone:
- return NoLayout;
- case Catalog::pageLayoutSinglePage:
- return SinglePage;
- case Catalog::pageLayoutOneColumn:
- return OneColumn;
- case Catalog::pageLayoutTwoColumnLeft:
- return TwoColumnLeft;
- case Catalog::pageLayoutTwoColumnRight:
- return TwoColumnRight;
- case Catalog::pageLayoutTwoPageLeft:
- return TwoPageLeft;
- case Catalog::pageLayoutTwoPageRight:
- return TwoPageRight;
- default:
- return NoLayout;
- }
- }
-
- int Document::numPages() const
- {
- return m_doc->doc->getNumPages();
- }
-
- QList<FontInfo> Document::fonts() const
- {
- QList<FontInfo> ourList;
- FontIterator it( 0, m_doc );
- while ( it.hasNext() )
- {
- ourList += it.next();
- }
- return ourList;
- }
-
- QList<EmbeddedFile*> Document::embeddedFiles() const
- {
- return m_doc->m_embeddedFiles;
- }
-
- bool Document::scanForFonts( int numPages, QList<FontInfo> *fontList ) const
- {
- if ( !m_doc->m_fontInfoIterator )
- return false;
- if ( !m_doc->m_fontInfoIterator->hasNext() )
- return false;
- while ( m_doc->m_fontInfoIterator->hasNext() && numPages )
- {
- (*fontList) += m_doc->m_fontInfoIterator->next();
- --numPages;
- }
- return true;
- }
-
- FontIterator* Document::newFontIterator( int startPage ) const
- {
- return new FontIterator( startPage, m_doc );
- }
-
- QByteArray Document::fontData(const FontInfo &fi) const
- {
- QByteArray result;
- if (fi.isEmbedded())
- {
- Object refObj, strObj;
- refObj.initRef(fi.m_data->embRef.num, fi.m_data->embRef.gen);
- refObj.fetch(m_doc->doc->getXRef(), &strObj);
- refObj.free();
- if (strObj.isStream())
- {
- int c;
- strObj.streamReset();
- while ((c = strObj.streamGetChar()) != EOF)
- {
- result.append((char)c);
- }
- strObj.streamClose();
- }
- strObj.free();
- }
- return result;
- }
-
- /* borrowed from kpdf */
- QString Document::info( const QString & type ) const
- {
- // [Albert] Code adapted from pdfinfo.cc on xpdf
- Object info;
- if ( m_doc->locked )
- return QString();
-
- m_doc->doc->getDocInfo( &info );
- if ( !info.isDict() )
- return QString();
-
- QString result;
- Object obj;
- GooString *s1;
- Dict *infoDict = info.getDict();
-
- if ( infoDict->lookup( type.toLatin1().data(), &obj )->isString() )
- {
- s1 = obj.getString();
- result = UnicodeParsedString(s1);
- obj.free();
- info.free();
- return result;
- }
- obj.free();
- info.free();
- return QString();
- }
-
- QStringList Document::infoKeys() const
- {
- QStringList keys;
-
- Object info;
- if ( m_doc->locked )
- return QStringList();
-
- m_doc->doc->getDocInfo( &info );
- if ( !info.isDict() )
- return QStringList();
-
- Dict *infoDict = info.getDict();
- // somehow iterate over keys in infoDict
- for( int i=0; i < infoDict->getLength(); ++i ) {
- keys.append( QString::fromAscii(infoDict->getKey(i)) );
- }
-
- info.free();
- return keys;
- }
-
- /* borrowed from kpdf */
- QDateTime Document::date( const QString & type ) const
- {
- // [Albert] Code adapted from pdfinfo.cc on xpdf
- if ( m_doc->locked )
- return QDateTime();
-
- Object info;
- m_doc->doc->getDocInfo( &info );
- if ( !info.isDict() ) {
- info.free();
- return QDateTime();
- }
-
- Object obj;
- Dict *infoDict = info.getDict();
- QDateTime result;
-
- if ( infoDict->lookup( type.toLatin1().data(), &obj )->isString() )
- {
- char *aux = obj.getString()->getCString();
- result = Poppler::convertDate(aux);
- }
- obj.free();
- info.free();
- return result;
- }
-
- bool Document::isEncrypted() const
- {
- return m_doc->doc->isEncrypted();
- }
-
- bool Document::isLinearized() const
- {
- return m_doc->doc->isLinearized();
- }
-
- bool Document::okToPrint() const
- {
- return m_doc->doc->okToPrint();
- }
-
- bool Document::okToPrintHighRes() const
- {
- return m_doc->doc->okToPrintHighRes();
- }
-
- bool Document::okToChange() const
- {
- return m_doc->doc->okToChange();
- }
-
- bool Document::okToCopy() const
- {
- return m_doc->doc->okToCopy();
- }
-
- bool Document::okToAddNotes() const
- {
- return m_doc->doc->okToAddNotes();
- }
-
- bool Document::okToFillForm() const
- {
- return m_doc->doc->okToFillForm();
- }
-
- bool Document::okToCreateFormFields() const
- {
- return ( okToFillForm() && okToChange() );
- }
-
- bool Document::okToExtractForAccessibility() const
- {
- return m_doc->doc->okToAccessibility();
- }
-
- bool Document::okToAssemble() const
- {
- return m_doc->doc->okToAssemble();
- }
-
- double Document::pdfVersion() const
- {
- return m_doc->doc->getPDFMajorVersion () + m_doc->doc->getPDFMinorVersion() / 10.0;
- }
-
- void Document::getPdfVersion(int *major, int *minor) const
- {
- if (major)
- *major = m_doc->doc->getPDFMajorVersion();
- if (minor)
- *minor = m_doc->doc->getPDFMinorVersion();
- }
-
- Page *Document::page(const QString &label) const
- {
- GooString label_g(label.toAscii().data());
- int index;
-
- if (!m_doc->doc->getCatalog()->labelToIndex (&label_g, &index))
- return NULL;
-
- return page(index);
- }
-
- bool Document::hasEmbeddedFiles() const
- {
- return (!(0 == m_doc->doc->getCatalog()->numEmbeddedFiles()));
- }
-
- QDomDocument *Document::toc() const
- {
- Outline * outline = m_doc->doc->getOutline();
- if ( !outline )
- return NULL;
-
- GooList * items = outline->getItems();
- if ( !items || items->getLength() < 1 )
- return NULL;
-
- QDomDocument *toc = new QDomDocument();
- if ( items->getLength() > 0 )
- m_doc->addTocChildren( toc, toc, items );
-
- return toc;
- }
-
- LinkDestination *Document::linkDestination( const QString &name )
- {
- GooString * namedDest = QStringToGooString( name );
- LinkDestinationData ldd(NULL, namedDest, m_doc, false);
- LinkDestination *ld = new LinkDestination(ldd);
- delete namedDest;
- return ld;
- }
-
- void Document::setPaperColor(const QColor &color)
- {
- m_doc->setPaperColor(color);
- }
-
- void Document::setColorDisplayProfile(void* outputProfileA)
- {
-#if defined(USE_CMS)
- GfxColorSpace::setDisplayProfile((cmsHPROFILE)outputProfileA);
-#else
- Q_UNUSED(outputProfileA);
-#endif
- }
-
- void Document::setColorDisplayProfileName(const QString &name)
- {
-#if defined(USE_CMS)
- GooString *profileName = QStringToGooString( name );
- GfxColorSpace::setDisplayProfileName(profileName);
- delete profileName;
-#else
- Q_UNUSED(name);
-#endif
- }
-
- void* Document::colorRgbProfile() const
- {
-#if defined(USE_CMS)
- return (void*)GfxColorSpace::getRGBProfile();
-#else
- return NULL;
-#endif
- }
-
- void* Document::colorDisplayProfile() const
- {
-#if defined(USE_CMS)
- return (void*)GfxColorSpace::getDisplayProfile();
-#else
- return NULL;
-#endif
- }
-
- QColor Document::paperColor() const
- {
- return m_doc->paperColor;
- }
-
- void Document::setRenderBackend( Document::RenderBackend backend )
- {
- // no need to delete the outputdev as for the moment we always create a splash one
- // as the arthur one does not allow "precaching" due to it's signature
- // delete m_doc->m_outputDev;
- // m_doc->m_outputDev = NULL;
- m_doc->m_backend = backend;
- }
-
- Document::RenderBackend Document::renderBackend() const
- {
- return m_doc->m_backend;
- }
-
- QSet<Document::RenderBackend> Document::availableRenderBackends()
- {
- QSet<Document::RenderBackend> ret;
-#if defined(HAVE_SPLASH)
- ret << Document::SplashBackend;
- ret << Document::ArthurBackend;
-#endif
- return ret;
- }
-
- void Document::setRenderHint( Document::RenderHint hint, bool on )
- {
- if ( on )
- m_doc->m_hints |= hint;
- else
- m_doc->m_hints &= ~(int)hint;
-
- // the only way to set antialiasing for Splash is on creation
- if ( m_doc->m_backend == Document::SplashBackend &&
- ( hint & ( Document::Antialiasing || Document::TextAntialiasing || Document::TextHinting ) ) )
- {
- delete m_doc->m_outputDev;
- m_doc->m_outputDev = NULL;
- }
- }
-
- Document::RenderHints Document::renderHints() const
- {
- return Document::RenderHints( m_doc->m_hints );
- }
-
- PSConverter *Document::psConverter() const
- {
- return new PSConverter(m_doc);
- }
-
- PDFConverter *Document::pdfConverter() const
- {
- return new PDFConverter(m_doc);
- }
-
- QString Document::metadata() const
- {
- QString result;
- Catalog *catalog = m_doc->doc->getCatalog();
- if (catalog && catalog->isOk())
- {
- GooString *s = catalog->readMetadata();
- if (s) result = UnicodeParsedString(s);
- delete s;
- }
- return result;
- }
-
- bool Document::hasOptionalContent() const
- {
- return ( m_doc->doc->getOptContentConfig() && m_doc->doc->getOptContentConfig()->hasOCGs() );
- }
-
- OptContentModel *Document::optionalContentModel()
- {
- if (m_doc->m_optContentModel.isNull()) {
- m_doc->m_optContentModel = new OptContentModel(m_doc->doc->getOptContentConfig(), 0);
- }
- return (OptContentModel *)m_doc->m_optContentModel;
- }
-
- QStringList Document::scripts() const
- {
- Catalog *catalog = m_doc->doc->getCatalog();
- const int numScripts = catalog->numJS();
- QStringList scripts;
- for (int i = 0; i < numScripts; ++i) {
- GooString *s = catalog->getJS(i);
- if (s) {
- scripts.append(UnicodeParsedString(s));
- delete s;
- }
- }
- return scripts;
- }
-
- QDateTime convertDate( char *dateString )
- {
- int year, mon, day, hour, min, sec, tzHours, tzMins;
- char tz;
-
- if ( parseDateString( dateString, &year, &mon, &day, &hour, &min, &sec, &tz, &tzHours, &tzMins ) )
- {
- QDate d( year, mon, day );
- QTime t( hour, min, sec );
- if ( d.isValid() && t.isValid() ) {
- QDateTime dt( d, t, Qt::UTC );
- if ( tz ) {
- // then we have some form of timezone
- if ( 'Z' == tz ) {
- // We are already at UTC
- } else if ( '+' == tz ) {
- // local time is ahead of UTC
- dt = dt.addSecs(-1*((tzHours*60)+tzMins)*60);
- } else if ( '-' == tz ) {
- // local time is behind UTC
- dt = dt.addSecs(((tzHours*60)+tzMins)*60);
- } else {
- qWarning("unexpected tz val");
- }
- }
- return dt;
- }
- }
- return QDateTime();
- }
-
- bool isCmsAvailable()
- {
-#if defined(USE_CMS)
- return true;
-#else
- return false;
-#endif
- }
-
-}