Output di un grafico più grande di A4 su stampante

di il
21 risposte

21 Risposte - Pagina 2

  • Re: Output di un grafico più grande di A4 su stampante

    Sgrubak ha scritto:


    Apparentemente le istruzioni che hai scritto dovrebbero parzializzare l'immagine su più fogli, ma se non funziona, non riusciamo a dirtelo noi.
    Ecco, quello che volevo intendere era esattamente questo, ma purtroppo non ho il dono della sintesi...
  • Re: Output di un grafico più grande di A4 su stampante

    Grazie ad entrambi Alka e Sgrubak , sono grato e rispettoso del tempo che mi dedicate .
    Ho capito perfettamente quanto mi dite . Ma c'è qualcosa che sicuramente non ho capito sulla modalità di suddivisione .
    Stabilito che il grafico viene costruito a monte dell' output (video o stampa) e non viene più toccato , non ci sono istruzioni da testare salvo le due indicate che non so però se vengono usate correttamente .
    Detto che ottengo a video l'intero grafico con la singola istruzione :
    e.Graphics.DrawImage(FAA, new Rectangle(0, 0, FAA.Width, FAA.Height));
    per suddividerlo , AL POSTO DI QUESTA ISTRUZIONE , uso due istruzioni che vengono richiamate più volte dall'evento, in sequenza, quindi il ciclo é :
    partire con PgFatte = 0 nella funzione printing() PRIMA DI ATTIVARE L'EVENTO
    quindi l'attivazione dell'evento non lascia uscite : seguendo passo-passo si ha correttamente l'incremento di PgFatte fino a PgTot . Non si esce dall'evento ( quindi non ci sono altre istruzioni da testare ) .
    Non so però se le due istruzioni che dovrebbero suddividere, e quindi stampare, siano corrette ( se i parametri che inserisco sono corretti ) :
    RectangleF srcRect = new RectangleF(0.0F, PgFatte * 1169, FAA.Width, 1169.0F);
    La prima parte della mia domanda è questa : uso un'istruzione sbagliata o la uso con parametri sbagliati ??
    e.Graphics.DrawImage(FAA, 0, 0, srcRect, units);
    La seconda parte della mia domanda è questa : uso un'istruzione sbagliata o la uso con parametri sbagliati ??
    per il resto la sequenza di incremento ( sono le uniche variabili nel ciclo )
    	if (++PgFatte < PgTot) e.HasMorePages = true; 			
    	else e.HasMorePages = false;   
    funziona correttamente : false quando le PgFatte sono uguali alle PgTot
    Come detto nella costruzione del grafico non c'è nulla che richiami al numero di pagine formato A4 .
    Nella mia logica non dovrebbe influire : c'è un insieme che voglio suddividere in un certo modo ( es: formato A4 )
    ma potrei volerlo suddividere in modo diverso . La sua costruzione resta inalterata.
  • Re: Output di un grafico più grande di A4 su stampante

    La sequenza è:
    1) Calcolo il numero di pagine che dovrebbero uscire dalla stampante, sapendo quanto è alta in pixel l'immagine di partenza e quanti pixel ci stanno in verticale su un pagina; (e lo fai già...)
    2) per ogni pagina da stampare, disegno una porzione dell'immagine di partenza. La porzione sarà grande quanto un A4 e avrà il Top che aumenta ad ogni pagina stampata; (e lo fai già...)

    Stop. Tutto qui. La domanda ora è: i fogli dalla stampante escono giusti o no?
  • Re: Output di un grafico più grande di A4 su stampante

    Ciao Sgrubak , apprezzo veramente molto il tuo interessamento .
    Allora , per riassumere :
    come detto la visione completa del grafico non dà problemi , l'istruzione :
    e.Graphics.DrawImage(FAA, new Rectangle(0, 0, FAA.Width, FAA.Height));
    mi dà in anteprima di stampa il grafico completo .
    Ma se chiedo la stampa su carta, stampa SOLO la prima pagina ( 1169 pixel pari a 73 righe alte 16 pixel )

    Quando cerco di suddividere , ottengo :
    in anteprima video : SOLO la prima pagina ( es: 1169 pixel pari a 73 righe alte 16 pixel ) peraltro corretta nei valori
    in stampa cartacea : SOLO la prima pagina ( es: 1169 pixel pari a 73 righe alte 16 pixel ) peraltro corretta nei valori

    Da notare che il ciclo PgFatte < PgTot controllato nell'evento, viene svolto una prima volta per dare l'anteprima a video
    e viene poi ripetuto uguale quando chiedo la stampa ( 1° box in alto a sinistra dell'anteprima )
    Non capisco perchè non va oltre la prima pagina visto che il ciclo PgFatte < PgTot lo svolge al completo
    ( nel caso che esamino dovrebbero essere due le pagine da videare / stampare e realmente il ciclo si ripete per due volte )
    Posso ipotizzare che il rettangolo srcRect che prende la parte, di volta in volta divisa, non abbia i parametri corretti : la prima volta inizia da 0 , 0 e poi le volte successive c'è errore .
    Oppure è la stampa che ha parametri sbagliati .
  • Re: Output di un grafico più grande di A4 su stampante

    Rosmarino ha scritto:


    Posso ipotizzare che il rettangolo srcRect che prende la parte, di volta in volta divisa, non abbia i parametri corretti : la prima volta inizia da 0 , 0 e poi le volte successive c'è errore .
    Oppure è la stampa che ha parametri sbagliati .
    E' questo il problema: non devi ipotizzare, devi verificare.
  • Re: Output di un grafico più grande di A4 su stampante

    Mi pare ci sia un errore concettuale 'fondamentale':
    in generale, non esiste il concetto di 'piu' grande dell'A4' BASATO sulla RISOLUZIONE.

    ci sono DUE aspetti da considerare, (piu' svariati altri):

    1) un 'plot' e' un oggetto che ha una rappresentazione 'VETTORIALE' cioe' composto da rette e curve. Queste NON HANNO una risoluzione, o se vuoi, la loro risoluzione e' INFINITA, cioe' possono essere rappresentati in modo perfetto su QUALUNQUE dispositivo (schermo, stampante, plotter)

    2) la 'dimensione' (metrica) del dispositivo, misurata in cm o inch, in termini di larghezza/altezza

    3) il numero di 'pixel/dot' per cm/inch REALI del dispositivo. Per il monitor si puo' calcolare facilmente, perche' basta conoscere la risoluzione (1920x1200 o 3840x2160, ..) e usare un metro, per la stampante DIPENDE dalla testina e dai motorini passo/passo usati per spostare la carta, ed e' dichiarata nelle specifiche del modello. Nota che per le stampanti, in generale, la risoluzione oriz e' diversa da quella vertic.

    3.1) il DPI (dot per inch) che si usa quando si generano le immagini dai plot.

    4) a tutto questo va aggiunto la capacita' degli algoritmi di visualizzazione/stampa di INGRANDIRE/RIMPICCIOLIRE quello che c'e' da visualizzare/stampare per farlo stare sullo schermo/pagina in modo 'corretto'.

    5) quando si stampa si usa il PCL (almeno sulle stampanti HP), un protocollo di comunicazione basato sulla grafica 2D. Cioe' NON SI STAMPA usando il concetto di dot (il pixel nelle stampanti) MA di linee e curve.

    6) a questo va aggiunto che la stampante SA, perche' le viene detto, quando deve stampare un'immagine rappresentata da pixel (e che lei ridimensionera' opportunamente).

    Questo per dire che ci sono strati e strati di software che hanno il compito di rendere la stampa indipendente da che cosa c'e' da stampare, da dove si vuole stampare, massimizzando la qualita' di quello che si vuole stampare.
    NON E' solo questione di pixel.

    Tanto per aggiungere 'confusione' al tutto, le stampanti ad altissima risoluzione, si mangiano in un sol boccone un'immagine 3000x10000, avendo risoluzioni dell'ordine di 4096 dpi: in cm, sarebbe un rettangolino di 2x6 cm, altro che A4

    Il 'trucco' per stampare un qualcosa su PIU' pagine NON E' quello di cambiare la risoluzione, perche' entrano in gioco gli algo di ridimensionamento, MA e' quello di convincere la stampante che NON SI VUOLE stampare su un A4, MA si vuole stampare su un A3, A2, A1,... .

    A questo punto, la stampante SA che per stampare su un A3 deve usare 2 A4, per stampare su A2 deve usare 4 A4, ecc.

    Le stampanti 'buone' supportano nativamente queste funzionalita'.
    Quelle 'consumer'/a basso costo: boh? In teoria 'dovrebbero'.

    Se non lo supportano, ci sono software, come 'fineprint', che 'simulano' una stampante virtuale con un sacco di funzionalita, e poi mappano tali funzionalita' sulla stampante fisica scelta. Se questo funzione sempre o no con stampanti consumer e' cosa da provare sul campo.
  • Re: Output di un grafico più grande di A4 su stampante

    Grazie migiorabile , grazie Alka ,
    ho verificato e continuo a farlo provando e riprovando , cambiando i dati ma ho sempre più l'impressione che manchi qualcosa .
    Stabilito che il primo foglio viene recepito correttamente , forse manca una pulizia del rettangolo buffer srcRect
    anche se fatico a concepire come la pagina successiva possa risultare bianca .
    Le combinazione dei parametri delle due istruzioni citate , credo di averle testate tutte . Penso ci sia qualcosa d'altro.
Devi accedere o registrarti per scrivere nel forum
21 risposte