2010-12-03 15 views
7

en mi forma principal que tienen un método llamado SavePDFDocument():¿Cómo puedo pedirle a un usuario que elija una ubicación para guardar un archivo?

private void SavePDFDocument() 
{ 
    PDFWrapper pdfWrapper = new PDFWrapper(); 
    pdfWrapper.CreatePDF(horizontalPictureScroller1.GetPictures(), "pdfDocument.pdf"); 
} 

Como se puede ver, en este momento estoy escribiendo manualmente en un nombre para el archivo. Me gustaría pedirle al usuario que elija dónde guardarlo y qué nombre darle.

Este es el método CreatePDF() Estoy usando anterior:

public void CreatePDF(List<System.Drawing.Image> images, string filename) 
{ 
    if (images.Count >= 1) 
    { 
     Document document = new Document(PageSize.LETTER); 
     try 
     { 

      // step 2: 
      // we create a writer that listens to the document 
      // and directs a PDF-stream to a file 

      PdfWriter.GetInstance(document, new FileStream(filename, FileMode.Create)); 

      // step 3: we open the document 
      document.Open(); 

      foreach (var image in images) 
      { 
       iTextSharp.text.Image pic = iTextSharp.text.Image.GetInstance(image, System.Drawing.Imaging.ImageFormat.Jpeg); 

       if (pic.Height > pic.Width) 
       { 
        //Maximum height is 800 pixels. 
        float percentage = 0.0f; 
        percentage = 700/pic.Height; 
        pic.ScalePercent(percentage * 100); 
       } 
       else 
       { 
        //Maximum width is 600 pixels. 
        float percentage = 0.0f; 
        percentage = 540/pic.Width; 
        pic.ScalePercent(percentage * 100); 
       } 

       pic.Border = iTextSharp.text.Rectangle.BOX; 
       pic.BorderColor = iTextSharp.text.BaseColor.BLACK; 
       pic.BorderWidth = 3f; 
       document.Add(pic); 
       document.NewPage(); 
      } 
     } 
     catch (DocumentException de) 
     { 
      Console.Error.WriteLine(de.Message); 
     } 
     catch (IOException ioe) 
     { 
      Console.Error.WriteLine(ioe.Message); 
     } 

     // step 5: we close the document 
     document.Close(); 
    } 
} 

¿Alguna sugerencia?

Respuesta

13

¿Tomó un vistazo a SaveFileDialog?

private void button1_Click(object sender, System.EventArgs e) 
{ 
    Stream myStream ; 
    SaveFileDialog saveFileDialog1 = new SaveFileDialog(); 

    saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" ; 
    saveFileDialog1.FilterIndex = 2 ; 
    saveFileDialog1.RestoreDirectory = true ; 

    if(saveFileDialog1.ShowDialog() == DialogResult.OK) 
    { 
     if((myStream = saveFileDialog1.OpenFile()) != null) 
     { 
      // Code to write the stream goes here. 
      myStream.Close(); 
     } 
    } 
} 
+0

Gracias, funcionó a la perfección. –

4

Creo this page describe lo que busca:

// Configure save file dialog box 
Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog(); 
dlg.FileName = "Document"; // Default file name 
dlg.DefaultExt = ".text"; // Default file extension 
dlg.Filter = "Text documents (.txt)|*.txt"; // Filter files by extension 

// Show save file dialog box 
Nullable<bool> result = dlg.ShowDialog(); 

// Process save file dialog box results 
if (result == true) 
{ 
    // Save document 
    string filename = dlg.FileName; 
} 
+4

creo que el nivel superior 'System.Windows.Forms.SaveFileDialog' es más apropiado en este caso. ¿Alguien sabe cuál es la diferencia? No es obvio después de mirar el MSDN. –

+0

Gracias, la pregunta es más difícil sin embargo. ¿Cómo puedo integrar esta funcionalidad de SaveFieldDialog con mi código anterior? Observe que estoy usando New FileStream(). ¿Alguna sugerencia? –

+0

@Serg mira el código de ejemplo que publiqué en mi respuesta; está manejando un objeto Stream. –

Cuestiones relacionadas