#ifndef PDFCONTROLLER_H #define PDFCONTROLLER_H #include #include #include #include #include #include #include "../model/pageinfo.h" #include "../model/perechentablemodel.h" class MainController; class PerechenTableModel; class TitleInscriptionsModel; class ProjectParamTableModel; class SpecificationPCBTableModel; class SpecificationTableModel; class VedomostTableModel; class PDFController : public QObject { Q_OBJECT public: explicit PDFController(QObject *parent = nullptr); // Метод для экспорта перечня элементов в PDF bool exportPerechenToPdf(const QString &filePath, MainController *mainController); // Метод для экспорта спецификации PCB в PDF bool exportSpecificationPcbToPdf(const QString &filePath, MainController *mainController); // Метод для экспорта спецификации материалов в PDF bool exportSpecificationToPdf(const QString &filePath, MainController *mainController); // Метод для экспорта ведомости покупных изделий в PDF bool exportVedomostToPdf(const QString &filePath, MainController *mainController); // Новые методы для предварительного просмотра QList getPerechenPagesInfo(MainController *mainController); QList getSpecificationPcbPagesInfo(MainController *mainController); QList getSpecificationPagesInfo(MainController *mainController); QList getVedomostPagesInfo(MainController *mainController); // Методы для рисования страниц на painter bool drawPerechenPage(QPainter &painter, const PageInfo &pageInfo, MainController *mainController); bool drawSpecificationPcbPage(QPainter &painter, const PageInfo &pageInfo, MainController *mainController); bool drawSpecificationPage(QPainter &painter, const PageInfo &pageInfo, MainController *mainController); bool drawVedomostPage(QPainter &painter, const PageInfo &pageInfo, MainController *mainController); // Методы для генерации таблиц bool generateTableA4(const QString &filePath, MainController *mainController); bool generateTableA5(const QString &filePath, MainController *mainController); // Методы для генерации штампов ГОСТ bool generateGostStampA4(const QString &filePath, MainController *mainController); bool generateGostStampA5(const QString &filePath, MainController *mainController); // Утилитарные функции для работы с шрифтом ГОСТ static QFont createGostFont(int pointSize, bool bold = false, bool italic = false, int stretch = 100); static void drawTextWithGostFont(QPainter &painter, const QRectF &rect, const QString &text, int pointSize, Qt::Alignment alignment = Qt::AlignLeft); static void drawTextWithAutoSize(QPainter &painter, const QRectF &rect, const QString &text, int maxPointSize = 20); static void drawTextMultiline(QPainter &painter, const QRectF &rect, const QString &text, const QFont &font, int maxLines = 3); // Метод для получения значения надписи с учетом параметров проекта static QString getInscriptionValueWithProjectParams(const TitleInscriptionsModel* titleModel, const ProjectParamTableModel* projectParamModel, int inscriptionIndex); private: // Вспомогательные методы для создания PDF bool createPdfDocument(const QString &filePath, const QString &title); bool addGostFrameA4FirstPage(QPainter &painter, const QRectF &pageRect, const TitleInscriptionsModel* model, const ProjectParamTableModel* projectParamModel, int currentPage, int totalPages , int docType); bool addGostFrameA4(QPainter &painter, const QRectF &pageRect, const TitleInscriptionsModel* model, const ProjectParamTableModel* projectParamModel, int currentPage, int totalPages, int docType); bool addGostFrameA3(QPainter &painter, const QRectF &pageRect, const TitleInscriptionsModel* model, const ProjectParamTableModel* projectParamModel, int currentPage, int totalPages); bool addTitleInscriptions(QPainter &painter, TitleInscriptionsModel *titleModel, const QRectF &stampRect); bool addPerechenTable(QPainter &painter, PerechenTableModel *perechenModel, const QRectF &tableRect, MainController *mainController = nullptr); bool addPerechenTableRange(QPainter &painter, PerechenTableModel *perechenModel, const QRectF &tableRect, int startRow, int rowCount, MainController *mainController = nullptr); bool addSpecificationPcbTableRange(QPainter &painter, SpecificationPCBTableModel *specificationModel, const QRectF &tableRect, int startRow, int rowCount, MainController *mainController = nullptr); bool addSpecificationTableRange(QPainter &painter, SpecificationTableModel *specificationModel, const QRectF &tableRect, int startRow, int rowCount, MainController *mainController = nullptr); bool addVedomostTableRange(QPainter &painter, VedomostTableModel *vedomostModel, const QRectF &tableRect, int startRow, int rowCount, MainController *mainController = nullptr); bool addGostFrameA3FirstPage(QPainter &painter, const QRectF &pageRect, const TitleInscriptionsModel *model, const ProjectParamTableModel *projectParamModel, int currentPage, int totalPages); bool addListRegistrationTable(QPainter &painter,const QRectF &pageRect); // Вспомогательная функция для получения поджима ячейки static int getCellStretch(const QModelIndex &index, int defaultStretch); // Вспомогательная функция для получения флага подчеркивания ячейки static bool getCellUnderline(const QModelIndex &index, bool defaultUnderline = true); // Вспомогательная функция для рисования ячейки с учетом поджима void drawCellWithStretch(QPainter &painter, const QModelIndex &index, const QRectF &rect, const QString &text, int fontSize, int defaultStretch, const QFont &baseFont, Qt::Alignment alignment, MainController *mainController = nullptr); signals: // Сигнал о переполнении ячейки при отрисовке в PDF void cellOverflowDetected(const QModelIndex &index, bool isOverflow); }; #endif // PDFCONTROLLER_H