beim Drucken zusätzlich PDF-File erstellen
Markus Rewak
Hallo,kann man (evtl. per script) das ausgedruckte Dokument zustätzlich noch autmatisch als PDF exportieren?
Wichtig wäre mir hierbei dass ich den Pfad als auch Dateinamen selbst bestimmen kann.
Einen zusätzlichen PDf-Drucker in die Printdefinition einbinden funktioniert zumindest nicht mit freepdf, weil man dort zwar den Pfad festlegen kann aber nicht den Dateinamen.
Am liebsten wäre mir eine Lösung per Script, weil ich im Scripting noch Einträge in die DB machen muss für eine anschliessende Archivierung.
Vielen Dank im voraus
Markus
Philipp Knecht
Hi MarkusJa das geht. Du kannst in der Printdefinition einen Export Pfad angeben (Im Email/Fax - Register).
Dann machst du folgendes im CommonScript:
[quote]Private Sub LD_AfterPrint(company As SAPbobsCOM.Company , sendToPrintDriver As Boolean)
' Mache PDF direkt nach dem Druck
If GetData("LD.Par.PrintMode")="N" And GetData("LD.Par.Preview")="N" Then
LayoutHelper.LayoutOpener.OpenLayout(LayoutHelper.LayoutOpener.OpenLayoutModes.PDF,GetData("LD.Par.FormType").ToString(),"DocEntry",GetData("B1_Data.Document.DocEntry").ToString())
' hier könnte auch ein UDF Feld ala LD.QueryData("UPDATE TableName SET U_Test = Value") gemacht werden
End If
End Sub
btw. Falls du eine spezifische Printdefi nition zur PDF Erstellung benutzen möchstest kannst du PrintDef (den PrintDef Code) einfach auch als Parameter der Liste anhängen (ala DocEntry)
Und folgendes im GenerateScript:
[quote]' Handler für die Nach Print Aktion registireren
If Engine.IsDoublePass And Not handlerAdded Then
AddHandler LayoutHelper.LD.AfterPrint,AddressOf LD_AfterPrint
End If
hth
Markus Rewak
Hallo Philipp,das funktioniert wunderbar. Könntest Du mir noch einen Tipp geben wie man folgendes hinbekommt:
- PDF-Dokumet darf sich nach Erstellung nicht automatisch öffnen
- im Feld "Export File Name" will ich einen eindeutigen Namen vergen (z.b. Paramter %Unique der per sql die systemuhrzeit liest). Das bekomme ich vermutlich hin, viel wichtiger ist dass ich im skript genau diesen "Export File Name" auch ermitteln kann, um diesen später auf dem filesystem auch wieder zu finden.
wäre super wenn das gehen würde.
Viele Grüße
Markus
Markus Rewak
irgendein Tipp ?Philipp Knecht
Hi MarkusIm Extended Tab der Printdefinition kann man mittels Checkbox "Open PDF,.." bestimmen ob die generierte Datei nach dem Generieren geöffnet werden soll.
Zum Dateinamen:
Eventuell hilft es dir wenn du die Datei mit dem Namen [%FormType][%DocEntry] generierst.
Diese Parameter hast du dann auch im Layout zur Verfügung und kannst dann den Namen nachbilden.
hth
Markus Rewak
Hallo Philipp,das reicht nicht ganz.Ich brauche unbedingt einen eindeutigen Namen, weil ich verhindern möchte dass die Datei überschrieben wird.
Ich habe es mit einem neuen Parameter probiert, jedoch ohne Erfolg.
Ich habe einen Parameter "pdfname" mit folgendem sql belegt:
select replace(replace(replace((replace( convert(varchar,getdate(),121),'-','')),':',''),'.',''),' ','')
Jedoch wird [%pdfname] im Feld Export File Name nicht interpretiert.
Gibt es noch was oder geht es so nicht? Wenn es nicht geht wäre es super wenn es in einer zukünftigen Version funktionieren würde.
Ansonsten bräuchte ich Unterstutzüng wie man coresuite belege zur weitergabe an ein dms-system verarbeiten kann.
gruß
Markus
Philipp Knecht
Hi MarkusJa das geht so leider nicht. In der Printdef selber können nur Parameter angegeben werden welch auch vom Form ausgelesen werden.
Die weiteren Parameter sind dann ja den einzelnen Layouts hinterlegt und werden zu diesem Zeitpunkt noch nicht ausgewertet.
Werde mir eine Lösung überlegen. (Eventuell diesen aufgelösten Exportpath als Systemparameter àla FreeText ebenfalls im Layouter verfügbar machen)
Btw. Vielen Dank für deine aktive Anteilnahme im Forumsgeschehen :)
Gruss
Markus Rewak
Hallo Philipp,ideal wäre wenn der Export File Name per sql definiert werden könnte (damit ich einen eindeutigen namen vergeben kann) und diesen dann auch im layouter auslesen könnte.
Wäre super wenn Du so was schnell in coresuite designer einbinden könntest (brennt gerade unter den nägeln :-)
gruß Markus
Philipp Knecht
Hi MarkusWird im nächsten Release drin sein (Parameter ExportPath).
Hab dir ne Vorabversion geschickt.
hth
Markus Rewak
sorry, bei mir kam nix an. weder per mail noch über update des coresuite designersPhilipp Knecht
Hi MarkusHier ist alles klar (Im Postausgang). entweder gings halt unter spam (Unbekannte Dateiendung .sip ev.)
Ansonsten kannst du mir noch ne emailaddresse zukommen lassen.
Gruss
Markus Rewak
Hallo Philipp,vielen Dank für die Vorabversion. Ich habe die Dateien in das Client-Verzeichnis kopiert und die alten Daten ersetzt.
Beim Drucken erscheint nun stets folgende Fehlermeldung:
Error in Param XML: Item has already been added. Key in dictionary:
'AddMode' Key being added:'AddMode'
Das Ergebnis ist eigentlich nicht das was ich wollte. Ich bräuchte unbedingt folgende Funktion:
- den "Export File Name" auslesen (den ExportPath kann ich mit der Version auslesen)
- wenn möglich, den Feldern Export Filename und ExportPath Parameter zuweisen:
z.B. ExportPath : [%PDFPath] --> select 'C:temptesti'
ExportFileName: [%PDFFileName] --> select replace(replace(replace((replace( convert(varchar,getdate(),121),'-','')),':',''),'.',''),' ','')
Kannst Du sowas noch einbauen? Oder ist es drin und es funktioniert nur bei mir nicht?
gruß Markus
Philipp Knecht
Hi MarkusBetreffend der Fehlermeldung siehe Mail.
Betreffend Pfad/Dateiname:
- System.IO.Path.GetFileName(GetData("LD.Par.ExportPath")) -> FileName
- System.IO.Path.GetDirectoryName(GetData("LD.Par.ExportPath")) -> Pfad
hth
Andreas Schlingmann
[quote]"Philipp"]Hi Markus
Ja das geht. Du kannst in der Printdefinition einen Export Pfad angeben (Im Email/Fax - Register).
Dann machst du folgendes im CommonScript:
Private Sub LD_AfterPrint(company As SAPbobsCOM.Company , sendToPrintDriver As Boolean)
' Mache PDF direkt nach dem Druck
If GetData("LD.Par.PrintMode")="N" And GetData("LD.Par.Preview")="N" Then
LayoutHelper.LayoutOpener.OpenLayout(LayoutHelper.LayoutOpener.OpenLayoutModes.PDF,GetData("LD.Par.FormType").ToString(),"DocEntry",GetData("B1_Data.Document.DocEntry").ToString())
' hier könnte auch ein UDF Feld ala LD.QueryData("UPDATE TableName SET U_Test = Value") gemacht werden
End If
End Sub
btw. Falls du eine spezifische Printdefi nition zur PDF Erstellung benutzen möchstest kannst du PrintDef (den PrintDef Code) einfach auch als Parameter der Liste anhängen (ala DocEntry)
Und folgendes im GenerateScript:
' Handler für die Nach Print Aktion registireren
If Engine.IsDoublePass And Not handlerAdded Then
AddHandler LayoutHelper.LD.AfterPrint,AddressOf LD_AfterPrint
End If
hth
Hi Markus
Im Extended Tab der Printdefinition kann man mittels Checkbox "Open PDF,.." bestimmen ob die generierte Datei nach dem Generieren geöffnet werden soll.
Zum Dateinamen:
Eventuell hilft es dir wenn du die Datei mit dem Namen [%FormType][%DocEntry] generierst.
Diese Parameter hast du dann auch im Layout zur Verfügung und kannst dann den Namen nachbilden.
hth
[/quote]
Hallo Philipp,
ich interessiere mich auch sehr für diese Lösung. Das mit dem PDF erstellen klappt mitlerweile sehr gut, nur weiß ich nach dieser "Anleitung" nicht wirklich genau, WIE man den Dateinamen beeinflussen kann. Die "Platzhalter" sind mir klar, aber wo bestimmt man den Dateinamen ????
Philipp Knecht
Hi AndreasSchau mal in der Printdefinition in der Druckreihenfolge. Dort kannst du den Dateinamen pro Zeile beeinflussen.
hth
0
Please sign in to leave a comment.
Comments
0 comments