Direkter Ausdruck ohne Vorschau

Hallo zusammen,

ich verwende List&Label30 und will verschiedene Labels drucken. Das Design der Labels habe ich über eine lst-Datei im L&L Designer erstellt, der ein JSON-Objekt als Datenquelle nutzt. Über ein weiteres JSON-Objekt, das als Parameter für die Druckmethode auf dem Server verwendet wird (die der REST-Service aufruft), werden notwendige Daten wie z. B. Versandnummer und Druckername dynamisch mitgegeben.

Hier ist ein Ausschnitt der C# Logik:

if (dataSource != null)
{
    using (var listLabel = new ListLabel())
    {
        string moduleName = jsonData.GetModuleName();
        var template = GetReportTemplateFilePath($"{moduleName}.lst");
        listLabel.LicensingInfo = GetAppSettingsStringValue(LicenceKey);
        listLabel.DataSource = new JsonDataProvider(JsonSerializer.Serialize(dataSource));
        listLabel.Printerless = true;
        
        if (!string.IsNullOrEmpty(jsonData.PrinterName))
        {
            listLabel.AutoShowPrintOptions = false;
            listLabel.AutoShowSelectFile = false;
            listLabel.Print(jsonData.PrinterName, LlProject.List, template);
        }
    }
}

Die Idee dabei war, zwar bei der Print()-Methode den Drucker dynamisch mitzugeben, die Vorschau aber zu überspringen. die AutoShowPrintOptions und AutoShowSelectFile Properties auf false zu setzen, habe ich in anderen Forumeinträgen gefunden. Diese haben aber, soweit ich gesehen habe, nichts bewirkt.

Sobald die Print()-Methode aufgerufen wird, erscheint ein Preview-Fenster, über dass ich dann für den einzelnen Druckauftrag über Rechtsklick auf das Drucksymbol (siehe Bild unten) entscheide, mit welchem Drucker ich drucken muss, da der Standard-Drucker nicht der richtige ist. Es soll über einen CAB-Drucker gedruckt werden.

Nach Drucken über die Vorschau mit eingestelltem Drucker, druckt er tatsächlich auch (wenn auch versetzt nach unten mitsamt einer Leerseite, aber das ist ein Thema für einen anderen Forumeintrag :grinning_face_with_smiling_eyes:), da die Logik aber auf dem Server abgebildet ist, sollte es über den hinterlegten Drucker automatisch im Hintergrund drucken, ohne das der User es noch jedes mal extra bestätigen muss.

Jetzt frage ich mich, ob ich vielleicht nicht ganz verstanden habe, was genau in dem Parameter PrinterName in der Print()-Methode eingefügt gehört. Ich verwende hier den DNS-Namen des Druckers, der auf dem Server konfiguriert ist.

Wie muss ich meinen Code umschreiben? Ist das was ich vorhabe überhaupt möglich?

VG Dani

Hallo,

schon versucht die AutoDestination-Eigenschaft auf Normal vorher noch zu setzen?

Ja, das habe ich auch probiert. Dabei kommt folgende Exception:

combit.Reporting.LL_Printing_Exception: Während des Druckens ist ein allgemeiner Fehler aufgetreten. Prüfen Sie die Projektdatei und die Datenquelle.

Printerless und physicher Druck auf einen bestimmten Drucker widersprechen sich für mich.

2 Likes

Printerless muss rein logisch auf true gesetzt sein, damit für den CAB-Drucker passende Label Höhe und Breite eingestellt werden kann. Außerdem wird das, soweit ich weis, auch für Druckvorgänge, die vom Server und nicht vom Client verarbeitet werden, verwendet. Falls ich das falsch verstanden habe, bitte korrigieren.

Ok, ich habe meinen Denkfehler jetzt verstanden.

listLabel.Printerless = true;

Diese Option muss beim Erstellen des Designs über den List&Label Designer gesetzt sein, damit in der Vorschau und im Designer das Layout-Format passt.

Beim tatsächlichen Druck muss man diese Option (solange die Druckertreiber auf dem Server installiert wurden) NICHT mitangeben. Dann druckt er ohne Vorschau-Fenster, auch wenn man da einfach die DNS anspricht.