Hallo Ahmed! Erst einmal besten Dank für das umfangreiche Tool FreePDF_Multidoc. Ich denke,daß das eine schnelle Lösung für mein Problem sein kann - allerdings verstehe ich die Konfiguration nicht :-( Was ist meine anforderung? Also, ich habe eine kleines Programm in VB.net, das eine email erzeugt. Der Text, Betreff sowie die Namen der Dateien, die als Anhang verschickt werden sollen, stehen in einer Datenbank. Nun will der Kunde, daß da nicht 2 oder mehr Dateien als Anhang kommen, sondern nur eine PDF. Das schreit ja förmlich nach Deinem Tool? Doch die Frage ist: wie baue ich das in VB.NET ein?? Ich habe in Variablen den Betreff, den Mailtext und die Namen der Dateien, die angehängt werden sollen. Das muß man doch irgendwie dem Multidoc_Tool übergeben können,so daß wenigstens die Anhänge zu einer PDF-Datei zusammengeführt werden. Der Dateiname soll sich dabei aus dem Betreff der eMail ableiten. Geht sowas? Kannst Du mir da eine kleine Hilfe geben?? Das wäre FABELHAFT!!!!!
Schönes Winterwochenende erst einmal und 'nen schönen Gruß, Stefan
Das muß man doch irgendwie dem Multidoc_Tool übergeben können,so daß wenigstens die Anhänge zu einer PDF-Datei zusammengeführt werden. Der Dateiname soll sich dabei aus dem Betreff der eMail ableiten. Geht sowas?
Stefan
natürlich geht das mit meinem Tool.
Da Du sowieso alles aus VB.Net selber machen willst, kannst Du ganz einfach alles per Shell-Aufruf durchführen.
Gehe hierzu wie folgt vor:
1. Drucke Deine Auswertung mit FreePDF und der Multidoc-Funktion aus. Wie Du einen sog. Multidoc-Drucker einrichten kannst, habe ich hier genau beschrieben.
2. In Deinem Programm rufst Du jetzt einfach FreePDF_Multidoc mit dem normalen Shell-Befehl auf. Alle möglichen Aufrufe habe ich in meiner Rubrik 8. Anwendungsbeispiele detailliert beschrieben.
Unter 12. findest Du viele Beispiele, wie man mit FreePDF_Multidoc die Ausdrucke in PDF konvertiert und per Mail versendet. Schau Dir hierzu genau die Parameterbeschreibungen ein. Du kannst Dir auch einen Druckjob in dem Programm erstellen und einfach kopieren.
Dim MailEmpfänger as String Dim MailEmpfängerCC as String Dim MailEmpfängerBC as String Dim MailBetreff as String Dim strDateiname as String
'Mailversand erfolgt über Outlook = /m 1 'Mailversand erfolgt nicht über Outlook = /m 0 '****************************************
Shell "C:ProgrammeFreePDF_MultidocFreePDF_Multidoc.exe" & " /f " & strDateiname & " /m 1;;" & MailEmpfänger & ";" & MailEmpfängerCC & ";" & MailEmpfängerBC & ";" & MailBetreff
In den VBS-Beispielen hier im Forum findest Du ebenfalls Ideen, wie man auch den PS-Titel für die Dateinamensvergabe hinzuziehen kannst.
Wichtig ist nur, Dir genau die Parameterbeschreibungen genau anzuschauen.
Du kannst für die Mails auch mit sogenannten Mailvorlagen arbeiten. Für Outlook wären das die *.oft-Dateien. Für andere Mailprogramme einfache *.txt-Dateien.
Wenn Du damit nicht zurechtkommst, dann stell doch hier einmal Deinen Code ein.
Gruß Ahmed
FreePDF_Multidoc (PS2PDF mit vielen Optionen f. FreePDF) File2PDF (komplette Verzeichnisse auf einen Streich umwandeln) findest Du alles hier: http://amTools.de
Hallo Ahmend! Irgendwie blicke ich das nicht... An welcher Stelle teile ich dem Multi_Doc denn mit, welche Dateien ich in eine PDF-Datei drucken will. Ich denke, der aufruf müßte irgendwie so lauten:
c:programmemulti_doc.exe /f /p
Na ja, und dann wird aus den drei Dateien datei1, datei2 und datei3 halt eine PDF-datei...
Das Erzeugen der Mail und der Versand erfolgen komplette im hintergrund. Hier mal mein Codeschnipsel:
>>>>>>>>>>>>>>>>>>
'Festlegen der E-Mail-Eigenschaften Dim eMail As New System.Net.Mail.MailMessage(anmeldung.UserName, strEmpfaenger) 'Absender, Empfänger With eMail .Subject = txtAuftrag.Text & "; " & txtRechercheID.Text .Body = strbody.ToString 'Text der Mail .IsBodyHtml = False .Bcc.Add(anmeldung.UserName)t .BodyEncoding = System.Text.Encoding.Default .Priority = Net.Mail.MailPriority.Normal End With
'Anhänge hinzufügen Dim lstElement As Object For Each lstElement In lstAnhänge.Items Dim attachment As New System.Net.Mail.Attachment(lstElement.ToString) Sleep(6000) eMail.Attachments.Add(attachment) Next
'Klasse SmtpClient ermöglicht das Versenden von Mails über einen SMTP-Server Dim client As New System.Net.Mail.SmtpClient client.Host = strHost client.Credentials = anmeldung client.Send(eMail) Cursor.Current = System.Windows.Forms.Cursors.Default MessageBox.Show("Die Nachricht wurde versandt")
<<<<<<<<<<<<<<<<<<<< So, und es geht genau um die Anhänge. Die Dateinamen der Anhänge stehen in einer Liste und werden der mail mit dem Statement "eMail.Attachments.Add" hinzugefügt. Meine ist ja aber nun, diese einzeldateien (in der Regel jpg-Files) nicht einzeln anzuhängen, sondern zunächst in eine PDF-Datei zu drucken und dann nur diese PDF-Datei der mail anzuhängen. Und dafür muß ich ja Deinem Tool irgendwie mitteilen, welche Dateien zusammengefügt werde sollen... Hast du da noch mal einen Tip für mich??
1. Es werden alle Ausdrucke vorgenommen. Unabhängig davon, ob daraus eine oder mehrere PDF-Dateien erstellt werden sollen. Dafür ist ein Multidoc-Drucker notwendig.
2. Durch Verwendung des Schalters /e teilst Du meinem Programm mit, dass alle Ausdrucke in einzelne PDF-Dateien konvertiert werden sollen. Soll aus den Ausdrucken nur eine Datei erstellt werden, dann lass den Schalter halt weg.
3. Mit dem Schalter /m wird eine Mail aus den PDF-Dateien erstellt. Sollen gleichzeitig die PDF-Dateien gespeichert werden, so ist zwingend der Speicherpfad (/p) mit anzugeben.
4. Im Dateinamen/Dateipfad kann man auch noch die automatische Ersetzungsfunktion mit dem Platzhalter '@' nutzen. Hierzu bitte die Online-Hilfe konsultieren.
5. Alle Konvertierungen werden von meinem Programm angestoßen. Ausgeführt wird die Konvertierung aber von FreePDF.
Der Anwender braucht nur einen Shell-Aufruf generieren. Alles andere macht wie gesagt mein Programm. Keine komplizierten Mail-Codes mehr.
6. Lies Dir die Online-Hilfe genau durch (von vorne bis hinten ). Für Dich sind auch die Shell-Beispiele ganz interessant und sollten Dir weiterhelfen. Die Online-Demonstrationen sind nur für die Verwendung der GUI notwendig. Könnten aber auch hilfreich beim Verständnis sein.
7. Eventuell ist für Dich auch die Printjobs.dll hilfreich, da mit dieser DLL Dein Programmcode solange anhalten kannst, bis auch wirklich der letzte Ausdruck aus dem Druckspooler abgearbeitet wurde. Auch hierfür gibt es eine umfangreiche Online-Hilfe.
Ich hoffe ich konnte ein bisschen Licht ins Dunkel bringen.
Gruß Ahmed
FreePDF_Multidoc (PS2PDF mit vielen Optionen f. FreePDF) File2PDF (komplette Verzeichnisse auf einen Streich umwandeln) findest Du alles hier: http://amTools.de
Hallo Ahmed! Tja, da könntest Du recht haben... Irgendwie blicke ich die Verwendung Deines Tools noch nicht... Das ist echt frustrierend... Ich habe mal versucht, über eine DOS-Shell einen Druckjob anzustarten:
Der Anwender druckt irgendwelche Dateien und möchte diese jedesmal unter bestimmten Namen, Pfaden usw. abspeichern. FreePDF ist hierfür aber zu unbequem, da es nur 4 Standardfälle kennt. Und hier setzt mein Programm an.
Der Anwender druckt also seine Word-, Excel- usw. -Dateien ohne diese sofort mit FreePDF zu konvertieren. Stattdessen verwendet er einen sog. Multidoc-Drucker. Damit werden die Dateien nicht sofort in eine PDF-Datei konvertiert, sondern als PS-Datei abgespeichert.
Jetzt kann er mittels eines Shell-Befehls mit meinem Programm diese PS-Dateien in PDF-Dateien konvertieren und dabei
- Namen nach bestimmten Regeln automatisch vergeben - Pfade nach bestimmten Regeln automatisch vergeben - Mails automatisch nacht bestimmten Regeln versenden usw.
Das alles kann er mit einem einfachen Shell-Befehl durchführen. Dazu muss er aber erst alles einmal ausdrucken.
Mein Programm ist lediglich eine Oberfläche um immer wiederkehrende Aufgaben automatisch auszuführen.
Weiterer Vorteil ist der, dass wenn der Anwender keine Shell-Befehle verwenden kann, so kann er z. B. mein Programm so starten (/hide), dass immer wenn eine Datei gedruckt wird, das immer die sog. Druckjob-Regiezentrale in der Taskleiste geöffnet wird. Hier kann er aus div., vorher schon definierten, Druckjobs einen auswählen um die Konvertierung zu starten. In diesen Druckjobs kann man natürlich auch noch die Mail-Parameter hinterlegen, so dass sofort nach der Konvertierung der Mailversand eingeleitet wird. Bei Verwendung der Druckjob-Regiezentrale wird auch automatisch der Druckspooler (bei entsprechender Einrichtung) überwacht, so dass der Druckjob immer erst ausgeführt wird, wenn auch alle Druckjobs abgearbeitet wurden.
Ferner kann mit beim Programmstart auch noch einen sog. Autorun-Drucker (/run) verwenden. Der konvertiert immer einen bestimmten Druckjob sofort ohne irgendwelche Interaktionen. Aber auch hierfür muss natürlich vorher ein Druckjob definiert worden sein.
Das sind aber auch nur ein Bruchteil aller Möglichkeiten. So gibt es
- automatische Ersetzungsfunktionen - automatische Namenslöschfunktionen - automatische Zähler mit Formatierungen - Verwendung von Datumsvariablen im Namen - usw.
Deine Batchbefehle sind im Shell-Aufruf absolut wirkungslos. Im Gegenteil, so produzierst Du nur Fehlermeldungen. Batch-Codes könnten allenfalls in sog. AddIn's bzw. PlugIn's verwendet werden. Aber darauf möchte ich nun nicht eingehen.
So, dass ist noch einmal ein Kurzauszug aus meinem Programm.
Bitte lies Dir noch einmal die Online-Hilfe von Anfang an durch. Nur dann verstehst Du alles richtig.
Um automatisch irgendwelche Dateien in PDF zu wandeln, musst Du mein Programm File2PDF verwenden. Das hat aber wiederum nichts mit FreePDF_Multidoc zu tun. Bei FreePDF_Multidoc musst Du den Druck anstoßen. Da Du aber sowieso alles selber machen willst, so ist doch File2PDF für Dich viel sinnvoller.
File2PDF kann man ebenfalls per Batchbefehl ausführen. Dazu musst Du aber ebenfalls die Online-Hilfe genau durchlesen. 8)
File2PDF ist aber in der Wirkungsweise erheblich einfacher gestaltet, da es lediglich Fremddateien in PDF-Dateien umwandelt. Alle Voraussetzungen findest Du unter File2PDF genau beschrieben.
Gruß Ahmed
FreePDF_Multidoc (PS2PDF mit vielen Optionen f. FreePDF) File2PDF (komplette Verzeichnisse auf einen Streich umwandeln) findest Du alles hier: http://amTools.de
Hallo nochma! Erst einmal vielen Dank für Deine Geduld. Aber ich glaube, so langsam blicke ich es... Was ich nicht verstanden habe ist, daß ich - bevor ich mit Deinem Tool loslege - erst einmal die Dateien mit dem FreePDF_Multidoc-Drucker erzeugen muß. Meine eigentliche Baustelle ist also weniger der Einsatz Deines Tools,sondern per VB.net Dateien auf den Drucker "FreePDF_Multidoc" zu schicken. Mal sehen, ob ich dazu dann was finde...(hast du 'ne Idee...???)
Habe ich das gelöst, würde ein Shell-Aufruf mit /p /f ja schon ausreichen...
in vielen Programmen gibt es so ein Button, nennt sich Drucker!
Nein, Scherz beiseite.
Du musst einfach irgendetwas Drucken. Aber halt nicht auf Papier, sondern auf einen FreePDF-Drucker mit der Multidoc-Funktion. Ab da greift mein Programm.
Um einfach schon existierende Dateien in PDF zu konvertieren, kannst Du File2PDF nehmen und warten bis alle Dateien umgewandelt wurden. File2PDF arbeiten (fast) selbständig. Ein paar Einstellungen sind zwar vorher vorzunehmen, aber ab da kann alles vollautomatisch erfolgen. Einziges Problem ist bei Dir dann doch nur noch das Zusammenfügen der einzelnen PDF-Dateien.
Also ich würde wie folgt vorgehen:
1. Alle Dateien mit File2PDF umwandeln. Die PDF-Dateien werden unter dem gleichen Namen gespeichert. Der Speicherpfad kann ja angegeben werden, so dass alle PDF-Dateien in einem tmp-Verzeichnis gespeichert werden.
Du kannst auch gleichzeitig mehrere Dateien auf einmal umwandeln. Zu empfehlen wäre ggf. die Dateien (jpg) vorher in das tmp-Verzeichnis zu kopieren. Dann brauchst Du lediglich nur ein Suchmuster angeben und File2PDF arbeitet alles der Reihe nach ab. Das Ende von File2PDF kannst Du ja in VB-Net ganz einfach überwachen, indem Du das Threat-OCX verwendest.
2. Lade Dir PDFtk runter (Link findest Du auf meiner Webseite unter PDF_ReOrg). Hier werden einfach alle PDF-Dateien mittels eines Batchbefehls (Beschreibung siehe Webseite PDFtk) zusammengefasst und unter einem neuen Namen gespeichert.
3. Diesen neuen Namen einfach zu Deiner Mail hinzufügen. Nach dem Mail-Versand das tmp-Verzeichnis aufräumen.
Das sollte kein allzu großes Problem sein.
Gruß Ahmed
FreePDF_Multidoc (PS2PDF mit vielen Optionen f. FreePDF) File2PDF (komplette Verzeichnisse auf einen Streich umwandeln) findest Du alles hier: http://amTools.de
Hallo Ahmed! Zur Abwechsslung mal was Positives : Der weg mit dem file2pdf scheint ganz gut zu funktionieren. Auch das Mergen mit dem pdftk klappt.
Zwei Fragen habe ich jetzt aber noch:
1.) diese Thread-OCX sagt mir nix... Wie kann ich prüfen, ob file2PDF noch aktiv ist. Denn vorher darf ich ja nicht das PDFTK anstarten...
2.) Die Papiergröße ist beim MultiDoc uf A4 voreingestellt. Kann man irgendwie, irgendwo einstellen, daß die Papiergröße an die Größe der Vorlage angepaßt wird, also z.B. große Grafiken auf A3 gedruckt werden und kleinere auf A4?
Ansonsten scheint der jetzt eingeschlagene Weg zu funktionieren. BESTEN DANK schon mal für Deine Mühe und Deine Geduld...
Zitat von StefanTA650Hallo Ahmed! Zur Abwechsslung mal was Positives : Der weg mit dem file2pdf scheint ganz gut zu funktionieren. Auch das Mergen mit dem pdftk klappt.
Super, freut mich das es jetzt klappt.
Zitat Zwei Fragen habe ich jetzt aber noch:
1.) diese Thread-OCX sagt mir nix... Wie kann ich prüfen, ob file2PDF noch aktiv ist. Denn vorher darf ich ja nicht das PDFTK anstarten...
In VB-Net 8 gibt es in der Toolbox unter Komponenten ein OXC, das nennt sich Process. Hier kann man ein Process (Programm) starten und erhält automatisch Rückmeldung, wenn dieser Process beendet wurde.
Private Sub frmCopy_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'iTunes wird jetzt automatisch gestartet
With Process1 .StartInfo.FileName = "iTunes.exe" .EnableRaisingEvents = True .Start() End With
End Sub
Private Sub Process1_Exited(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Process1.Exited
[...] Wenn Process beendet wird
End Sub
Siehe hierzu auch die VB-Net-Hilfe. In der NG microsoft.public.de.german.entwickler.dotnet.vb erhälst Du ebenfalls eine Hilfestellung. Die NG kann ich nur empfehlen.
Zitat 2.) Die Papiergröße ist beim MultiDoc auf A4 voreingestellt. Kann man irgendwie, irgendwo einstellen, daß die Papiergröße an die Größe der Vorlage angepaßt wird, also z.B. große Grafiken auf A3 gedruckt werden und kleinere auf A4?
Das stellst Du in den Druckereigenschaften ein (siehe Bild).
Um verschiedene Papiergrößen zu verwenden, musst Du halt unterschiedliche Drucker einrichten. Im Shellaufruf von File2PDF gibt Du ja den Druckernamen an.
Zitat Ansonsten scheint der jetzt eingeschlagene Weg zu funktionieren. BESTEN DANK schon mal für Deine Mühe und Deine Geduld...
Bei Fragen und Problemen einfach hier melden.
Gruß Ahmed
FreePDF_Multidoc (PS2PDF mit vielen Optionen f. FreePDF) File2PDF (komplette Verzeichnisse auf einen Streich umwandeln) findest Du alles hier: http://amTools.de