summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--poppler/Stream.cc5
-rw-r--r--poppler/Stream.h1
-rw-r--r--qt4/src/poppler-document.cc22
-rw-r--r--qt4/src/poppler-private.h17
-rw-r--r--qt4/src/poppler-qt4.h16
6 files changed, 67 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index cf7577bf..d81ff0a8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2007-01-13 Albert Astals Cid <aacid@kde.org>
+
+ * poppler/Stream.h:
+ * poppler/Stream.cc: Add MemStream::setNeedFree method
+ * qt4/src/poppler-document.cc:
+ * qt4/src/poppler-private.h:
+ * qt4/src/poppler-qt4.h: Add Document::loadFromData method
+
2007-01-11 Albert Astals Cid <aacid@kde.org>
* goo/gmem.c: Merge change from xpdf-3.01pl2
diff --git a/poppler/Stream.cc b/poppler/Stream.cc
index 91b91476..4983bad0 100644
--- a/poppler/Stream.cc
+++ b/poppler/Stream.cc
@@ -806,6 +806,11 @@ void MemStream::doDecryption(Guchar *fileKey, int keyLength,
}
}
+void MemStream::setNeedFree(GBool needsFree)
+{
+ needFree = needsFree;
+}
+
//------------------------------------------------------------------------
// EmbedStream
//------------------------------------------------------------------------
diff --git a/poppler/Stream.h b/poppler/Stream.h
index 2b8dfd25..605f8af6 100644
--- a/poppler/Stream.h
+++ b/poppler/Stream.h
@@ -318,6 +318,7 @@ public:
virtual void moveStart(int delta);
virtual void doDecryption(Guchar *fileKey, int keyLength,
int objNum, int objGen);
+ void setNeedFree(GBool needsFree);
private:
diff --git a/qt4/src/poppler-document.cc b/qt4/src/poppler-document.cc
index 5ff9d642..ab4f00bb 100644
--- a/qt4/src/poppler-document.cc
+++ b/qt4/src/poppler-document.cc
@@ -49,6 +49,28 @@ namespace Poppler {
DocumentData *doc = new DocumentData(new GooString(QFile::encodeName(filePath)),
new GooString(ownerPassword.data()),
new GooString(userPassword.data()));
+ return checkDocument(doc);
+ }
+
+ Document *Document::loadFromData(const QByteArray &fileContents,
+ const QByteArray &ownerPassword,
+ const QByteArray &userPassword)
+ {
+ // create stream
+ Object obj;
+ obj.initNull();
+ char *data = (char*)gmalloc(fileContents.length());
+ memcpy(data, fileContents.data(), fileContents.length() * sizeof(char));
+ MemStream *str = new MemStream(data, 0, fileContents.length(), &obj);
+ str->setNeedFree(true);
+ DocumentData *doc = new DocumentData(str,
+ new GooString(ownerPassword.data()),
+ new GooString(userPassword.data()));
+ return checkDocument(doc);
+ }
+
+ Document *Document::checkDocument(DocumentData *doc)
+ {
Document *pdoc;
if (doc->doc.isOk() || doc->doc.getErrorCode() == errEncrypted) {
pdoc = new Document(doc);
diff --git a/qt4/src/poppler-private.h b/qt4/src/poppler-private.h
index 9c23950e..b4e6cafc 100644
--- a/qt4/src/poppler-private.h
+++ b/qt4/src/poppler-private.h
@@ -66,9 +66,22 @@ namespace Poppler {
class DocumentData {
public:
DocumentData(GooString *filePath, GooString *ownerPassword, GooString *userPassword) :
- doc(filePath, ownerPassword, userPassword), m_fontInfoScanner(0),
- m_backend(Document::SplashBackend), m_outputDev(0)
+ doc(filePath, ownerPassword, userPassword)
{
+ init(ownerPassword, userPassword);
+ }
+
+ DocumentData(MemStream *str, GooString *ownerPassword, GooString *userPassword) :
+ doc(str, ownerPassword, userPassword)
+ {
+ init(ownerPassword, userPassword);
+ }
+
+ void init(GooString *ownerPassword, GooString *userPassword)
+ {
+ m_fontInfoScanner = 0;
+ m_backend = Document::SplashBackend;
+ m_outputDev = 0;
paperColor = Qt::white;
// It might be more appropriate to delete these in PDFDoc
delete ownerPassword;
diff --git a/qt4/src/poppler-qt4.h b/qt4/src/poppler-qt4.h
index 67b6b356..e716ac4e 100644
--- a/qt4/src/poppler-qt4.h
+++ b/qt4/src/poppler-qt4.h
@@ -441,6 +441,20 @@ namespace Poppler {
static Document *load(const QString & filePath,
const QByteArray &ownerPassword=QByteArray(),
const QByteArray &userPassword=QByteArray());
+
+ /**
+ Load the document from memory
+
+ \param fileContents the file contents. They are copied so there is no need
+ to keep the byte array around for the full life time of
+ the document.
+
+ \warning The application owns the pointer to Document, and this should
+ be deleted when no longer required.
+ */
+ static Document *loadFromData(const QByteArray &fileContents,
+ const QByteArray &ownerPassword=QByteArray(),
+ const QByteArray &userPassword=QByteArray());
/**
Get a specified Page
@@ -721,7 +735,9 @@ height = dummy.height();
private:
DocumentData *m_doc;
+
Document(DocumentData *dataA);
+ static Document *checkDocument(DocumentData *doc);
};
/**