Qt - Wyświetlenie PDF w Qt

0

Chcę napisać przeglądarkę plików PDF które będą odczytywane z bazy danych.
Okno wygląda mniej więcej tak

screenshot-20201102213700.png

Jaka jest idea programu ?

  1. Użytkownik skanuje plik do jednego z formatów JPG, PNG lub PDF
  2. Zapisuje zeskanowany dokument do bazy
  3. Ktoś, kto kiedyś będzie szukał danych i będzie chciał wyświetlić dokument to program go otworzy.

Zestaw pytań jest taki

  1. W jaki sposób wyświetlić pliki typu PDF w Qt ?
  2. Czy do wyświetlenia PDF trzeba używać biblioteki zewnętrznej np poopler ?
  3. Jaki widget nada się na umieszczenie PDF-a w oknie ?
  4. Czy dysponuje ktoś przykładowym kodem, który wczytuje pliki PDF do programu i je wyświetla ?
0

https://doc.qt.io/qt-5/qtpdf-pdfviewer-example.html

Pamiętam, że Qt miał do niedawna problem ale to chyba bardziej z podpisaniem pdf-ów i wtedy korzystaliśmy z podofo.

1

problem w tym, że boję się tego ugryźć, bo chciałbym tą przeglądarkę napisać w ciągu paru dni, a nie w ciągu paru miesięcy... i tego się obawiam, dlatego liczę na jakąś szybką pomoc, co do linka to go znam

To druga opcja: robisz tak, że jak ktoś chce podejrzeć ten PDF, to ściągnij go fizycznie na komputer i za pomocą QProcess uruchom go w przeglądarce lub Adobe Reader

0

Jak rozumiem, chcesz wyświetlać wyłącznie PDF będące zeskanowanymi dokumentami, w takim przypadku proponuję zastanowić się nad sensem tego, czego szukasz.

Zeskanowany dokument to tak naprawdę obraz bitmapowy przedstawiający to, co się położy na skanerze. Nie wiem, skąd wzięła się od dawna jakaś moda na PDF, ale tak naprawdę, to jaki jest sens pakowania tego do PDF? Taki PDF to tak naprawdę na każdej stronie zawiera tą jedną bitmapę, więc to nie ma różnicy, czy jest to samodzielny JPG czy JPG zapakowany do PDF. Jak chcesz coś więcej robić z obrazem, np. skadrować, puścić OCR, to PDF troszeczkę komplikuje sprawę zamiast ją upraszczać.

To już lepiej dokumenty skanować do pliku PNG lub JPG (w zależności, jakie masz wymagania jakościowe). Taki plik możesz wyświetlić bez żadnego problemu na formularzu wykorzystując wyłącznie to, co daje Qt bez dodatkowych bibliotek i babrania się.

Jak dokument ma kilka stron, to albo masz serię plików JPG lub PNG, albo masz plik TIFF wielostronicowy, w którym każda strona jest bitmapą, która może być w formacie między innymi JPG lub LZW.

Sprawdź, czy w Qt da się osadzić "wnętrze" przeglądarki internetowej (ja nie pamiętam i nigdy tego nie potrzebowałem). Jeżeli da się, to proponuję https://github.com/mozilla/pdf.js/ tylko sprawdzić, i pewnie odpowiednio dostosować.

Czy chcesz tylko oglądać, czy coś więcej robić na tych plikach, np. nanosić jakieś oznaczenia? Czy nie ma przeszkód, żeby Twój program działał tak, że wydobywa PDF z bazy danych, zapisuje do tempa i uruchamia plik w standardowy sposób, czego efektem jest wyświetlenie pliku w programie skojarzonym z typem PDF?

0

@andrzejlisek:

(...) Nie wiem, skąd wzięła się od dawna jakaś moda na PDF (...)

stąd, że domyślnie kserokopiarki zapisują w tym formacie

0

Próbuję zrobić przykład PDF Viewer Example i niestety mam błąd jak na poniższym zrzucie

screenshot-20201103145537.png

ten błąd wyświetla się, bo w projekcie jest taka zmienna pdfwidgets

screenshot-20201103145659.png

czy ktoś z was wie jak rozwiązać ten problem ? Obszukałem i nic...

2

@andrzejlisek: > ##### andrzejlisek napisał(a):
Jak rozumiem, chcesz wyświetlać wyłącznie PDF będące zeskanowanymi dokumentami, w takim przypadku proponuję zastanowić się nad sensem tego, czego szukasz.

