ich verwende VB.NET und das List & Label Preview Control zur Anzeige von “lst”-Dateien. Diese werden durch die Anwendung mit einigen Daten befüllt und per Print-Preview angezeigt. Außerdem sind Formularfelder enthalten, welche vom Anwender zu füllen sind.
Grundsätzlich kann der Anwender nun die Felder in der Vorschau ausfüllen mit Hilfe der im PreviewControl enthaltenen Toolbar auch als pdf Speichern. Hierzu muss er allerdings noch den Dateinamen selbst per Dialog angeben und auch das Speicherformat wählen. Dies würde ich gern automatisieren, heißt:
keine Anzeige der Toolbar vom PreviewControl (die kann ich nat. problemlos ausblenden),
Speichern als PDF über eine Funktion meiner Hauptanwendung OHNE weitere Rückfragen, da Dateiname und Speicherformat (PDF) durch die Anwendung vorgegeben werden,
resultierende PDF soll neben den automatisch eingetragenen Daten AUCH die Nutzereingaben der Formularfelder enthalten.
So wie ich die Dokumentation verstehe, sollte das möglich sein. Ich schaffe es bisher aber nur, entweder die PDF-Datei automatisch im Hintergrund zu erstellen (mit den Daten der Anwendung, ABER OHNE die Nutzereingaben) oder der Nutzer muss manuell über die Toolbar des Preview Controls speichern und den enstrechenden “Speichern unter”-Dialog nutzen (dann mit Daten UND Nutzeingaben).
Es wäre schön, wenn jemand einen Tip hätte, wie das Ganze korrekt funktioniert. Danke schonmal.
Hat denn niemand Erfahrung mit dem “automatisierten” PDF-Export samt Formularfelder oder suche ich hier nach einer Funktionalität die es gar nicht gibt?
Für einen derartigen Verwendungszweck kann die automatische Formularspeicherung angewendet werden. Die automatische Formularspeicherung greift jedoch ausschließlich beim Druck in die Vorschau, nicht aber beim Druck in ein PreviewControl. Beim Schließen der Vorschau kann dann eine PDF-Datei mit den entsprechenden Benutzereingaben erstellt werden. Der Code hierfür würde wie folgt aussehen:
[code]Private Sub LL_DefinePrintOptions(sender As System.Object, e As System.EventArgs) Handles LL.DefinePrintOptions
Dim ProjParam1 As ProjectParameter = LL.ProjectParameters.Item(LlProjectParameter.SaveAsFilename)
ProjParam1.ParameterType = LlProjectParameterType.Value
ProjParam1.Value = "C:\temp\myPDF.pdf"
LL.ProjectParameters.Add(ProjParam1)
Dim ProjParam2 As ProjectParameter = LL.ProjectParameters.Item(LlProjectParameter.SaveAsFormat)
ProjParam2.ParameterType = LlProjectParameterType.Value
ProjParam2.Value = "PDF"
LL.ProjectParameters.Add(ProjParam2)
Dim ProjParam3 As ProjectParameter = LL.ProjectParameters.Item(LlProjectParameter.SaveAsShowDialog)
ProjParam3.ParameterType = LlProjectParameterType.Value
ProjParam3.Value = "0"
LL.ProjectParameters.Add(ProjParam3)
Dim ProjParam4 As ProjectParameter = LL.ProjectParameters.Item(LlProjectParameter.SaveAsNoSaveQuery)
ProjParam4.ParameterType = LlProjectParameterType.Value
ProjParam4.Value = "1"
LL.ProjectParameters.Add(ProjParam4)
End Sub[/code]
Weitere Informationen hierzu finden Sie in der Programmierer-Referenz in Kapitel “8.4.4. Automatische Formularspeicherung”.
Mit freundlichen Grüßen
Christian Rauchfuß
Technischer Support
combit GmbH
Vielen Dank. Grundsätzlich funktioniert die PDF-Erzeugung damit tatsächlich. Allerdings erstellt er trotz der Einstellungen die Datei nicht in dem angegebenen Verzeichnis (sondern in dem der Anwendung) und die erstellte Datei erhält keine Dateiendung - weder bei expliziter Angabe von “.pdf” noch falls der Dateiname ohne Endung angegeben wird.
Außerdem versucht er die Datei sofort zu öffnen. Da die Endung fehlt, erscheint der Standard-Windows-Dialog für das Öffnen einer Datei unbekannten Types. Am liebsten wäre es mir aber, wenn das automatische Öffnen der erzeugten Datei sowieso unterbleibt.
Bitte prüfen Sie einmal die Ausgaben im Debwin-Logfile bzgl. des Datei-Pfades und Datei-Endung. Welche LL-Version haben Sie im Einsatz? Mit der aktuellen Version 18.005 ließ sich ein solches Verhalten nicht nachstellen.
Das Öffnen der Datei kann mit einem nicht dokumentierten Projektparameter “SaveAs.ExecApp” unterbunden werden. Hierfür gibt es eine Überladung, die einen String statt des Enum-Wertes auswertet:
Dim ProjParam5 As ProjectParameter = LL.ProjectParameters.Item("SaveAs.ExecApp")
ProjParam5.ParameterType = LlProjectParameterType.Value
ProjParam5.Value = "0"
LL.ProjectParameters.Add(ProjParam5)
Mit freundlichen Grüßen
Christian Rauchfuß
Technischer Support
combit GmbH