diff --git a/common/pdf_comic.cpp b/common/pdf_comic.cpp index 3f4f3f42..49aaacc2 100644 --- a/common/pdf_comic.cpp +++ b/common/pdf_comic.cpp @@ -1,6 +1,27 @@ #include "comic.h" #include "pdf_comic.h" + #if defined USE_PDFIUM && !defined NO_PDF + +int pdfRead(void* param, + unsigned long position, + unsigned char* pBuf, + unsigned long size) { + + QFile *file = static_cast(param); + + file->seek(position); + + qint64 numBytesRead = file->read(reinterpret_cast(pBuf), size); + + if(numBytesRead > 0) + { + return numBytesRead; + } + + return 0; +} + PdfiumComic::PdfiumComic() { FPDF_InitLibrary(); @@ -17,7 +38,19 @@ PdfiumComic::~PdfiumComic() bool PdfiumComic::openComic(const QString & path) { - doc = FPDF_LoadDocument(path.toLocal8Bit().constData(), NULL); + pdfFile.setFileName(path); + + if(pdfFile.open(QIODevice::ReadOnly) == false) + { + qDebug() << "unable to open file : " << path; + return false; + } + + fileAccess.m_FileLen = pdfFile.size(); + fileAccess.m_GetBlock = pdfRead; + fileAccess.m_Param = &pdfFile; + + doc = FPDF_LoadCustomDocument(&fileAccess, NULL); if (doc) { return true; diff --git a/common/pdf_comic.h b/common/pdf_comic.h index 290854aa..f82e1d2f 100644 --- a/common/pdf_comic.h +++ b/common/pdf_comic.h @@ -3,6 +3,7 @@ #include #include +#include #if defined Q_OS_MAC && defined USE_PDFKIT class MacOSXPDFComic @@ -37,6 +38,8 @@ class PdfiumComic private: FPDF_LIBRARY_CONFIG config; FPDF_DOCUMENT doc; + FPDF_FILEACCESS fileAccess; + QFile pdfFile; }; #else #include "poppler-qt5.h"