matthiasr Geschrieben 19. Juli 2006 Teilen Geschrieben 19. Juli 2006 19.07.2006 15:55:00 Datei drucken Hallo zusammen, ich möchte eine Datei drucken, speziel ein PDF. Nun habe ich einige gefunden wie ich Pixelgenau drucken kann, aber ich möchte ein vorhandenes File, so wie es ist, einfach nur drucken. Wie mache ich das. Unter VB6 habe ich es mit ShellExecute gemacht, aber in VB.Net bekomme ich eine mir unbekannte Fehlermeldung (Ein Aufruf an die PInvoke-Funktion "DVNrSuche!DVNrSuche.frmMain::ShellExecute" hat das Gleichgewicht des Stapels gestört. Wahrscheinlich stimmt die verwaltete PInvoke-Signatur ...) Währe schön wenn Ihr mir weiter helfen könntet. Danke Matthias Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
jasso Geschrieben 20. Juli 2006 Teilen Geschrieben 20. Juli 2006 Imports System.Diagnostics .... Process.Start("C:\test.doc")keine ahnung ob's funktioniert. Quelle hier lg jasso Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
matthiasr Geschrieben 20. Juli 2006 Autor Teilen Geschrieben 20. Juli 2006 Ob ich aber damit drucken kann? Werds mal ausprobieren, denke das ich es aber nur öffne. Dennoch erstmals danke. Matthias Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
matthiasr Geschrieben 20. Juli 2006 Autor Teilen Geschrieben 20. Juli 2006 Wie gesagt, Starten ja, aber wie nun drucken? Matthias Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Code Poet Geschrieben 20. Juli 2006 Teilen Geschrieben 20. Juli 2006 Hi Matthias, Ein PDF zu drucken setzt voraus, dass auf dem Rechner ein entsprechendes Programm installiert ist (logisch). Willst Du das per Code tun, musst Du eine Schnittstelle zu diesem Programm haben, mit deren Hilfe Du damit kommunizieren kannst! Die primitivste wäre die Shell, in der Du einfach die EXE dieses Programms (ich nehme an es ist der AcroReader von Adobe) mit einem Parameter aufrufst, der diesem dann sagt, dass nur das File gedruckt (nicht geöffnet, nicht die GUI gestartet) werden soll. Das ist natürlich nicht unbedingt die eleganteste Lösung und das Programm muss sie wie gesagt auch unterstützen; womöglich sieht Dein PDF-Reader ja gar keinen solchen Parameter vor! Es gibt aber zum Glück noch andere Schnittstellen als gerade mal die Shell. OLE ist z.B. immer noch weit verbreitet. Hier kannst Du, wenn Du das OLE-Objekt kennst, in Deinem Programm eine Instanz davon erstellen und seine Methoden benutzen, um z.B. das PDF zu drucken. Hierbei musst Du schauen, ob Dein PDF-Reader OLE unterstützt. (Ich weiß nicht, ob der von Adobe das tut, aber ist gut möglich) Nicht zuletzt, bei einem verbreiteten Format wie PDF, ist es nicht unwahrscheinlich, dass sich mal jemand die Mühe gemacht hat, das ganze selbst zu programmieren und der Öffentlichkeit zugänglich zu machen. Dann könntest Du den Code dazu in Dein Programm einbinden und das PDF-File selbst parsen und drucken! Vorteil dieser Lösung wäre: Dein Programm würde auch funktionieren, wenn auf dem Zielrechner kein PDF-Reader installiert ist! Eine schöne Suchmaschine für Codeschnipsel aller möglichen Lizenzen findest Du hier! Viel Glück! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
matthiasr Geschrieben 20. Juli 2006 Autor Teilen Geschrieben 20. Juli 2006 Hallo Code Poet, vielen Dank für Deine Antwort. Das Programm soll nur auf Prog Rechnern laufen, auf denen Acrobat installiert ist. Unter VB6 haben wir es so gemacht ret = ShellExecute(0, "PRINTTo", Dateipfad, Drucker, "", 0) somit kann ich bestätigen, dass es mit Adobe funktioniert. Wenn ich allderings diese Funktion in .Net verwende bekomme ich den oben beschriebenen Fehler. Meine bisherige suche hat immer nur dazu geführt, dass ich was darüber erfahren habe wie man wo einen Pixel setzt, aber nicht wie ich ein einfaches Doku drucke. Matthias Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Code Poet Geschrieben 20. Juli 2006 Teilen Geschrieben 20. Juli 2006 Hallo Matthias, die Funktion ShellExecute steht in der Library shell32.dll und wird extern implementiert. Ohne das Projekt und den Rechner zu kennen würde ich vermuten, dass mit der selben Library und dem selben Call unter jeder anderen Programmiersprache auch derselbe Fehler ausgelöst würde. Es wäre hilfreich, die komplette Fehlermeldung zu sehen, aber offensichtlich gab es hier eine ungültige Stackoperation ("...Ungleichgewicht im Stapel..."). Es ist generell nicht so empfehlenswert, derartige Aufrufe in der Windows-API zu starten, wenn man damit nicht so heimisch ist. Ein Kollege meinte gerade, es gibt für .NET eine Komponente, die Dir Arbeiten mit PDF erleichtert: Hier findest Du Näheres. Direktes Drucken aus einer Applikation ist damit in jedem Fall möglich! Wenn sichergestellt ist, dass auf allen Rechnern der AcroReader installiert ist, dann würde ich alternativ mal dort nachforschen, ob es dazu eine API gibt, mit der Du den Reader direkt anweisen kannst, ein bestimmtes Dokument zu drucken. Gibt es die, wird das auch relativ einfach sein! Gruß, Das Füchslein Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
matthiasr Geschrieben 20. Juli 2006 Autor Teilen Geschrieben 20. Juli 2006 Hallo, Danke für die Hilfe, werde mir den Link mal ansehen. Ich habe aber eine anderen Weg gefunden. Über Process.Start("AcroRd32.exe", "/p/h " & sFile) kann ich den PDF auch drucken, nun muss ich Adobe nur noch beenden. Weist Du da auch Rat? Matthias Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 20. Juli 2006 Teilen Geschrieben 20. Juli 2006 Process.Start gibt AFAIR die PID zurück, mit dieser kann via Process.Kill auch wieder geschlossen werden. s'Amstel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
matthiasr Geschrieben 20. Juli 2006 Autor Teilen Geschrieben 20. Juli 2006 Danke. Jetzt passt es wunder bar, genau das was ich wollte. Danke an alle. Matthias Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.