Ruslan Polupan
Ruslan Polupan6. April 2017 04:00

Сохранение PDF файла в БД

Генератором отчетов формирую печатную форму. Вывожу на печать параллельно сохраняю pdf файл отчета. Возникла необходимость сохранять pdf в базу данных. Чтобы по необходимости снова сохранить его на диск и вывести внешним просмотрщиком. Немного помог Qt/C++ - Урок 029 Изображение в базе данных в Qt – Сохранение и Восстановление Но что то я застопорился. Буду очень благодарен за любые подсказки.

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

11
Evgenii Legotckoi
  • 7. April 2017 00:31
  • Die Antwort wurde als Lösung markiert.

День добрый.
В общем подсказка такая:
На основе той статьи, я немного модифицировал код и сделал открытие pdf файла, а потом по клику по таблице выгружаю файл в определённую папку.

Код для сохранения файла в базу данных:

QString fileName = QFileDialog::getOpenFileName(this,
                                                "Get PDF",
                                                QStandardPaths::writableLocation(QStandardPaths::HomeLocation),
                                                tr("Pdf (*.pdf)"));

QFile file(fileName);
if (!file.open(QIODevice::ReadOnly))
    return;

QByteArray byteArray = file.readAll();

// Записываем файл в базу данных
db->insertIntoTable(QDateTime::currentDateTime().toString("dd.MM.yyyy_hh:mm:ss.png"), byteArray);

Восстанавливаем файл из базы данных:

QFile file("/path/to/file/some_pdf_file.pdf");
if (!file.open(QIODevice::WriteOnly))
{
    return;
}

file.write(model->data(model->index(index.row(), 2)).toByteArray());
file.close();
    Ruslan Polupan
    • 7. April 2017 02:24

    Спасибо за ответ. Я пока воспользовался функцией MySQL LOAD_FILE('file_name.pdf) правда пришлось для этого дать права пользователю БД на работу с файлами.

      Evgenii Legotckoi
      • 7. April 2017 02:59

      Ну. Лучше будет не давать пользователю никаких прав ))

        Ruslan Polupan
        • 26. April 2017 05:43

        Все оказалось еще проще. Оказывается в генераторе отчетов есть функция

         QByteArray  saveToByteArray();
        .
          Evgenii Legotckoi
          • 26. April 2017 05:53

          В Lime Report что ли? Так это третьесторонняя библиотека. Использование третьесторонней библиотеки - это не есть проще. Иначе? - Да. Проще? - Если подключить либу и разобраться с ней, возможно. Но разговора же не было о третьесторонней библиотеке.

            Ruslan Polupan
            • 26. April 2017 07:54

            Да LimeReport. Ничего больше толкового для создания печатных форм не нашел. А мне бланки надо формировать и хранить.

              Evgenii Legotckoi
              • 26. April 2017 08:03

              Понятно. Были сложности с подключением этой библиотеки? Или с пол оборота завелась?

                Ruslan Polupan
                • 26. April 2017 08:11

                Нет проблем не было. Собрал через Qt Creator Поместил в папку Qt/5.8/ в проект добавил

                LIMEREPORT_LIB_NAME = limereport
                ZINT_LIB_NAME = QtZint
                
                LIMEREPORT_DIR = $$[QT_INSTALL_PREFIX]/../LimeReport
                LIMEREPORT_LIBRARY_DIR = $$LIMEREPORT_DIR/lib
                
                INCLUDEPATH += $$LIMEREPORT_DIR/include
                
                ##message($$LIMEREPORT_DIR)
                
                LIMEREPORT_LIB_FILE = -L$$LIMEREPORT_LIBRARY_DIR -l$${LIMEREPORT_LIB_NAME}
                ZINT_LIB_FILE = -L$$LIMEREPORT_LIBRARY_DIR -l$${ZINT_LIB_NAME}
                
                LIBS += $$LIMEREPORT_LIB_FILE
                LIBS += $$ZINT_LIB_FILE
                Работает. Поначалу пытался рисовать отчеты в QPainter но возникли проблемы в том что страницы по разному выглядели в Win и в Linux
                  Evgenii Legotckoi
                  • 26. April 2017 09:13

                  То есть этот генератор отчётов формирует единообразные страницы под обоими системами? Хорошо, надо будет взять на заметку.

                    Ruslan Polupan
                    • 26. April 2017 09:18

                    Да. там фактически XML файл. Кроме этого мне понравилось что прямо в отчете можно обращаться к базе данных получать результаты запроса и размещать в нужной позиции.

                      Evgenii Legotckoi
                      • 26. April 2017 09:20

                      Да. Это весьма удобно, что к базе данных может обращаться.

                        Kommentare

                        Nur autorisierte Benutzer können Kommentare posten.
                        Bitte Anmelden oder Registrieren
                        Letzte Kommentare
                        A
                        ALO1ZE19. Oktober 2024 08:19
                        Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                        ИМ
                        Игорь Максимов5. Oktober 2024 07:51
                        Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                        d
                        dblas55. Juli 2024 11:02
                        QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                        k
                        kmssr8. Februar 2024 18:43
                        Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                        Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                        Jetzt im Forum diskutieren
                        J
                        JacobFib17. Oktober 2024 03:27
                        добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
                        JW
                        Jhon Wick1. Oktober 2024 15:52
                        Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
                        КГ
                        Кирилл Гусарев27. September 2024 09:09
                        Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
                        F
                        Fynjy22. Juli 2024 04:15
                        при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

                        Folgen Sie uns in sozialen Netzwerken