Autor Thema: PDFCreator 2.3.2 findet keinen PrintJob  (Gelesen 8193 mal)

Offline Badhei

  • Junior Mitglied
  • **
  • Beiträge: 56
  • Geschlecht: Männlich
PDFCreator 2.3.2 findet keinen PrintJob
« am: 28.09.16 - 15:02:43 »
Hallo Zusammen,

ich versuche gerade mit dem PDFCreator ein PDF Dokument über eine View zu erstellen. Dazu habe ich vier Agenten geschrieben die ich nacheinander aufrufe.

Agent 1: Startet alle weiteren Agenten nacheinander per Formelsprache.
     @PostedCommand([ToolsRunMacro]; "PDFCreator 2.32");
     @PostedCommand([ToolsRunMacro]; "PDFCreator 2.32 SelectAll");
     @PostedCommand([ToolsRunMacro]; "PDFCreator 2.32 Print")

Agent 2: Sucht die Dokumente die ich in einem PDF Dokument drucken möchte. Dazu kopiere ich die Dokumente aus einer anderen DB in die DB in der ich das PDF erstellen möchte. In der anderen DB kann ich die Agenten nicht erstellen da diese nicht mehr geändert werden darf.

Agent 3: Macht nur: @Command([EditSelectAll])

Agent 4: Anbei der Code zu diesem Agenten. Er springt mir immer ins else.
Der Code ist erstmal noch recht einfach um generell zu testen ob das erstellen funktioniert.
Nachdem das PDF erstellt wurde sollen die Dokumente wieder gelöscht werden und die nächsten Dokumente sollen in die DB kopiert werden und das nächste PDF erstellt werden.


Sub Initialize
   Dim ws As New NotesUIWorkspace
   Dim uiview As NotesUIView
   Dim oPDFQueue As Variant
   Dim oPDFJob

   On Error GoTo Fehler   
   Set oPDFQueue = CreateObject("PDFCreator.JobQueue")
   Call oPDFQueue.Initialize()
      
   Set UIView = ws.currentview
   Sleep 1
   
   Call Uiview.Print(0, , , , 2, , , , , )
   if  oPDFQueue.WaitForJob(2) then
      
      MsgBox CStr(oPDFQueue.count)
         
      Set oPDFJob = oPDFQueue.NextJob
   
      
      oPDFJob.ConvertTo("c:\temp\test.pdf")
      If oPDFJob.IsFinished = True Then
         oPDFQueue.ReleaseCom 'PDFCreator-Instanz beenden 
      End If
      
   Else
      MsgBox "Keine PrintJobs gefunden"
      oPDFQueue.ReleaseCom 'PDFCreator-Instanz beenden
   End If   
   
   
   Exit Sub
Fehler:   
   MsgBox "Fehlerzeile ->" + CStr(Erl) + "  Fehler ->" + CStr(Error)  + "  Fehlernr ->" + CStr(Err)
   Call oPDFQueue.ReleaseCom()
End Sub


Habt Ihr vielleicht eine Idee warum das PDF nicht erstellt wird?

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Re: PDFCreator 2.3.2 findet keinen PrintJob
« Antwort #1 am: 28.09.16 - 15:20:46 »
Gib mal den Drucker beim drucken an:
Code
Call Uiview.Print(0, , , , 2, , , , ,"PDFCreator" )
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline Badhei

  • Junior Mitglied
  • **
  • Beiträge: 56
  • Geschlecht: Männlich
Re: PDFCreator 2.3.2 findet keinen PrintJob
« Antwort #2 am: 04.10.16 - 15:20:18 »
... Code hat doch funktioniert.

Ich habe den PDFCreator noch einmal neu installiert, danach hat er dann das PDF erzeugt.

Offline Obrac

  • Senior Mitglied
  • ****
  • Beiträge: 279
  • Geschlecht: Männlich
Antw:PDFCreator 2.3.2 findet keinen PrintJob
« Antwort #3 am: 04.12.22 - 09:59:28 »
Mal eine weiterführende Frage zu diesem Themenkomplex: Es ist nicht möglich, per LS ein doc zu drucken, oder? Immer nur ein uidoc oder Dokumente aus einer uiView?

Offline CarstenH

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 672
  • Geschlecht: Männlich
Antw:PDFCreator 2.3.2 findet keinen PrintJob
« Antwort #4 am: 04.12.22 - 18:02:01 »
Mal eine weiterführende Frage zu diesem Themenkomplex: Es ist nicht möglich, per LS ein doc zu drucken, oder? Immer nur ein uidoc oder Dokumente aus einer uiView?

Ein "doc" ist lediglich eine Sammlung von Daten, Nullen und Einsen, Buchstaben, Zahlen ohne jegliche Logik und Ordnung.
Erst durch die Anwendungslogik und das Benutzerinterface wird daraus etwas Sinnvolles.

Technisch gesehen kannst du diese Daten auch ohne Masken oder UIViews zu einem Drucker schicken (Stichwort: Line Printer). Dann ersetzt aber deine Druckroutine bereits die Funktion der UIView indem sie entscheidet, was und in welcher Reihenfolge zum Drucker geschickt wird.

Wenn die Daten dann noch in irgendeiner Art formatiert und angeordnet werden sollen brauchst du irgendeine Präsentationslogik, du könntest per LS auch Word, Excel, Notepad oder einen Kommandozeilendrucker ansprechen aber dann ersetzen diese ebenfalls nur die Funktion die sonst das UIx hätte.

Ein übergeordneter Begriff zum Verständnis dafür wäre z.B. die Zwei- oder Drei-Schichten-Architektur. Welches Werkzeug man letztendlich für welche Schicht nimmt ist egal - sie sind austauschbar.

