PBToolboxAI v4 ← Site

pdfviewer — u_pbt_pdfviewer #

← Komponentenreferenz · Inhalt des Handbuchs

Integrierter PDF-Betrachter: zeigt ein lokales oder im Web veröffentlichtes Dokument direkt in Ihrem Fenster an, mit Seitennavigation, Zoom und Druckfunktion.

▶ Live ansehen — Demoanwendung, Kachel PDF viewer: die Vorschau, der zugehörige Code und diese Seite, nebeneinander.


Auf einen Blick #

Userobjectu_pbt_pdfviewer
Item-Klasse— (Komponente ohne Items)
WofürEine Rechnung, eine Bestellung, einen Vertrag oder eine Anleitung anzeigen, ohne eine externe Anwendung zu starten
Opt-in-Optionen—

Die Komponente ersetzt das klassische „PDF in eine temporäre Datei speichern und dann ShellExecute aufrufen“: Das Dokument bleibt in Ihrer Anwendung, und der Benutzer verlässt nie den aktuellen Bildschirm.


Schnellstart #

// open-Event des Fensters : ein auf der Festplatte vorhandenes Dokument anzeigen
uo_pdf.is_source = "C:\factures\FA-2026-0142.pdf"
// ue_load_completed-Event von uo_pdf : (string as_source)
uo_status.of_panel(/*key*/ "main").is_text = "Dokument angezeigt"

Das ist alles: is_source zu setzen genügt, um das Dokument zu laden und anzuzeigen.


Eigenschaften #

