Fixed unicode paths handling when pdfium is used by using FPDF_LoadCustomDocument and QFile for handling the file access.

This commit is contained in:
Luis Ángel San Martín 2017-09-28 19:26:05 +02:00
parent 250dfe24e0
commit 515a45f8b7
2 changed files with 37 additions and 1 deletions

View File

@ -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<QFile *>(param);
file->seek(position);
qint64 numBytesRead = file->read(reinterpret_cast<char *>(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;

View File

@ -3,6 +3,7 @@
#include <QObject>
#include <QImage>
#include <QFile>
#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"