Wątek przeniesiony 2022-05-19 16:21 z Inne języki programowania przez cerrato.

VBA wyświetlanie pliku JPEG w kontrolce WebBrowser

0

Witam, proszę o pomoc w poniższym temacie:
Przygotowałem formatkę w której umieściłem kontrolkę Webbrowser. I wczytuje do niej 2 rodzaje plików JPEG i PDF. Mam bazę dokumentów (faktur) i w jednej formatce wyświetlam dane dokumentu które zapisałem w bazie a w drugiej formatce wyświetlam skan dokumentu. W bazie danych w tabeli mam zapisane ścieżki do odpowiednich plików i wybieram plik i wczytuję do Webbrowser. I jeśli wczytuje plik pdf to nazwijmy to ładnie sie skaluje strona w kontrolce czyli widać całą stronę. Niestety przy jpeg wczytuje sie to tak że widać powiedzmy 1/4 dokumentu. Plik JPEG jest skanem faktury więc w oryginale jest to jedna strona a4. Oczywiście pojawiają się automatyczne scrolle i można trzymając ctrl scrollem muszky zmnienić wyświetlany rozmiar ale chciałbym żeby zaraz po wczytaniu plik jpeg "dopasował" się do wielkości okna kontrolki Webbrowser.
Pliki do kontrolki wczytuję metodą Navigate2, przy Navigate takie samo działanie. Kontrolka ma rozmiar szerokość 650 i wysokość 700 więc fv wielkości a4 byłby widoczny
Niestety nie udało mi się znaleźć opcji czy sposobu jak to zrobić.
Proszę o podpowiedź czy jest możliwość żeby podczas wczytywania pliku JPEG do Webbrowser ustawić ręcznie wymiary tego pliku? Albo czy można wpisać żeby na start było powiększenie 100% albo dopasowało sie do rozmiarów kontrolki Webbrowser?
Z góry wielkie dzięki za wszelkie rady.

1

Nie mam VBA więc może coś będzie nieco inaczej ale WebBrowser to WebBrowser więc w VBA będzie analogicznie:

Wklej do WebBrowsera cały HTML z linkiem do obrazka t.j.:

TmpString =

<html>
<body style='width:100%;'>
  <div style='width:100%;height:100%'>
  <img src='TWOJ_OBRAZEK.JPG' style='width:100%;height:100%;object-fit:contain;' alt=''>
</body></html>

Kod możesz wkleić na 2 sposoby:

WebBrowser1.Document.body.innerHTML = TmpString

albo

WebBrowser1.Document.Write (TmpString)
0

Dzięki wielkie za tak szybką podpowiedź. :)
Przydała się bardzo, zrobiłem zgodnie ze wskazówką i poszło. Teraz obrazek wczytuje się cały w kontrolce czyli jak ustawiłem rozmiar WebBrowsera taki że jest strona A4 czytelna to skan faktury się dopasowuje do kontrolki i cała strona jest widoczna.
Jeszcze została mi zagwostka taka że mimo iż jest wczytany cały obraz dopasowany do kontrolki to jak kliknę na nim prawym i drukuj to mimo iż próbowałem w preferencjach drukowania ustawić dopasowanie do strony to drukuje się tylko fragment obrazka. Taki sam jak wczytywał mi się pierwotnie na starcie bez dopasowania. Czy to też w tym TmpString można jakoś ustawić? Jeśli nie to zawsze można zapisać obraz na dysk i dopiero wydrukować jeśli będzie taka potrzeba.

Poniżej wklejam swój kod, w nim zrobiłem podział na pliki JPG i na PDF. W zmiennej typ_pliku wcześniej na podstawie zapisanej w bazie nazwy pliku odczytuje jaki to format i następnie w zależności od niego 2 wywołania WebBrowsera. W zmiennej TmpString link do obrazka podaję poprzez zmienną, w zależności który plik użytkownik wybierze. Może sie komuś ten fragment przyda :)

    If UCase(typ_pliku) = "JPG" Then
        
        TmpString = "<html><body style='width:100%;'><div style='width:100%;height:100%'><img src='" & StrSciezkaSkan & "' style='width:100%;height:100%;object-fit:contain;' alt=''></body></html>"
        Form_skan.WebBrowser_skan.Navigate2 (StrSciezkaSkan)
        Form_skan.WebBrowser_skan.Document.Write (TmpString)
    
    Else

        Form_skan.WebBrowser_skan.Navigate2 (StrSciezkaSkan)
    End If

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