# 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 #

Userobject | `u_pbt_pdfviewer`
Item-Klasse | — (Komponente ohne Items)
Wofür | Eine 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_statut.of_item("main").is_text = "Dokument angezeigt"

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

## Eigenschaften #

Eigenschaft | Typ | Standard | Zweck
--- | --- | --- | ---
`is_source` | string | `""` | Anzuzeigendes Dokument: ein Dateipfad auf der Festplatte (absolut oder relativ zur Anwendung) oder eine Webadresse (`https://…`). Das Setzen des Werts löst das Laden aus; `""` zu setzen leert den Betrachter
`ii_page` | integer | `0` | Angezeigte Seite, ab 1 gezählt (`0` = die erste Seite des Dokuments). Das Laden eines anderen Dokuments setzt sie zurück: die Seite des vorherigen zu behalten ließe den Leser mitten in einer gerade geöffneten Datei landen. 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_zoom` | integer | `0` | Zoom 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_fit` | string | `""` | Anpassung: `FIT_PAGE`, `FIT_WIDTH`, `FIT_HEIGHT`, oder `""` für keine. Hebt `ii_zoom` auf
`ib_viewer_toolbar` | boolean | `true` | Zeigt die eigene Leiste des Betrachters (Seitenzahl, Zoom, Drucken, Herunterladen). Blenden Sie sie aus, wenn Ihr Fenster diese Befehle selbst trägt
`is_theme_style` | string | `fluent` | Visueller Stil der Komponente (Konstanten `THEME_STYLE_*`)
`is_theme_mode` | string | `light` | Helle oder dunkle Variante (Konstanten `THEME_MODE_*`)
`il_theme_accent` | long | `-1` | Akzentfarbe dieser Komponente (`-1` = Akzent des Designs)

## Methoden #

Methode | Zweck
--- | ---
`of_refresh ( )` | Lädt das aktuelle Dokument neu — zum Beispiel nachdem die Datei auf der Festplatte neu erzeugt wurde
`of_reset ( )` | Leert den Betrachter und setzt alle Eigenschaften auf ihren Standard zurück
`of_set_redraw (boolean)` | Fasst eine Folge von Änderungen zu einer einzigen Darstellung zusammen
`of_save_as_png (string)` · `of_save_as_jpg (string)` | Exportiert die Darstellung als Bild

## Events #

Event | Ausgelöst wenn
--- | ---
`ue_load_completed (string as_source)` | Das Dokument wurde fertig geladen; `as_source` gibt an, was angezeigt wurde
`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`)

## 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.

Aktion | Wie
--- | ---
Seitennavigation | Mausrad und Bildlaufleiste, oder direkte Eingabe der Seitenzahl im Zähler `n / gesamt`
Zoom | Schaltflächen `+` / `−`, `Strg` + Mausrad, an Seite oder an Breite anpassen
Suche | `Strg+F` im Text des Dokuments
Drucken | Druckersymbol in der Symbolleiste, oder `Strg+P`
Speichern | Schaltfläche zum Herunterladen, um eine Kopie des Dokuments zu sichern
Drehung | Drehen der Seiten über das Menü der Symbolleiste

## 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 #

    string ls_fichier

    ls_fichier = "C:\temp\etat_" + String(Today(), "yyyymmdd") + ".pdf"

    // Die DataWindow erzeugt die Datei...
    dw_etat.SaveAs(ls_fichier, PDF!, false)

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

### 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_liste : den Anhang der aktuellen Zeile anzeigen
    string ls_pdf

    ls_pdf = dw_liste.GetItemString(dw_liste.GetRow(), "chemin_pdf")

    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_attente.Hide()
    uo_imprimer.ib_enabled = true

### Vorschau in einer Registerkarte, neben der Eingabe #

    // open-Event : der Betrachter belegt eine Registerkartenseite, die Eingabe die andere
    uo_tab.of_add_page("saisie",  "Eingabe",   uo_page_saisie)
    uo_tab.of_add_page("apercu",  "Vorschau",   uo_page_apercu)

    // Der Betrachter wird wie jedes andere Steuerelement in uo_page_apercu abgelegt
    uo_pdf.is_source = is_document_courant

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

### Die Datei vor der Anzeige prüfen #

    string ls_chemin

    ls_chemin = "C:\factures\" + is_numero + ".pdf"

    if not FileExists(ls_chemin) then
        // Nichts zu zeigen : den Betrachter leeren, statt das vorherige Dokument stehen zu lassen
        uo_pdf.of_reset()
        uo_statut.of_item("main").is_text = "Rechnung nicht gefunden"
        return
    end if

    uo_pdf.is_source = ls_chemin

## Akzeptierte Formate und Pfade #

Form von `is_source` | Beispiel | Hinweis
--- | --- | ---
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
Webadresse | `"https://…/catalogue.pdf"` | Asynchrones Laden, Verbindung erforderlich
Leer | `""` | Leert den Betrachter

Diese Komponente unterstützt ausschließlich PDF: für ein Bild verwenden Sie picture; für eine HTML-Seite webbrowser.

## Best Practices #

- Prüfen Sie, ob die Datei existiert, bevor Sie `is_source` zuweisen: Ein ungültiger Pfad lässt den Betrachter einfach leer, ohne blockierenden Fehler.
- Rufen Sie `of_reset()` auf, wenn kein Dokument mehr angezeigt werden soll (Wechsel zu einer Zeile ohne Anhang): sonst bleibt das vorherige Dokument sichtbar.
- Bevorzugen Sie `of_refresh()` gegenüber einer erneuten Zuweisung von `is_source`, um dasselbe Dokument neu zu laden: Das ist schneller, und die Leseposition wird sauber wiederhergestellt.
- Sehen Sie eine Wartanzeige für entfernte oder umfangreiche Dokumente vor und blenden Sie sie bei `ue_load_completed` aus.
- Geben Sie der Komponente eine großzügige Fläche (mindestens die Hälfte des Fensters): Die integrierte Symbolleiste und das Dokument brauchen Platz, um lesbar zu bleiben.
- Um eine Webseite statt eines PDF anzuzeigen, verwenden Sie webbrowser; für ein Bild picture.

← Komponentenreferenz · Inhalt des Handbuchs