Output di stampa

di il
4 risposte

Output di stampa

Salve a tutti ,
un problemino :
  • stampa di un documento/grafico in formato .pdf nella cartella : C:\PDF
  • stampa di un documento/grafico in formato .png nella cartella : C:\PNG
quando voglio un output diverso dalla stampa su carta predispongo la cartella di arrivo :
saveDlg.InitialDirectory = openDlg.InitialDirectory = "C:\\PDF"; oppure
saveDlg.InitialDirectory = openDlg.InitialDirectory = "C:\\PNG";
NOTA : ho messo entrambe le indicazioni ( save... e open... ) per non saper leggere nè scrivere , ma non cambia nulla .
COMUNQUE faccia viene proposta in automatico l' ultima cartella scelta in precedenza .
Ossia : chiedo la stampa in formato .pdf e DEVO comunque arrivare alla cartella C:\PDF
Fatto questo , se scelgo il formato .png ANCHE se indico saveDlg.InitialDirectory = openDlg.InitialDirectory = "C:\\PNG";
viene proposta la cartella ultima scelta , in questo esempio C:\PDF
DOVE SBAGLIO ???

4 Risposte

  • Re: Output di stampa

    Rosmarino ha scritto:


    DOVE SBAGLIO ???
    Tanto per cominciare, nell'omettere il codice sorgente: come facciamo a individuare l'errore se non vediamo il codice che è stato scritto per riprodurre la funzionalità?
  • Re: Output di stampa

    Grazie per l'attenzione ALKA , ci provo . Non so bene cosa indicare .
            int wA4 = 827;
            int hA4 = 1169;
            FA4 = new Bitmap(wA4 * 2, hA4 * 3);      
            g = Graphics.FromImage(FA4);  
            pd = new PrintDocument();                                  
            ppd = new PrintPreviewDialog();
            printDlg = new PrintDialog();
            setupDlg = new PageSetupDialog();
            openDlg = new OpenFileDialog();
            saveDlg = new SaveFileDialog();
            pd.PrintPage += new PrintPageEventHandler(Pd_PrintPage) {               // ciclo di stampa di 1 foglio A4 alla volta
                        List<PaperSize> pkSize = pd.PrinterSettings.PaperSizes.Cast<PaperSize>().ToList();
                        PaperSize sizeA4 = pkSize.First(size => size.Kind == PaperKind.A4);
                        pd.DefaultPageSettings.PaperSize = sizeA4;
                        Bitmap paginaInStampa = FA4.Clone(new Rectangle(0, 0, wA4, hA4), FA4.PixelFormat);
                        e.Graphics.DrawImage(paginaInStampa, new Rectangle(0, 0, wA4, hA4));   
            }   // contiene anche l'indicazione        e.HasMorePages = true;  o   false;
    
            if (printDlg.ShowDialog() != DialogResult.OK) return;    // scelta della stampante : possibile fine
            if (pd.PrinterSettings.PrinterName == "Microsoft Print to PDF") 
                       saveDlg.InitialDirectory = openDlg.InitialDirectory = "C:\\PDF";      // cartella proposta
            else saveDlg.InitialDirectory = "C:\\PNG";
    
           pd.Print();
    Ho semplificato al massimo il codice di tutte le istruzioni che palesemente non incidono sul problema.
    Premesso che funziona tutto correttamente ad eccezione del fatto che entrando in pd.Print();
    l' evento ( SOLO nel caso di stampa/salvataggio in PDF ) videa in automatico la richiesta di dove e con che nome salvare
    E' qui che succede che SEMPRE propone la cartella ultima utilizzata in precedenza .
    Viceversa quando salvo in formato .png l'istruzione :
    if (saveDlg.ShowDialog() != DialogResult.OK) return;   // dove salva
    non viene lanciata in automatico dall'evento e funziona correttamente videando la cartella proposta :
    saveDlg.InitialDirectory = "C:\\PNG";
  • Re: Output di stampa

    Dovrebbe funzionare senza problemi. Controlla con un breakpoint in debug l'effettiva esecuzione di

    if (pd.PrinterSettings.PrinterName == "Microsoft Print to PDF")
  • Re: Output di stampa

    Grazie per l'attenzione Oregon ,
    Ho provato , naturalmente , a seguire passo passo l'esecuzione ma con F11 all' ingresso di pd:Print();
    appare direttamente la videata ( non richiesta espressamente dal codice ) che propone la cartella ed attende il nome del file .pdf
    Da quello che posso capire è l'evento che gestisce in autonomia tale videata . Il problema è che non so come intervenire per far apparire la cartella proposta dal mio codice .

    in procinto di entrare in pd.Print();
    pd.PrinterSettings.PrinterName è effettivamente "Microsoft Print to PDF" e
    saveDlg.InitialDirectory = openDlg.InitialDirectory = "C:\\PDF";      // cartella proposta
    ma nella videata appare , come proposta , la cartella ultima attivata in precedenza .
Devi accedere o registrarti per scrivere nel forum
4 risposte