Witam
Aby wyświetlić plik PDF w formularzu użytkownika, znalazłem w Internecie dwa główne rozwiązania: dodanie kontrolera "Adobe PDF Reader" lub dodanie kontrolera "WebBrowser" .
Wybrałem rozwiązanie polegające na dodaniu kontrolera "Adobe PDF Reader" , ale nie mogę go zmusić do działania. Oto procedura, którą zastosowałem:
- Instalowanie programu Acrobat Reader DC
- W edytorze VBA, na "Przybornik" => kliknij prawym przyciskiem myszy tło tego przybornika => "Dodatkowe kontrolki... " => zaznacz "Adobe PDF Reader"
=> Gdy chcę umieścić kontroler "Adobe PDF Reader" w formularzu użytkownika, pojawia się komunikat o błędzie: "Nie znaleziono elementu".
=> Jeśli ktoś ma odpowiednią procedurę i kod do korzystania z tego kontrolera "Adobe PDF Reader", bardzo by mi to pomogło.
Dziękuję za pomoc.
Witam
Nie mam tego problemu podczas dodawania formantu Adobe PDF Reader. Zasadniczo pokazuje mi puste pole, aby wyświetlić ścieżkę do pliku pdf: pdf1.loadfile "c:\xxxx".
Czy program Adobe Reader jest zainstalowany poprawnie? Może też problem z wersją.
Witam
Istnieje dość prosta metoda wstawiania obrazu do formularza użytkownika. Musisz umieścić obszar obrazu w swoim formularzu użytkownika, a następnie przejść do części kodu i zaimplementować to:
Image1.Picture = LoadPicture("C:\Users\bem1. DIMECOALIPRESSE\Pulpit\TinyStraightMaster\coucou.jpg")
ze ścieżką obrazu w formacie jpg.
Mam nadzieję, że ci pomogłem, powodzenia.
Dimitri.
1 polubienie
W końcu, po wykonaniu wielu testów, próbowałem znaleźć rozwiązanie polegające na dodaniu kontrolera "Adobe PDF Reader" do wyświetlania pliku PDF w formularzu użytkownika.
Przerzuciłem się więc na inne możliwe rozwiązanie: dodanie kontrolera "WebBrowser"
Dostałem się tam z następującym kodem:
Private Sub UserForm_Initialize()
Me.WebBrowser1.Navigate "about:blank"
Me.WebBrowser1.Document.write "<HTML><Body><embed src=""C:\xxxx\xxxxx\xxxxx\test 1.pdf"" width=""100%"" height=""100%"" /></Body></HTML>"
End Sub
Ta metoda pokazuje mi plik PDF z Adobe Acrobat Reader DC w formularzu użytkownika, ale problem , który nadal mam, polega na tym, że Adobe Acrobat Reader DC pokazuje mi wszystkie swoje paski narzędzi.
Nie mogę automatycznie wyświetlić pliku PDF w pełnym oknie/na pełnym ekranie (bez pasków narzędzi).
Ktoś ma na to rozwiązanie?
Witam
Udało mi się znaleźć rozwiązanie, musisz przejść od parametrów do dokumentu.
W miejsce następującego wiersza kodu:
Me.WebBrowser1.Document.write "<HTML><Body><embed src=""C:\xxxx\xxxxx\xxxxx\test 1.pdf"" width=""100%"" height=""100%"" /></Body></HTML>"
Półmisek:
Me.WebBrowser1.Navigate "C:\xxx\xxx.PDF#pagemode=none"
To właśnie #pagemode=none sprawia, że masz tylko dokument bez interfejsu.
Lista parametrów dostępna jest tutaj: http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/pdf_open_parameters.pdf
5 polubień
Dziękuję KVuilleumier !
Kod, który proponujesz, działa, z wyjątkiem czegoś (w moim przypadku), pozwól, że wyjaśnię:
1. Wyświetlane przeze mnie pliki PDF zawierają hiperłącza, które wyświetlają inne pliki PDF,
2. Zdecydowałem się na użycie "Przeglądarki internetowej" do nawigacji (WebBrowser1.GoBack/GoForward), która pozwala mi wyświetlić następujące i poprzednie pliki PDF.
W rezultacie, gdy wybieram łącze hipertekstowe, wyświetlany plik PDF nie jest w trybie pełnoekranowym, jeśli aktualizuję każdy ekran, dodając "#pagemode=brak" do ścieżki wyświetlanego pliku PDF, to nawigacja (WebBrowser1.GoBack/GoForward) przestaje działać.
To, co mi oferujesz KVuilleumier, to już dobry krok naprzód, ale jeśli uda mi się mieć FullScreen i nawigację GoBack/GoForward, byłoby świetnie.
Czy miałby sposób, aby przypisać to <pagemode=none> do przeglądarki (WebBrowser1), a nie do pliku pdf, który ma być wyświetlany? (Jeszcze mi się to nie udało)
Witam
Możliwość przetestowania kodu?
2 polubienia
Nie znam Twojego poziomu w VBA, ale zawsze masz możliwość samodzielnego napisania funkcji GoBack i GoForward poprzez zapamiętywanie linków (zdarzenie Scratch the WebBrowser). W ten sposób, gdy klikniesz w link, masz możliwość odświeżenia poprzez dodanie trybu strony, a następnie, aby wrócić, użyj swojej funkcji.
1 polubienie
Witam
Cyril.f, zamierzam umieścić trochę kodu, abyś mógł przetestować.
KVuilleumier, to właśnie zrobiłem: sam napisałem funkcje GoBack i GoForward.
Z drugiej strony nadal mam problem z wyświetlaniem linków hipertekstowych. Oto mój kod:
Private Sub UserForm_Initialize()
'J-affiche le 1ere PDF'
WebBrowser1.Navigate "C:\xxx\xxx\test.PDF#pagemode=none"
End Sub
'------------------------------------------------------------------------------------'
Private Sub WebBrowser1_TitleChange(ByVal Text As String)
'Si l-URL ne contient pas "#pagemode=none", je l-ajout et recharge la page'
If Right(WebBrowser1.LocationURL, 14) <> "#pagemode=none" Then
WebBrowser1.Navigate2 (WebBrowser1.LocationURL & "#pagemode=none")
End If
End Sub
Po wybraniu hiperłącza wyświetlany jest nowy plik PDF, ale nie w pełnym oknie/na pełnym ekranie.
Z drugiej strony, jeśli po wyświetleniu nowego pliku PDF kliknę przycisk CommandButton, który uruchamia odświeżanie , plik PDF umieści go w pełnym oknie/ekranie.
Private Sub CommandButton1_Click()
WebBrowser1.Refresh
End Sub
Próbowałem więc przeciągnąć tę przeglądarkę WebBrowser1.Refresh wszędzie, aby wyświetlić całe okno/ekran bez konieczności klikania przycisku. Ale nie ma mowy, nie mogłem tego zrobić.
Być może używam niewłaściwego zdarzenia WebBrowser, ale myślę, że przetestowałem prawie wszystko.
Ktoś ma rozwiązanie?
Kuriozalne wydarzenie:
W porównaniu do wcześniej przedstawionego kodu, jeśli dodam WebBrowser1.Refresh w zdarzeniu WebBrowser (tuż przed End If) nie działa, ale jeśli dodam również Msgbox "ok" (tuż przed WebBrowser1.Refresh) to działa po zamknięciu MsgBox.
Kod:
Private Sub UserForm_Initialize()
'J-affiche le 1ere PDF'
WebBrowser1.Navigate "C:\xxx\xxx\test.PDF#pagemode=none"
End Sub
'------------------------------------------------------------------------------------'
Private Sub WebBrowser1_TitleChange(ByVal Text As String)
'Si l-URL ne contient pas "#pagemode=none", je l-ajout et recharge la page'
If Right(WebBrowser1.LocationURL, 14) <> "#pagemode=none" Then
WebBrowser1.Navigate2 (WebBrowser1.LocationURL & "#pagemode=none")
MsgBox "ok"
WebBrowser1.Refresh
End If
End Sub
Bardzo dziwne, prawda?
Witam
Zamiast wyświetlać plik PDF, a następnie sprawdzać, czy jest na pełnym ekranie, dlaczego nie wykonasz testu przed jego wyświetleniem?
Dim Adresse As String
Adresse = "C:\xxx\xxx\test.PDF"
If Right(Adresse, 14) <> "#pagemode=none" Then
Adresse = (Adresse & "#pagemode=none")
End If
WebBrowser1.Navigate Adresse
Pozdrowienia
Witam
D.Roger, zgadzam się na ciebie, byłoby wspaniale, gdybym mógł to zrobić, ale w moim przypadku mi się nie udało.
Przypomnienie mojego przypadku: wyświetlam 1. plik PDF na pełnym ekranie (na razie nie ma problemu). Ten plik PDF zawiera hiperłącza, które wyświetlają inne pliki PDF, a kliknięcie jego hiperłączy uniemożliwia wyświetlenie nowych plików PDF na pełnym ekranie.
W tym, co proponujesz (jeśli dobrze zrozumiałem), powinienem być w stanie zatrzymać przekierowanie WebBrowser1.Navigate, gdy kliknę na hiperłącze podczas pobierania ścieżki, którą zwraca hiperłącze, aby je zmodyfikować (dodaj "#pagemode=brak") i ponownie uruchomić WebBrowser1.Navigate z nową zmodyfikowaną ścieżką.
Jeśli wiesz, jak to zrobić, udostępnij swój kod STP.
Witam
Nie wiem wystarczająco dużo o tego typu kontrolce i niestety nie mam do zaoferowania żadnego kodu, potrzebowałbym kodu twoich funkcji GoBack i GoForward, aby zobaczyć ...
Z drugiej strony, jeśli chodzi o twoje "Strange Event" to nie jest takie dziwne, próbujesz odświeżyć swoją stronę przed końcem jej ładowania, twój Msgbox "ok" (tuż przed WebBrowser1.Refresh) służy jako tempo, zastąp go na:
While WebBrowser1.ReadyState <> READYSTATE_COMPLETE Or WebBrowser1.Busy = True
DoEvents
Wend
Dzięki temu możesz poczekać, aż strona zakończy ładowanie przed odświeżeniem.
Pozdrowienia
3 polubienia
Dziękuję d.roger,
To jest to, czego mi brakowało, poza tym, że w moim kodzie pętla While/Wend wyrzuca błąd, więc użyłem pętli Do Until/Loop:
Do Until WebBrowser1.ReadyState = READYSTATE_COMPLETE Or WebBrowser1.Busy = False
DoEvents
Loop
Witam
Aby uniknąć błędu w pętli while, możesz również umieścić tylko:
WhileTrue
DoEvents
Wend
do otwierania lokalnych plików PDF oraz:
While WebBrowser1.ReadyState <> READYSTATE_COMPLETE
DoEvents
Wend
Do wyświetlania stron internetowych, jeśli to konieczne, stron, które są lepiej zabronione w makrze, chyba że zostaną podjęte wszystkie zabezpieczenia związane z przeglądaniem Internetu.
Do testów dołączam również fragment makra, który pozwala wyświetlić plik PDF w kontrolce "Adobe PDF Reader" odpowiadającej Twojemu początkowemu żądaniu, musisz go edytować i zmienić wiersz LoadPDF "C:\xxx\xxx.PDF#pagemode=none", 1, aby umieścić ścieżkę do pliku PDF.
Pozdrowienia
macroadobepdfreader.swp