Zeskanowany dokument to tak naprawdę obraz bitmapowy przedstawiający to, co się położy na skanerze. Nie wiem, skąd wzięła się od dawna jakaś moda na PDF, ale tak naprawdę, to jaki jest sens pakowania tego do PDF? Taki PDF to tak naprawdę na każdej stronie zawiera tą jedną bitmapę, więc to nie ma różnicy, czy jest to samodzielny JPG czy JPG zapakowany do PDF. Jak chcesz coś więcej robić z obrazem, np. skadrować, puścić OCR, to PDF troszeczkę komplikuje sprawę zamiast ją upraszczać.

To ja powiem jaki ma sens.
PDF upraszcza o tyle, że jest już "skadrowany" do standardowej kartki (załóżmy A4) więc pani Zosia może kliknąć "Drukuj" i na 95% drukarka wypluje coś co przypomina kartkę źródłową i co nada się do schowania do skoroszytu. W pozostałych 5% pomoże "informatyk".
Obrazek JPG to jest loteria jak się na kartce wykadruje, bo każda przeglądarka obrazków ma inne wspaniałe pomysły na skalowanie, orientację papieru i rozmiar marginesów.

0

okazuje się, że moduł QtPDF jest płatny mogliby tak od razu pisać w tej dokumentacji, a nie człowiek traci cały dzień na szukanie rozwiązania...

0

Also available:
GPLv3
LGPLv3

Niżej jest też link do repo. LGPL to dość przyjemna licencja, nie możesz jej użyć?

0

no właśnie mam błąd kompilacji... bo to trzeba se zbudować

screenshot-20201103193705.png

1

A masz ściągnięte źródła Qt?

0

czy ktoś z was wie, gdzie Qt instaluje moduły ?

Chodzi mi o to, że w pliku z projektem dopisuje się pewne słowa kluczowe np

Qt += sql

i chciałbym wiedzieć gdzie takie moduły należy wrzucać.

0

To zależy jak instalowałeś Qt. Jeśli menadżerem systemowym to szukaj w /usr/lib/qt albo /usr/local/lib/qt albo innych systemowych lokacjach. Jeśli za pomocą instalatora to tam gdzie zainstalowałeś. Jak sam budowałeś to tam gdzie ustawiłeś prefix.

0

Od kilku dni próbuję zrobić QtPdf i nic mi z tego nie wychodzi. Próbuję skompilować pod windowsem na Qt5.15.1 według tej instrukcji i mam takie komunikaty

screenshot-20201109114847.png

czy ktoś z was wie jak to ruszyć ?

2

Próbujesz użyć toolchaina gcc/mingw, a komunikat błędu jest dość jednoznaczny...

0

screenshot-20201109133917.png
tutaj wiem, że muszę mieć MSVC

i mam to chyba nawet zainstalowane...

screenshot-20201109134244.png

co do obrazka poniżej

screenshot-20201109134323.png

to czy jak będzie ten MSVC to się skompiluje ?

1

Musisz odpalić linię komend Qt dla MSVC, a nie MinGW.

0

no dobra, odpaliłem ale mam taki komunikat

screenshot-20201109135337.png

co tam trzeba jeszcze konfigurować ? Bo naprawdę nie wiem...

2

A masz zainstalowany odpowiedni kompilator? Czy tylko Qt dla niego?

0

mam coś takiego. Co mam z tego zaznaczyć ? Bo szerze to nie mam pojęcia...

screenshot-20201109144123.png

2

Zapewne kompilowanie aplikacji klasycznych.

0

już coś sobie poradziłem, teraz następny problem... wymaga pythona zainstalowałem w wersji 2.7.18

screenshot-20201109154853.png

tutaj też trzeba gdzieś coś dopisywać ?

0

yeah, udało się

screenshot-20201109155542.png

czy to wszystko ? To się okaże

0

udało mi się zbudować PDF-a ale na windowsie. Mam pytanie w związku z tym. Na windowsa używa się MSVC, a pod linux nie ma Visual Code, więc czego się używa aby zbudować taki projekt ?

0

Zapewne gcc, wątpię aby było to problemem.

0

gcc działa, clang działa, ale przy nim chcesz unikać LTO — sygnały się czasem psują w dosyć brzydki sposób.

1 użytkowników online, w tym zalogowanych: 0, gości: 1