mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 13:59:52 +08:00
214 lines
6.0 KiB
C++
214 lines
6.0 KiB
C++
#ifndef VEXPORTER_H
|
|
#define VEXPORTER_H
|
|
|
|
#include <QObject>
|
|
#include <QPageLayout>
|
|
#include <QUrl>
|
|
#include <QWebEngineDownloadItem>
|
|
#include <QStringList>
|
|
|
|
#include "dialog/vexportdialog.h"
|
|
|
|
class QWidget;
|
|
class VWebView;
|
|
class VDocument;
|
|
|
|
class VExporter : public QObject
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
explicit VExporter(QWidget *p_parent = nullptr);
|
|
|
|
void prepareExport(const ExportOption &p_opt);
|
|
|
|
bool exportPDF(VFile *p_file,
|
|
const ExportOption &p_opt,
|
|
const QString &p_outputFile,
|
|
QString *p_errMsg = NULL);
|
|
|
|
bool exportHTML(VFile *p_file,
|
|
const ExportOption &p_opt,
|
|
const QString &p_outputFile,
|
|
QString *p_errMsg = NULL);
|
|
|
|
bool exportCustom(VFile *p_file,
|
|
const ExportOption &p_opt,
|
|
const QString &p_outputFile,
|
|
QString *p_errMsg = NULL);
|
|
|
|
int exportPDFInOne(const QList<QString> &p_htmlFiles,
|
|
const ExportOption &p_opt,
|
|
const QString &p_outputFile,
|
|
QString *p_errMsg = NULL);
|
|
|
|
int exportCustomInOne(const QList<QString> &p_files,
|
|
const ExportOption &p_opt,
|
|
const QString &p_outputFile,
|
|
QString *p_errMsg = NULL);
|
|
|
|
void setAskedToStop(bool p_askedToStop);
|
|
|
|
signals:
|
|
// Request to output log.
|
|
void outputLog(const QString &p_log);
|
|
|
|
private slots:
|
|
void handleLogicsFinished();
|
|
|
|
void handleLoadFinished(bool p_ok);
|
|
|
|
void handleDownloadRequested(QWebEngineDownloadItem *p_item);
|
|
|
|
private:
|
|
enum class ExportState
|
|
{
|
|
Idle = 0,
|
|
Cancelled,
|
|
Busy,
|
|
Failed,
|
|
Successful
|
|
};
|
|
|
|
|
|
enum NoteState
|
|
{
|
|
NotReady = 0,
|
|
WebLogicsReady = 0x1,
|
|
WebLoadFinished = 0x2,
|
|
Ready = 0x3,
|
|
Failed = 0x4
|
|
};
|
|
|
|
|
|
void initWebViewer(VFile *p_file, const ExportOption &p_opt);
|
|
|
|
void clearWebViewer();
|
|
|
|
void clearNoteState();
|
|
|
|
bool isNoteStateReady() const;
|
|
|
|
bool isNoteStateFailed() const;
|
|
|
|
bool exportViaWebView(VFile *p_file,
|
|
const ExportOption &p_opt,
|
|
const QString &p_outputFile,
|
|
QString *p_errMsg = NULL);
|
|
|
|
bool exportToPDF(VWebView *p_webViewer,
|
|
const QString &p_filePath,
|
|
const QPageLayout &p_layout);
|
|
|
|
bool exportToPDFViaWK(VDocument *p_webDocument,
|
|
const ExportPDFOption &p_opt,
|
|
const QString &p_filePath,
|
|
QString *p_errMsg = NULL);
|
|
|
|
bool exportToCustom(VDocument *p_webDocument,
|
|
const ExportCustomOption &p_opt,
|
|
const QString &p_filePath,
|
|
QString *p_errMsg = NULL);
|
|
|
|
bool exportToHTML(VDocument *p_webDocument,
|
|
const ExportHTMLOption &p_opt,
|
|
const QString &p_filePath);
|
|
|
|
bool exportToMHTML(VWebView *p_webViewer,
|
|
const ExportHTMLOption &p_opt,
|
|
const QString &p_filePath);
|
|
|
|
bool htmlsToPDFViaWK(const QList<QString> &p_htmlFiles,
|
|
const QString &p_filePath,
|
|
const ExportPDFOption &p_opt,
|
|
QString *p_errMsg = NULL);
|
|
|
|
bool convertFilesViaCustom(const QList<QString> &p_files,
|
|
const QString &p_filePath,
|
|
const ExportCustomOption &p_opt,
|
|
QString *p_errMsg = NULL);
|
|
|
|
void prepareWKArguments(const ExportPDFOption &p_opt);
|
|
|
|
int startProcess(const QString &p_program, const QStringList &p_args);
|
|
|
|
int startProcess(const QString &p_cmd);
|
|
|
|
// @p_embedImages: embed <img> as data URI.
|
|
bool outputToHTMLFile(const QString &p_file,
|
|
const QString &p_title,
|
|
const QString &p_headContent,
|
|
const QString &p_styleContent,
|
|
const QString &p_bodyContent,
|
|
bool p_embedCssStyle,
|
|
bool p_completeHTML,
|
|
bool p_embedImages);
|
|
|
|
// Fix @p_html's resources like url("...") with "file" or "qrc" schema.
|
|
// Copy the resource to @p_folder and fix the url string.
|
|
static bool fixStyleResources(const QString &p_folder,
|
|
QString &p_html);
|
|
|
|
// Fix @p_html's resources like url("...") with "file" or "qrc" schema.
|
|
// Embed the image data in data URIs.
|
|
static bool embedStyleResources(QString &p_html);
|
|
|
|
// Fix @p_html's resources like <img>.
|
|
// Copy the resource to @p_folder and fix the url string.
|
|
static bool fixBodyResources(const QUrl &p_baseUrl,
|
|
const QString &p_folder,
|
|
QString &p_html);
|
|
|
|
// Embed @p_html's resources like <img>.
|
|
static bool embedBodyResources(const QUrl &p_baseUrl, QString &p_html);
|
|
|
|
static QString getResourceRelativePath(const QString &p_file);
|
|
|
|
QPageLayout m_pageLayout;
|
|
|
|
// Will be allocated and free for each conversion.
|
|
VWebView *m_webViewer;
|
|
|
|
VDocument *m_webDocument;
|
|
|
|
// Base URL of VWebView.
|
|
QUrl m_baseUrl;
|
|
|
|
QString m_htmlTemplate;
|
|
|
|
// Template to hold the export HTML result.
|
|
QString m_exportHtmlTemplate;
|
|
|
|
NoteState m_noteState;
|
|
|
|
ExportState m_state;
|
|
|
|
// Download state used for MIME HTML.
|
|
QWebEngineDownloadItem::DownloadState m_downloadState;
|
|
|
|
// Arguments for wkhtmltopdf.
|
|
QStringList m_wkArgs;
|
|
|
|
bool m_askedToStop;
|
|
};
|
|
|
|
inline void VExporter::clearNoteState()
|
|
{
|
|
m_noteState = NoteState::NotReady;
|
|
}
|
|
|
|
inline bool VExporter::isNoteStateReady() const
|
|
{
|
|
return m_noteState == NoteState::Ready;
|
|
}
|
|
|
|
inline bool VExporter::isNoteStateFailed() const
|
|
{
|
|
return m_noteState & NoteState::Failed;
|
|
}
|
|
|
|
inline void VExporter::setAskedToStop(bool p_askedToStop)
|
|
{
|
|
m_askedToStop = p_askedToStop;
|
|
}
|
|
#endif // VEXPORTER_H
|