1 #include
"mupdf-document.h"
2 #include "mupdf-document_p.h"
4 #include "mupdf-page_p.h"
6 #include "mupdf-outline_p.h"
8 #include <mupdf/fitz.h>
25 DocumentPrivate *documentp;
29 documentp =
new DocumentPrivate(filePath);
32 else if (!documentp->context || !documentp->document) {
51 DocumentPrivate *documentp;
55 documentp =
new DocumentPrivate((
unsigned char *)bytes.data(), bytes.length());
58 else if (!documentp->context || !documentp->document) {
68 DocumentPrivate::DocumentPrivate(
const QString &filePath)
69 : context(NULL), document(NULL)
71 , b(-1), g(-1), r(-1), a(-1)
74 context = fz_new_context(NULL, NULL, FZ_STORE_UNLIMITED);
79 fz_register_document_handlers(context);
84 document = fz_open_document(context, filePath.toUtf8().data());
92 DocumentPrivate::DocumentPrivate(
unsigned char *bytes,
int len)
93 : context(NULL), document(NULL)
95 , b(-1), g(-1), r(-1), a(-1)
98 context = fz_new_context(NULL, NULL, FZ_STORE_UNLIMITED);
103 fz_register_document_handlers(context);
109 fz_stream* stream = fz_open_memory(context, bytes, len);
111 document = fz_open_document_with_stream(context,
".pdf", stream);
122 Document::~Document()
131 bool Document::needsPassword()
const
133 return fz_needs_password(d->document);
145 bool Document::authPassword(
const QString &password)
147 return fz_authenticate_password(d->document,
148 password.toLocal8Bit().data());
154 int Document::numPages()
const
159 ret = fz_count_pages(d->document);
175 Page * Document::page(
int index)
const
181 pagep =
new PagePrivate(d, index);
184 else if (!pagep->page) {
190 page =
new Page(pagep);
206 OutlinePrivate *outlinep;
208 o = fz_load_outline(d->document);
210 outlinep =
new OutlinePrivate(d, o);
211 d->outlines << outlinep;
221 QString Document::pdfVersion()
const
223 pdf_document *xref = (pdf_document *)d->document;
224 return QString::number(xref->version / 10.0f);
230 QString Document::title()
const
232 return d->info(
"Title");
238 QString Document::author()
const
240 return d->info(
"Author");
246 QString Document::subject()
const
248 return d->info(
"Subject");
254 QString Document::keywords()
const
256 return d->info(
"Keywords");
262 QString Document::creator()
const
264 return d->info(
"Creator");
270 QString Document::producer()
const
272 return d->info(
"Producer");
278 QDateTime Document::creationDate()
const
280 QString str = d->info(
"CreationDate");
285 return QDateTime::fromString(str.left(16),
286 "'D:'yyyyMMddHHmmss");
292 QDateTime Document::modDate()
const
294 QString str = d->info(
"ModDate");
299 return QDateTime::fromString(str.left(16),
300 "'D:'yyyyMMddHHmmss");
310 void Document::setTransparentRendering(
bool enable)
312 d->transparent = enable;
329 void Document::setBackgroundColor(
int r,
int g,
int b,
int a)
337 DocumentPrivate::~DocumentPrivate()
339 foreach (OutlinePrivate *outlinep, outlines) {
340 outlinep->deleteData();
342 foreach (PagePrivate *pagep, pages) {