Как я могу использовать Poppler-QML-плагин в моем приложении?
Привет, ребята, я нашел в этом хранилище
https://github.com/dept2/Poppler-QML-plugin
плагин qml для показа pdf-файла в qml-файл, но я не знаю, как его использовать, кто-то может мне помочь?
В версии Ubuntu 18.04 я нашел этот плагин с командной строкой sudo apt-cache search poppler и установил пакет, но у меня та же проблема, как я могу его использовать?
заранее спасибо
1 ответ
Есть 2 возможных метода:
1. Скомпилируйте и установите плагин:
Чтобы установить этот пакет, я должен установить плагин, чтобы сначала загрузить проект, открыть терминал в каталоге проекта и выполнить следующее:
qmake
make
sudo make install
Затем в.qml импортируйте модуль, Poppler
пункт обеспечивает imageProvider
поэтому вы должны использовать изображение, как показано ниже:
import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Layouts 1.11
import org.docviewer.poppler 1.0 // <--- import
import QtQuick.Dialogs 1.3
Window {
id: win
visible: true
width: 640
height: 480
title: qsTr("Poppler Example")
function urlToPath(urlString) {
var s
if (urlString.startsWith("file:///")) {
var k = urlString.charAt(9) === ':' ? 8 : 7
s = urlString.substring(k)
} else {
s = urlString
}
return decodeURIComponent(s);
}
FileDialog {
id: fileDialog
title: "Please choose a file"
folder: shortcuts.home
nameFilters: ["PDF files (*.pdf)", "All files (*)"]
onAccepted: timer.running = true
Component.onCompleted: visible = true
}
Timer {
id: timer
interval: 100; repeat: false
onTriggered: {
poppler.path = urlToPath(""+fileDialog.fileUrl)
view.focus = true
}
}
Poppler{
id: poppler
}
ListView{
id: view
height: parent.height
width: 100
model: poppler.numPages
delegate: Image{
id: image
width: parent.width
source: poppler.loaded? "image://poppler/page/" + (modelData+1): ""
sourceSize.width: width
MouseArea{
anchors.fill: parent
onClicked: {
image.ListView.view.currentIndex = index
image.ListView.view.focus = true
}
}
}
}
Flickable {
height: parent.height
anchors.left: view.right
anchors.right: parent.right
contentWidth: bigImage.width;
contentHeight: bigImage.height
boundsBehavior: Flickable.StopAtBounds
Image{
id: bigImage
sourceSize.width: win.width - view.width
source: (poppler.loaded && view.currentIndex >= 0)? "image://poppler/page/"+(view.currentIndex+1): ""
}
}
}
Выход:
2. Создать.pri
Я создал.pri, это простой способ прикрепить файлы к проекту:
Poppler-qml.pri:
INCLUDEPATH += $$PWD
SOURCES += \
$$PWD/pdfModel.cpp \
$$PWD/pageImageProvider.cpp
HEADERS += \
$$PWD/pdfModel.h \
$$PWD/pageImageProvider.h
unix|win32: LIBS += -lpoppler-qt5
Файлы должны иметь следующую структуру:
poppler-qml
├── pageImageProvider.cpp
├── pageImageProvider.h
├── pdfModel.cpp
├── pdfModel.h
└── poppler-qml.pri
А затем добавьте его в свой.pro:
...
include(poppler-qml/poppler-qml.pri)
и main.cpp:
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <pdfModel.h>
int main(int argc, char *argv[])
{
qputenv("POPPLERPLUGIN_DEBUG", "1"); /// enable debug
qmlRegisterType<PdfModel>("org.docviewer.poppler", 1, 0, "Poppler");
...
Например, в следующей ссылке вы можете найти пример.
Замечания:
В исходном коде плагина есть ошибка, потому что, если он запрашивает страницу, которая не существует, приложение должно вернуть QImagenulo, но, поскольку оно не выполняет проверку, приложение может быть повреждено.
page = document->page(numPage -1);
if(!page)
return result;