要实现页面跳转,可以使用 Poppler 库提供的 Page 类和 Document 类。具体步骤如下:
- 加载 PDF 文档并获取 Document 对象。
Poppler::Document *doc = Poppler::Document::load(fileName);
- 获取目标页码对应的 Page 对象。
int targetPageNum = 5; // 目标页码
Poppler::Page *targetPage = doc->page(targetPageNum - 1); // 注意:页码从0开始编号
- 获取目标页码对应的矩形区域,并将其设置为当前视图区域。
QRectF targetRect = targetPage->pageRect(); // 以点为单位的矩形范围
QPointF targetTopLeft = targetRect.topLeft(); // 矩形左上角的坐标
view->setRenderHint(QPainter::Antialiasing); // 设置渲染选项
view->fitInView(QRectF(targetTopLeft, view->viewport()->size()), Qt::KeepAspectRatio); // 将目标区域缩放到视图大小,并保持宽高比例不变
以下是一个完整的示例代码:
#include <poppler/qt5/poppler-qt5.h>
#include <QMainWindow>
#include <QVBoxLayout>
#include <QPushButton>
#include <QGraphicsView>
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) {
QWidget *centralWidget = new QWidget(this);
setCentralWidget(centralWidget);
QVBoxLayout *layout = new QVBoxLayout(centralWidget);
QPushButton *button = new QPushButton("Jump to page 5", centralWidget);
layout->addWidget(button);
QGraphicsView *view = new QGraphicsView(centralWidget);
view->setRenderHint(QPainter::Antialiasing);
layout->addWidget(view);
connect(button, &QPushButton::clicked, [=]() {
// 加载PDF文档
QString fileName = "test.pdf";
Poppler::Document *doc = Poppler::Document::load(fileName);
// 获取目标页码对应的Page对象
int targetPageNum = 5;
Poppler::Page *targetPage = doc->page(targetPageNum - 1); // 页码从0开始编号
// 获取目标页码对应的矩形区域,并将其设置为当前视图区域
QRectF targetRect = targetPage->pageRect();
QPointF targetTopLeft = targetRect.topLeft();
view->fitInView(QRectF(targetTopLeft, view->viewport()->size()), Qt::KeepAspectRatio);
// 释放资源
delete targetPage;
delete doc;
});
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MainWindow win;
win.show();
return app.exec();
}
运行后,点击按钮即可跳转到第五页,并将该页缩放到视图大小。