Hallo Community,
ich hoffe ich erwische mit meinem Problem das richtige Forum, es ist nämlich nicht so ganz eindeutig.
Ich erkläre mal kurz die Situation.
Der Benutzer rechnet etwas über meine Anwendung aus und kann sich aus den Ergebnissen ein PDF erstellen, welches ich in einem Fenster (lightbox bzw. von telerik die radwindows, falls die jemand kennt) darstelle.
Jetzt soll es ihm möglich sein die PDF direkt über einen Druckbutton zu drucken.
Die PDF sollte direkt an den Drucker weitergeleitet werden. Bisherige Lösungen haben es so gemacht, dass der Adobe Reader aufging und wieder zu gemacht wurde. So ähnlich wäre das gut.
Ob dabei jetzt der Druck Dialog aufgeht oder nicht, ist mir fast egal.
Ich habe schon viel ausprobiert, sowohl Serverseitige Lösungen wie auch Clientseitige Lösungen, leider immer mit dem Ergebnis, dass es von PC zu PC und von Browser zu Browser unterschiedlich bis gar nicht funktionierte.
Clientseitige Lösung z.b. (Funktioniert im Firefox nicht)
Serverseitige Lösung z.b. (Funktioniert nicht wirklich zuverlässig auf allen PC's - wohl eher ungeeignet)
Jetzt ist die Frage, kennt jemand eine Korrektur meiner zwei Versuche oder kennt jemand eine andere Lösung die funktioniert. Oder irgendwelche anderen Tipps vielleicht? Ich wäre für alles offen.
Ich könnte mir auch sowas wie von www.pdfsharp.com vorstellen. (Das ist allerdings ungeeignet, weil es nicht drucken kann ^^)
Ich hoffe wirklich, dass mir jemand helfen kann und bedanken mich schon einmal.
Viele Grüße,
boozone
ich hoffe ich erwische mit meinem Problem das richtige Forum, es ist nämlich nicht so ganz eindeutig.
Ich erkläre mal kurz die Situation.
Der Benutzer rechnet etwas über meine Anwendung aus und kann sich aus den Ergebnissen ein PDF erstellen, welches ich in einem Fenster (lightbox bzw. von telerik die radwindows, falls die jemand kennt) darstelle.
Jetzt soll es ihm möglich sein die PDF direkt über einen Druckbutton zu drucken.
Die PDF sollte direkt an den Drucker weitergeleitet werden. Bisherige Lösungen haben es so gemacht, dass der Adobe Reader aufging und wieder zu gemacht wurde. So ähnlich wäre das gut.
Ob dabei jetzt der Druck Dialog aufgeht oder nicht, ist mir fast egal.
Ich habe schon viel ausprobiert, sowohl Serverseitige Lösungen wie auch Clientseitige Lösungen, leider immer mit dem Ergebnis, dass es von PC zu PC und von Browser zu Browser unterschiedlich bis gar nicht funktionierte.
Clientseitige Lösung z.b. (Funktioniert im Firefox nicht)
Code:
<html> <head> <script> function pdfPrint() { var x = document.getElementById("pdf"); x.click(); x.setActive(); x.focus(); x.print(); } </script> </head> <body> <embed id="pdf" src ="test.pdf" width="550" height="550" name="whatever"> <button onclick="pdfPrint()">Drucken</button> </body> </html>
Code:
<form id="frmdruckentest" method="post" runat="server" defaultbutton="lbTESTDrucken" enctype="multipart/form-data"> <asp:LinkButton runat="server" Width="100px" ID="lbTESTDrucken" CssClass="button-theme" style="position:absolute;top:500px;left:662px;"> <span class="span_outer"> <span class="span_right"> <span class="span_left"> <span style="width: 92px;" class="span_inner">Drucken</span> </span> </span> </span> </asp:LinkButton> </form>
Code:
Imports MIR.Web.Allgemein.MIRSteuerfunktionen Imports Telerik.Web.UI Imports System.Globalization Imports System.Data.SqlClient Imports System.Drawing.Printing Imports System.IO Imports System.Data Imports System.Configuration Imports System.Collections Imports System.Web Imports System.Web.Security Imports System.Web.UI Imports System.Web.UI.WebControls Imports System.Web.UI.WebControls.WebParts Imports System.Web.UI.HtmlControls Imports System.Diagnostics Public Class druckentest Inherits MIR.Web.Allgemein.MIRBasePage #Region " eigene Variablen " Private Const PDFDOCNAME As [String] = "PrintTestFile" ' just a name Private Const GSWIN32 As String = "C:\Program Files\gs\gs8.70\bin\gswin32c.exe" Private Const PRINTERNAME As String = "HP psc 1600 series" Private Const ACROPATH As String = "C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe" Private GSWINARGS As String = " -dPrinted -dBATCH -dNOPAUSE -dNOSAFER -q -dNumCopies=1 -sDEVICE=ljet4 -sOutputFile=""\\spool\{0}"" ""{1}""" ' 0... printer name, 1... pdf file 'private string DOSPRNTARGS = "/p /h \"{0}\" \"{1}\""; // 0... pdf file, 1... printer name Private DOSPRNTARGS As String = " /D:""\\COMPUTERNAME\{1}"" ""{0}""" ' 1... printer name, 0... pdf file Private ACROREADERARGS As String = "/s /o /h /p {0}" ' 0... pdf file Private pdStreamToPrint As StreamReader Protected gsTb As String = String.Empty Protected gsArgTb As String = String.Empty Protected argTb As String = String.Empty Protected prtTb As String = String.Empty Protected adbPTb As String = String.Empty Protected adbPtb2 As String = String.Empty Protected prtTb2 As String = String.Empty Protected argTb1 As String = String.Empty #End Region Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load ' Hier Benutzercode zur Seiteninitialisierung einfügen If Not IsPostBack Then ' Hier steht der Code, der nur beim ersten Laden ' der Seite ausgeführt wird, z. B. kann die Seite ' hier mit Startwerten etc. initialisiert werden. InitData() Else ' Hier steht der Code, der nach dem ' Formularversand ausgeführt wird, d. h. hier ' werden die Eingaben des Anwenders verarbeitet. End If End Sub Private Sub InitData() gsTb = GSWIN32 gsArgTb = [String].Format(GSWINARGS, PRINTERNAME, PDFFileName) argTb = [String].Format(DOSPRNTARGS, PDFFileName, PRINTERNAME) prtTb = PRINTERNAME adbPTb = ACROPATH adbPtb2 = ACROPATH prtTb2 = PRINTERNAME argTb1 = [String].Format(ACROREADERARGS, PDFFileName) End Sub Private Sub lbTESTDrucken_Click(sender As Object, e As System.EventArgs) Handles lbTESTDrucken.Click Try DoShellPrint("Print") Catch ex As Exception 'Fehler abfangen End Try End Sub Private Sub DoShellPrint(verb As String) Dim psInfo As New ProcessStartInfo() psInfo.Verb = verb psInfo.FileName = PDFFileName psInfo.Arguments = argTb psInfo.WindowStyle = ProcessWindowStyle.Hidden psInfo.CreateNoWindow = True psInfo.UseShellExecute = True Dim process__1 As Process = Process.Start(psInfo) If Not process__1.WaitForExit(3000) Then process__1.Kill() End If End Sub 'Das ist ein Virtueller Pfad. Die pdf muss im Projektordner liegen. Das kann man später ja anpassen Private ReadOnly Property PDFFileName() As String Get Return MapPath("~/test.pdf") End Get End Property End Class
Ich könnte mir auch sowas wie von www.pdfsharp.com vorstellen. (Das ist allerdings ungeeignet, weil es nicht drucken kann ^^)
Ich hoffe wirklich, dass mir jemand helfen kann und bedanken mich schon einmal.
Viele Grüße,
boozone
Comment