81 messaggi dal 07 gennaio 2004
Ciao,
dato il percorso fisico, è possibile mandare in stampa un file ".pdf" utilizzando il PrintDocument?

Simone
501 messaggi dal 09 giugno 2006
Contributi
Ciao.

No, non è possibile. L'oggetto PrintDocument è un oggetto che ti consente di "inviare" un output verso una stampante ma si tratta di output scritto per mezzo di primitive (vedi oggetto Graphics).

Per fare ciò che vuoi te devi utilizzare un componente che prima di tutto sia in grado di leggere il documento PDF (quindi Acrobat Reader o prodotti equivalenti di terze parti) o, in alternativa, delegare la stampa ad Explorer tramite Shell (verbo Print della shell di Explorer) o altre tecniche simili.

Sull'uso di AR nella tua applicazione esistono diverse possibilità compreso l'uso degli oggetti JavaScript di Acrobat. Una possibile soluzione "rapida" potrebbe consistere nell'utilizzare un componente WebBrowser (anche nascosto), farlo navigare al documento PDF e quindi invocare la stampa.

Ciao.

.:. Marcello Rutter .:.
19 messaggi dal 30 settembre 2007
Io stampo tutto il contenuto di un Dataset tramite il controllo PrintDocument.

Riesco a far tutto ma ho un solo problema: io mi sposto di riga in riga incrementando la coordinata Y di un tot prestabilito (es: 100) nella funzione e.Graphics.DrawString()

Il problema sorge quando il testo stampato sopra, è così lungo che occupa più righe, percui incrementando la coordinata Y di 100 (ad esempio) non è sufficiente ed il testo si sovrappone al precedente.

Ecco, mi servirebbe poter incrementare la coordinata Y in modo dinamico, ovvero se il testo stampato è lungo, la incremento di più, altrimenti di meno.
In parole povere, mi servirebbe poter conoscere l'area stampata in quel momento ed incrementare la coordinata Y di conseguenza.

Ecco come eseguo la stampa:

e.Graphics.DrawString(ds_impegni.Tables("memo").Rows(count).Item("memo"), New Font("Verdana", 10, FontStyle.Regular), Brushes.Black, New RectangleF(x, y, 400, 100))
y += 100


Il tutto in un ciclo For.

Avete idee? Grazie.
501 messaggi dal 09 giugno 2006
Contributi
Ciao.

Devi semplicemente utilizzare la funzione e.Graphics.MeasureString per "misurare" lo spazio occupato dalla stampa della stringa.

http://msdn2.microsoft.com/en-us/library/system.drawing.graphics.measurestring.aspx

Inoltre evita l'utilizzo di "New Font("Verdana", 10, FontStyle.Regular" (magari lo hai scritto solo in questo esempio) perché crei una nuova istanza del font ad ogni scrittura. E' preferibile definire una variabile a livello di classe.

Infine ricordati di fare il Dispose degli oggetti GDI dopo averlo utilizzati.

Ciao.

.:. Marcello Rutter .:.
19 messaggi dal 30 settembre 2007
Ottimo, GRAZIE.

E Grazie anche degli altri consigli che sicuramente seguirò

Buon week-end

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.