Cross (Normal User)
Pro
Messaggi: 61
Iscritto: 06/05/2007
|
raga ho un piccolo problema con gli elementi di stampa che ho inserito nel mio programma (diciamo che è un editor di testi, simile al blocco note di windows)e questi elementi sono: il printdocument, il pagesetupdialog, il printdialog, e il printpreviewdialog.
ho provato nei pochi modi che conoscevo ma non sono riuscito a niente, sono riuscito ad aprire il printpreviewdialog ma non mi faceva vedere il testo scritto come anteprima 8questo è un esempio delle mie prove).
e quindi vi chiedo gentilmente di potermi aiutare a scrivere il codice di questi elementi negli appositi pulsanti per la stampa.
grazie molte.
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Io penso che, siccome la classe PrintDocument riceve l'input da uno StreamReader, il documento finale stampato abbia tutti i tag rtb del caso e non solo il testo formattato, e comunque dovresti scrivere un bel po' di codice sulla gestione grafica del testo.
Io ti suggerire invece di provare con un più semplice:
Codice sorgente - presumibilmente C# / VB.NET |
Dim P As New Process
P.StartInfo.FileName = <nome file>
P.StartInfo.Verb = "Print"
P.Start()
|
|
|
Cross (Normal User)
Pro
Messaggi: 61
Iscritto: 06/05/2007
|
mettendo questo codice mi fa un errore: Win32Exception non è stata gestita
come fare???
P.S.: a,il codice è per VB.NET, io nel VB.NET l'ho provato
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
A me non da' nessun errore. Ha sempre funzionato così. Comunque sì, il codice è vb.net, si vede, ma perchè? Lo volevi in c#?
|
|
Cross (Normal User)
Pro
Messaggi: 61
Iscritto: 06/05/2007
|
no era una precisazione che il codice che volevo io doveva essere per VB.NET, ma a me continua a darmi errore.
non cè qualche altro metodo???
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
A dir la verità sì, non l'ho mai usato perchè è davvero lungo. Consiste nel prendere le impostazioni dal print dialog, e poi mediante printdocument grare una nuova graphic che disegni a una a una le righe di testo del file, tenendo conto dei margini ecc... Tuttavia ho visto questo metodo applicato solo per file di testo senza formattazione. Vuoi che te lo posti così ci provi?
|
|
Cross (Normal User)
Pro
Messaggi: 61
Iscritto: 06/05/2007
|
si dai.
fammi questo favore, grazie
|
|
Arcadia (Normal User)
Rookie
Messaggi: 21
Iscritto: 16/07/2007
|
Ciao,ho avuto anch'io lo stesso problema pochi giorni fa e sono riuscito a risolverlo con la richtexboxprintctrl
Trovi un interessante ed esaustivo articolo qui: http://support.microsoft.com/kb/812425/it
(Ci sono riuscito io che sono neofita.)
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Penso che potresti usare quello, eventualmente usando un traduttore c#-vb.net. Comunque il codice che ti dicevo è questo:
Codice sorgente - presumibilmente VB.NET |
Imports System.Drawing.Printing '... Public strFileName As String = "File da stampare" Public objStream As StreamReader Public objPrintFont As Font '... 'Evento 'inizia stampa', ad esempio click su un pulsante Dim objPrintDoc As New PrintDocument() Dim P As New PrintDialog() objPrintDoc.DocumentName = "Nome File" P.Document = objPrintDoc If P.ShowDialog = DialogResult.OK Then objStream = New StreamReader(strFileName) objPrintFont = New Font("Nome", <dimensione>) AddHandler objPrintDoc.PrintPage, AddressOf objPrintDoc_PrintPage objPrintDoc.PrinterSettings = P.PrinterSettings objPrintDoc.Print() objStream.Close() End If '... Private Sub objPrintDoc_PrintPage(sender As Object, e As PrintEventArgs) Dim LinesPerPage As Single = 0 Dim VerticalPos As Single = 0 Dim LineCount As Int32 = 0 Dim LeftMargin As Single = e.MarginBounds.Left Dim TopMargin As Single = e.MarginBouns.Top Dim Line As string LinesPerPage = e.MarginBounds.Height / objPrintFont.GetHeight(e.Graphics) Line = objStream.ReadLine() While LineCount < LinesPerPage And Line <> Nothing VerticalPos = Topmargin + (LineCount * objPrintFont.GetHeight(e.Graphics)) e.Graphics.DrawString(line, objPrintFont, Brushes.Black, LeftMargin, VerticalPos, New StringFormat()) LineCount += 1 If LineCount < LinesPerPage Then Line = objStream.ReadLine() End If End While End Sub
|
|
|