EigenschaftTypStandardZweck
is_sourcestring""Anzuzeigendes Dokument: ein Dateipfad (absolut, relativ zur Anwendung oder im Netzwerk; ein # gehört zum Namen), eine file:///-Adresse, eine Webadresse https://…, die als application/pdf ausgeliefert wird, oder eine data:application/pdf-Adresse. Das Setzen des Werts löst das Laden aus; "" zu setzen leert den Betrachter. Alles andere wird abgelehnt und über ue_load_failed gemeldet — auch http://. Wird so zurückgelesen, wie Sie es geschrieben haben
ii_pageinteger0Angezeigte Seite, ab 1 gezählt (0 = die erste Seite des Dokuments). Eine vor is_source gesetzte Seite gilt für dieses Dokument; sonst öffnet sich ein neues Dokument auf seiner ersten Seite. Jede Änderung lädt das Dokument neu und löst ue_load_completed erneut aus: Der Betrachter liest seine Seite nur beim Laden. Nur schreibend: Beim Auslesen erhalten Sie die zuletzt angeforderte Seite, nicht die angezeigte. Der Betrachter ist der der Web-Engine, und er meldet nichts zurück.
ii_zoominteger0Zoom in Prozent (0 = dem Betrachter überlassen). Ein gesetzter Zoom hebt is_fit auf, das ihm widerspricht. Nur schreibend, wie ii_page: Zoomt der Benutzer über die Leiste des Betrachters, folgt diese Eigenschaft nicht.
is_fitstring""Anpassung: FIT_PAGE, FIT_WIDTH, FIT_HEIGHT, oder "" für keine. Hebt ii_zoom auf
ib_viewer_toolbarbooleantrueZeigt die eigene Leiste des Betrachters (Seitenzahl, Zoom, Drucken, Herunterladen). Blenden Sie sie aus, wenn Ihr Fenster diese Befehle selbst trägt
ib_allow_savebooleantrueBietet die Befehle Speichern und Speichern unter der Leiste des Betrachters und seines Menüs an. Bei false wird das Dokument angezeigt, ohne anzubieten, eine Kopie zu speichern. Das ist kein Schutz: Die Datei bleibt auf der Festplatte lesbar. Jede Änderung lädt das angezeigte Dokument neu
ib_allow_printbooleantrueBietet den Befehl Drucken der Leiste des Betrachters und seines Menüs an. of_print druckt weiterhin: Ihre Anwendung entscheidet. Jede Änderung lädt das angezeigte Dokument neu
is_theme_stylestring""Visueller Stil der Komponente (Konstanten THEME_STYLE_*); leer = der der Anwendung, bei jeder Änderung übernommen
is_theme_modestring""Helle oder dunkle Variante (Konstanten THEME_MODE_*); leer = die der Anwendung, bei jeder Änderung übernommen
il_theme_accentlong-1Akzentfarbe dieser Komponente (-1 = Akzent der Anwendung, sonst der des Designs)

Methoden #

MethodeZweck
of_refresh ( )Liest das aktuelle Dokument erneut (von der Festplatte oder aus dem Netzwerk), ohne die Einstellungen anzutasten: der Weg, eine am selben Pfad neu erzeugte Datei anzuzeigen. Die Scrollposition bleibt nicht erhalten: Der Betrachter beginnt wieder bei ii_page. Nach einem Fehlschlag wird dasselbe Dokument erneut versucht. Ein abgelehntes Dokument wird erneut beurteilt: ue_load_failed wird erneut ausgelöst. Gibt 0 zurück, sobald angefordert, -4 ohne Dokument (is_source leer), -2, wenn die Komponente nicht erstellt ist
of_print ( ) · of_print (boolean)Öffnet die Druckvorschau des Dokuments — nicht der Seite, die es umrahmt. Liefert 0, sobald die Vorschau angefordert ist, -4, wenn kein Dokument angezeigt wird, -2, wenn die Komponente nicht erstellt ist. Das Argument hat hier keine Wirkung: Es ist immer die Vorschau des PDF-Betrachters
of_print_to_pdf (string)Gibt bei dieser Komponente -4 zurück, ohne etwas zu schreiben: Die gedruckte Seite wäre nur der Rahmen des Betrachters, nie das Dokument. Das Dokument ist bereits ein PDF: Kopieren Sie die Datei von is_source
of_reset ( )Leert den Betrachter und setzt alle Eigenschaften auf ihren Standard zurück. Liefert 0 nach der Anwendung, -2 wenn die Komponente nicht erzeugt ist
of_set_redraw (boolean)Fasst eine Folge von Änderungen zu einer einzigen Darstellung zusammen. Liefert 0 nach der Anwendung, -2 wenn die Komponente nicht erzeugt ist
of_save_as_png (string) · of_save_as_jpg (string)Exportiert die Darstellung als Bild. Liefert 0 nach dem Schreiben des Bildes, -4 wenn das Schreiben fehlschlägt, -2 wenn die Komponente nicht erzeugt ist

Events #

EventAusgelöst wenn
ue_load_completed (string as_source)Das Dokument wird angezeigt; as_source ist is_source, so wie Sie es geschrieben haben. Wird auch durch of_refresh und jede Änderung von Seite, Zoom, Anpassung oder Betrachterleiste ausgelöst. Nie bei einem Fehlschlag
ue_load_failed (string as_source, string as_reason)Das Dokument konnte nicht angezeigt werden; as_reason ist eine der unten stehenden Konstanten REASON_*. Der Betrachter bleibt leer
ue_link_clicked (string as_url)Der Benutzer ist einem Link im Dokument gefolgt. Der Betrachter bleibt beim Dokument: Öffnen Sie as_url, wo Sie möchten (Browser des Arbeitsplatzes, webbrowser…). as_url ist die Adresse des Links, wie sie ist (https://…, mailto:…); ein Link auf eine lokale Datei — auch relativ zum Dokument — kommt als Festplattenpfad an
ue_ready ( )Die Komponente ist fertig geladen; alles zuvor Gesendete wurde nachgespielt
ue_runtime_missing ( )Die WebView2-Runtime fehlt: die Komponente bleibt leer
ue_bg_color (long al_color)Die Komponente hat ihre Design-Hintergrundfarbe berechnet; das Userobject hat sie bereits übernommen (backcolor)

Warum ein Dokument nicht angezeigt wird #

as_reason von ue_load_failed ist eine dieser Konstanten von u_pbt_pdfviewer. Ein PDF wird so erkannt: Eine lokale Datei hat die Endung .pdf und beginnt mit der Signatur %PDF-; ein entferntes Dokument wird mit dem Typ application/pdf ausgeliefert (dem einzigen, den die Engine an ihren Betrachter übergibt); eine data:-Adresse kündigt application/pdf an.

KonstanteWertUrsache
REASON_NOT_FOUND"notfound"Datei fehlt oder ist nicht lesbar, Adresse antwortet mit 404
REASON_NOT_PDF"notpdf"Kein PDF: lokale Datei ohne die Signatur %PDF-, entfernte Antwort, die nicht application/pdf ist, data: eines anderen Typs
REASON_TOO_LARGE"toolarge"Datei zu groß für diesen Prozess (über 64 MB in 32 Bit, 512 MB in 64 Bit), oder eine data:-Adresse mit mehr als 2 MB Zeichen (etwa 1,5 MB PDF)
REASON_INSECURE"insecure"http://: nicht unterstützt, liefern Sie das Dokument über https:// aus
REASON_UNSUPPORTED"unsupported"Eine andere Art von Adresse (ftp:, blob:…)
REASON_NETWORK"network"Server nicht erreichbar, unbekannter Name, Verbindung unterbrochen
REASON_CERTIFICATE"certificate"Zertifikat der Website ungültig, abgelaufen oder widerrufen
REASON_AUTH"auth"Die Website oder der Proxy verlangt eine Authentifizierung
REASON_HTTP"http"Ein anderer Serverfehler (403, 500…)
REASON_REFUSED"refused"Die Website verweigert die Anzeige in einem Rahmen oder sendet das PDF als Download — die Datei wird deshalb nicht heruntergeladen
REASON_FAILED"failed"Jede andere Ursache

Was der Benutzer ohne eine einzige Zeile Code tun kann #

Der Betrachter zeigt seine integrierte Symbolleiste über dem Dokument an. Sie müssen nichts programmieren: Sie wird vom System bereitgestellt und lokalisiert.

AktionWie
SeitennavigationMausrad und Bildlaufleiste, oder direkte Eingabe der Seitenzahl im Zähler n / gesamt
ZoomSchaltflächen + / −, an Seite oder an Breite anpassen
SucheDie Suchschaltfläche der Symbolleiste, im Text des Dokuments
DruckenDruckerschaltfläche der Symbolleiste (mit ib_allow_print ausblendbar), oder of_print aus Ihrem Code
SpeichernDownload-Schaltfläche, um eine Kopie des Dokuments zu speichern (mit ib_allow_save ausblendbar)
DrehungDrehen der Seiten über das Menü der Symbolleiste
TastaturSobald die Komponente den Fokus hat (Tab oder of_focus_webview): Bild ab, die Pfeiltasten, Pos1 / Ende scrollen das Dokument, ohne vorherigen Klick

Die Tastenkürzel des Browsers — Strg+F, Strg+P, Strg + Mausrad — sind in allen Komponenten abgeschaltet, auch in dieser: Verwenden Sie die Schaltflächen der Leiste des Betrachters.

Was der Betrachter nicht mitteilt #

Der Betrachter ist der in die Web-Engine integrierte: nichts zu installieren, Drucken, Suche, PDF-Formulare und Vollbild inbegriffen. Im Gegenzug teilt er Ihrer Anwendung nichts mit: weder die angezeigte Seite noch die Seitenzahl, weder den tatsächlichen Zoom noch den markierten Text, und die Suche lässt sich nicht per Code steuern. ii_page und ii_zoom sagen, wo das Dokument geöffnet wird, nicht wo sich der Benutzer befindet. Das ist eine bewusste Entscheidung für 4.0; eine skriptfähige Darstellung bräuchte eine externe Bibliothek.


Beispiele #

Ein lokales Dokument öffnen #

// Absoluter Pfad, oder relativ zum Verzeichnis der Anwendung
uo_pdf.is_source = "doc\conditions-generales.pdf"

Ein im Web veröffentlichtes Dokument öffnen #

// Eine Webadresse wird genau wie eine lokale Datei geladen
uo_pdf.is_source = "https://www.monsite.fr/tarifs/catalogue-2026.pdf"

Eine Internetverbindung ist selbstverständlich erforderlich; das Laden erfolgt asynchron, ue_load_completed meldet Ihnen das Ende.

Das PDF anzeigen, das eine DataWindow gerade erzeugt hat #

// Local variables
string ls_file

// Eine Datei pro Tag, im temporaeren Ordner
ls_file = "C:\temp\report_" + String(Today(), "yyyymmdd") + ".pdf"

// Die DataWindow erzeugt die Datei...
dw_report.SaveAs(ls_file, PDF!, false)

// ...und der Betrachter zeigt sie sofort an
uo_pdf.is_source = ls_file

Nach der Neuerzeugung der Datei aktualisieren #

// Die Datei wurde am selben Ort neu geschrieben : neu laden, ohne is_source anzufassen
uo_pdf.of_refresh()

Mehrere Dokumente nacheinander im selben Betrachter anzeigen #

// ue_row_changed-Event von dw_list : den Anhang der aktuellen Zeile anzeigen
string ls_pdf

// Der Pfad des PDF der aktuellen Zeile
ls_pdf = dw_list.GetItemString(dw_list.GetRow(), "pdf_path")

// Ohne Anhang wird der Betrachter geleert ; sonst zeigt er ihn an
if ls_pdf = "" then
    uo_pdf.of_reset()          // kein Anhang : leerer Betrachter
else
    uo_pdf.is_source = ls_pdf
end if

Das Ende des Ladevorgangs verfolgen #

// ue_load_completed-Event von uo_pdf : (string as_source)
uo_wait.Hide()

// of_print druckt das angezeigte Dokument
uo_print_button.ib_enabled = true

Sagen, warum das Dokument nicht da ist #

// ue_load_failed-Event von uo_pdf : (string as_source, string as_reason)
uo_wait.Hide()
choose case as_reason
	case uo_pdf.REASON_NOT_FOUND
		uo_status.of_panel(/*key*/ "main").is_text = "Dokument nicht gefunden: " + as_source
	case uo_pdf.REASON_NOT_PDF
		uo_status.of_panel(/*key*/ "main").is_text = "Diese Datei ist kein PDF"
	case else
		uo_status.of_panel(/*key*/ "main").is_text = "Dokument nicht verfuegbar (" + as_reason + ")"
end choose
// ue_link_clicked-Event von uo_pdf : (string as_url)
// Der Betrachter bleibt beim Dokument : der Link oeffnet sich im Browser des Fensters
uo_web.is_address = as_url

Das Dokument drucken #

// clicked der Schaltflaeche Drucken : die Vorschau des PDF-Betrachters, auf dem Dokument selbst
if uo_pdf.of_print() = -4 then
	uo_status.of_panel(/*key*/ "main").is_text = "Kein Dokument zu drucken"
end if

Anzeigen, ohne Speichern oder Drucken zu erlauben #

// Ein vertrauliches Dokument : weder Speichern noch Drucken in der Leiste des Betrachters
uo_pdf.ib_allow_save = false
uo_pdf.ib_allow_print = false
uo_pdf.is_source = is_current_document

Setzen Sie sie vor is_source: Jede Änderung lädt das Dokument neu. Das ist kein Schutz: Die Datei bleibt auf der Festplatte lesbar, und of_print druckt weiterhin.

Vorschau in einer Registerkarte, neben der Eingabe #

// open-Event : der Betrachter belegt eine Registerkartenseite, die Eingabe die andere
uo_tab.of_add_page(/*key*/ "entry",  /*title*/ "Eingabe",   /*page*/ uo_page_entry)
uo_tab.of_add_page(/*key*/ "preview",  /*title*/ "Vorschau",   /*page*/ uo_page_preview)

// Der Betrachter wird wie jedes andere Steuerelement in uo_page_preview abgelegt
uo_pdf.is_source = is_current_document

Die Komponente lässt sich ohne besondere Vorkehrungen in einer tab oder in einem dockcontainer-Panel hosten.

Die Datei vor der Anzeige prüfen #

// Local variables
string ls_path

// Die Datei der angezeigten Rechnung
ls_path = "C:\factures\" + is_number + ".pdf"

// Keine Datei, nichts zu zeigen : den Betrachter leeren, statt das vorherige Dokument stehen zu lassen
if not FileExists(ls_path) then
    uo_pdf.of_reset()
    uo_status.of_panel(/*key*/ "main").is_text = "Rechnung nicht gefunden"
    return
end if

// Sonst wird die Rechnung angezeigt
uo_pdf.is_source = ls_path

Akzeptierte Formate und Pfade #

Form von is_sourceBeispielHinweis
Absoluter Pfad"C:\docs\contrat.pdf"Am zuverlässigsten
Relativer Pfad"doc\notice.pdf"Relativ zum Verzeichnis der Anwendung
Netzwerkpfad"\\serveur\partage\bon.pdf"Der Benutzer muss Leserechte besitzen
Name mit #"C:\devis\Devis #12.pdf"Das # gehört zum Dateinamen
file:-Adresse"file:///C:/docs/contrat.pdf"In einen Pfad umgewandelt, wie ein absoluter Pfad; auch file://localhost/C:/… und die UNC-Form mit vier Schrägstrichen file:////server/freigabe/…
Webadresse"https://…/catalogue.pdf"Als application/pdf ausgeliefert, asynchrones Laden. Ein in der Adresse geschriebenes #page=… wird ignoriert: Verwenden Sie ii_page
Dokument im Speicher"data:application/pdf;base64,…"Nichts wird auf die Festplatte geschrieben. Über 2 MB Zeichen (etwa 1,5 MB PDF) ue_load_failed mit REASON_TOO_LARGE: Schreiben Sie die Datei und geben Sie ihren Pfad an
http://-Adresse"http://intranet/bon.pdf"Nicht unterstützt: ue_load_failed mit REASON_INSECURE. Liefern Sie das Dokument über https:// aus
Leer""Leert den Betrachter

Diese Komponente unterstützt ausschließlich PDF: Alles andere wird abgelehnt und über ue_load_failed (REASON_NOT_PDF) gemeldet. Für ein Bild verwenden Sie picture; für eine HTML-Seite webbrowser.


Best Practices #

Vom gemeinsamen Sockel geerbt #

Diese Mitglieder gibt es bei jeder visuellen Komponente — sie sind nicht dieser eigen. Sie werden einmal in den übergreifenden Kapiteln beschrieben; diese Tabelle sagt nur, wo man sie liest.

MitgliederRolleBeschrieben in
of_resetDie Komponente zurücksetzen3.6 Eine Komponente zurücksetzen: of_reset()
of_register_shortcut · of_clear_shortcutsTastenkürzel der Komponente3.5 Tastenkombinationen
of_is_created · of_is_ready · of_get_last_errorOb sie entstanden ist, ob sie bereit ist, was fehlschlug3.7 Diagnose
of_save_as_png · of_save_as_jpgDie Darstellung als Bild exportieren3.8 Die Darstellung als Bild exportieren
of_set_redrawÄnderungen zu einem einzigen Neuzeichnen bündeln3.10 Best Practices
of_preload_iconsSymbole ohne VerzögerungSofortige Anzeige: of_icon
of_set_translationEine Beschriftung der Komponente übersetzen5.2 Eine Beschriftung anpassen: of_set_translation
of_focus_webviewDer Komponente den Fokus geben6.4 Tastatur und Fokus
of_print · of_print_to_pdfDrucken oder ein PDF schreiben6.9 Drucken
of_set_property · of_get_property · of_component_nameEine Eigenschaft über ihren Namen steuern3.1 Die Eigenschaften-Engine

Zwei Helfer werden nicht geerbt: of_icon und of_escape_markup liegen auf n_pbt_utils. Deklarieren Sie eines — n_pbt_utils lnv_utils, nichts zu erzeugen — und rufen Sie sie darauf auf.


← Komponentenreferenz · Inhalt des Handbuchs