https://de.wikipedia.org/wiki/Schichtenarchitektur#Drei-Schichten-Architektur

HTH
Carsten

Offline Obrac

  • Senior Mitglied
  • ****
  • Beiträge: 279
  • Geschlecht: Männlich
Antw:PDFCreator 2.3.2 findet keinen PrintJob
« Antwort #5 am: 04.12.22 - 18:26:36 »
Hallo, Carsten,

ich glaube, ich verstehe deine Antwort nicht. Ist nicht der einzige Unterschied zwischen einem NotesUIDocument und einem NotesDocument der, dass ersteres im Frontend geöffnet ist und letzteres im Backend gespeichert? Die Information, welcher Maske das uidoc oder das doc zugrunde liegt, ist doch Teil der Daten, die darin gespeichert sind, oder?
Aber wenn ich dich richtig verstehe, ist ein doc, solange es nicht geöffnet ist, optisch unstrukturiert?
Wenn man aber Dokumente aus einer UIView druckt (kann man ja auch über die Benutzeroberfläche), druckt man doch eigentlich auch docs und keine uidocs, oder?

Offline CarstenH

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 672
  • Geschlecht: Männlich
Antw:PDFCreator 2.3.2 findet keinen PrintJob
« Antwort #6 am: 04.12.22 - 22:03:02 »
Ist nicht der einzige Unterschied zwischen einem NotesUIDocument und einem NotesDocument der, dass ersteres im Frontend geöffnet ist und letzteres im Backend gespeichert?

Nein, der Zusammenhang lässt sich am ehesten so darstellen:
uidoc = form + (doc) + x

Wobei x ein oder mehrere weitere UI Elemente (z.B. Teilmasken) und doc(s) sein können, da eine Maske ja beliebig weitere Daten nachladen (@Getdocfield) oder aus weiteren Datenbanken (@DbLookup), Systemen (DECS, ODBC) ziehen und in das Formular (=resultierendes UIDoc) einbetten kann die das doc gar nicht kennen kann/muss.

Die Information, welcher Maske das uidoc oder das doc zugrunde liegt, ist doch Teil der Daten, die darin gespeichert sind, oder?

Jaein. Ein doc hat zwar meistens (nicht immer) ein Form-Feld aber ob es überhaupt eine (oder mehrere) Maske(n) mit diesem Namen gibt und diese dann auch benutzt werden können/dürfen ist nicht sicher. Dokumente können auch embedded Forms haben, aber auch dann wird beim Öffnen ein uidoc daraus. Nutzer können bei geöffnetem Dokument die Maske über einen Menüpunkt wechseln - schon sieht das uidoc komplett anders aus, bei gleichem doc wohlgemerkt.
Beispiel: öffne eine Mail und wähle im Menü Ansicht > Maske wechseln... > Aufgabe

Aber wenn ich dich richtig verstehe, ist ein doc, solange es nicht geöffnet ist, optisch unstrukturiert?

Völlig richtig. Nicht nur optisch. Auch inhaltlich. Notes hat weder referentielle Integrität noch Datendefinitionen im klassischen RDBMS Sinn. Jedes doc kann andere Felder/Inhalte haben (oder auch nicht haben). Das gleiche Feld kann in einem doc eine Zahl, im nächsten eine Zeichenkette und im dritten nicht mal vorhanden sein. Und sprechend müssen Feldnamen auch nicht wirklich sein.

Wenn in einem doc ein Feld "Ort" mit dem Wert "Arktis" enthalten ist - was sagt uns das? Ohne den Rest der Anwendung erstmal nichts. Es könnte ein Geburtsort gemeint sein, ein Fundort oder ein Reiseziel.

Wenn man aber Dokumente aus einer UIView druckt (kann man ja auch über die Benutzeroberfläche), druckt man doch eigentlich auch docs und keine uidocs, oder?

Kommt drauf an. Man kann die View selbst drucken (also als Tabelle). Dann ist die UIView quasi das UIDoc, weil sie definiert was wohin gedruckt wird (und welche Teile weggelassen werden).

Oder man druckt über die View alle markierten Dokumente einzeln, dann ist die UIView nur ein Hilfsmittel zur Selektion und jedes Doc wird einzeln geöffnet und mit dem dabei verwendeten Formular (=UIDoc) gedruckt. Das muss aber nicht das sein, das im Formfeld steht. So gibt es viele Anwendungen die alternative Masken beim Drucken benutzen weil beim Drucken und Ausfüllen unterschiedliche Anforderungen stehen.

Oder - komplett andere Sicht - man speicht Werte von "docs" z.B. als txt oder csv im Dateisystem und druckt diese dann per LS/VBA per Excel oder Word als Serienbrief. Hier wären dann weder UIView noch UIDoc beteiligt. Wie das Ergebnis dann aussieht bestimmt hier ein Office-Formular.

Last but not least kann man ja auch Pages, XPages etc drucken - komplett ohne doc oder mit nachgeladenen Werten diverser docs.

HTH
Carsten
« Letzte Änderung: 04.12.22 - 22:27:07 von CarstenH »

Offline Obrac

  • Senior Mitglied
  • ****
  • Beiträge: 279
  • Geschlecht: Männlich
Antw:PDFCreator 2.3.2 findet keinen PrintJob
« Antwort #7 am: 06.12.22 - 11:02:15 »
Erst einmal danke für deine langen Ausführungen, die mir die Logik dieses Datenbanksystems wieder nähergebracht haben. Mein fehlendes Verständnis dafür, dass LS keine Methode für einen Backend-Druck anbietet, ist jetzt auf jeden Fall beseitigt und auch für zukünftige Vorhaben habe ich jetzt mehr Durchblick. Vielen Dank  :)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz