none
¿Con cual componente obtengo la ruta de archivos por el usuario?

    Pregunta

  • Hola,

    El problema que tengo es que, tengo la ruta establecida por código y lo que deseo, es que el usuario pueda colocar la ruta que dese..

    Saludos

    [En este código, genero un PDF (( PERO EL PROBLEMA ES QUE SIEMPRE LO PONDRÁ EN EL ESCRITORIO ]

            Dim strRuta As String = String.Empty
            Dim sw As New StringWriter()
            Dim htw As New HtmlTextWriter(sw)
            Dim sr As New StringReader(sw.ToString())
            Dim pdf As New Document(PageSize.A4)
            Dim htmlParse As New HTMLWorker(pdf)
            Dim pdfTable As New PdfPTable(4)
    
    
            strRuta = "C:\Users\fhz\Desktop\aPrueba.pdf"
    
            If System.IO.File.Exists(strRuta) Then
                System.IO.File.Delete(strRuta)
            End If
    
            PdfWriter.GetInstance(pdf, New FileStream(strRuta, FileMode.Create))
    
            pdfTable.DefaultCell.Border = 0
            pdfTable.TotalWidth = 520
            pdfTable.LockedWidth = True
            pdfTable.SpacingBefore = 20.0F
            pdfTable.SpacingAfter = 20.0F
    
            Dim PdfTitulo As New PdfPCell(New Phrase("Gestión De Vehiculos", New Font(Font.BOLD, 20.0F, Font.BOLD, Color.BLACK)))
            PdfTitulo.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER
            PdfTitulo.Colspan = 4
            PdfTitulo.Border = 0
            PdfTitulo.FixedHeight = 60
            pdfTable.AddCell(PdfTitulo)
    
            Dim Subtitulo As New PdfPCell(New Phrase("MUÑOZ C. Y ASOCIADOS S.A. DE C.V.", New Font(Font.BOLD, 12.0F)))
            Subtitulo.Colspan = 3
            Subtitulo.Border = 0
            Subtitulo.FixedHeight = 90
            pdfTable.AddCell(Subtitulo)
    
            Dim Titulo As String = String.Format("León Guanajuato " + DateTime.Now.ToString("dd/MM/yyyy"))
            Dim pdfCeldaFecha As New PdfPCell(New Phrase(Titulo, New Font(Font.BOLD, 12.0F, Font.BOLD, Color.BLACK)))
            pdfCeldaFecha.HorizontalAlignment = iTextSharp.text.Element.ALIGN_RIGHT
            pdfCeldaFecha.Border = 0
            pdfTable.AddCell(pdfCeldaFecha)
    
            Dim Modelo As String = String.Format("Modelo Del Vehiculo: " + txtModelo_pdf.Text)
            Dim pdfCeldaModelo As New PdfPCell(New Phrase(Modelo, New Font(Font.BOLD, 9.0F)))
            pdfCeldaModelo.Colspan = 3
            pdfCeldaModelo.Border = 0
            pdfTable.AddCell(pdfCeldaModelo)
            Dim pdfCeldaRespuestaModelo As New PdfPCell(New Phrase(" ", New Font(Font.BOLD, 9.0F, Font.BOLD, Color.BLACK)))
            pdfCeldaRespuestaModelo.Border = 0
            pdfTable.AddCell(pdfCeldaRespuestaModelo)
    
            Dim Matricula As String = String.Format("Matricula: " + txtMatricula_pdf.Text)
            Dim pdfCeldaMatricula As New PdfPCell(New Phrase(Matricula, New Font(Font.BOLD, 9.0F)))
            pdfCeldaMatricula.Colspan = 3
            pdfCeldaMatricula.Border = 0
            pdfTable.AddCell(pdfCeldaMatricula)
            Dim pdfCeldaRespuestamatricula As New PdfPCell(New Phrase(" ", New Font(Font.BOLD, 9.0F, Font.BOLD, Color.BLACK)))
            pdfCeldaRespuestamatricula.Border = 0
            pdfTable.AddCell(pdfCeldaRespuestamatricula)
    
            Dim Responsable As String = String.Format("Responsable: " + txtResponsable_pdf.Text)
            Dim pdfCeldaResponsable As New PdfPCell(New Phrase(Responsable, New Font(Font.BOLD, 9.0F)))
            pdfCeldaResponsable.Colspan = 3
            pdfCeldaResponsable.Border = 0
            pdfTable.AddCell(pdfCeldaResponsable)
            Dim pdfCeldaRespuestaResponsable As New PdfPCell(New Phrase(" ", New Font(Font.BOLD, 9.0F, Font.BOLD, Color.BLACK)))
            pdfCeldaRespuestaResponsable.Border = 0
            pdfTable.AddCell(pdfCeldaRespuestaResponsable)
    
            Dim Motivo As String = String.Format("Motivo: " + txtMotivo_pdf.Text)
            Dim pdfCeldaMotivo As New PdfPCell(New Phrase(Motivo, New Font(Font.BOLD, 9.0F)))
            pdfCeldaMotivo.Colspan = 3
            pdfCeldaMotivo.Border = 0
            pdfTable.AddCell(pdfCeldaMotivo)
            Dim pdfCeldaRespuestaMotivo As New PdfPCell(New Phrase(" ", New Font(Font.BOLD, 9.0F, Font.BOLD, Color.BLACK)))
            pdfCeldaRespuestaMotivo.Border = 0
            pdfTable.AddCell(pdfCeldaRespuestaMotivo)
    
            Dim Localizacion As String = String.Format("Localizacion: " + txtLocalizacion_pdf.Text)
            Dim pdfCeldaLocalizacion As New PdfPCell(New Phrase(Localizacion, New Font(Font.BOLD, 9.0F)))
            pdfCeldaLocalizacion.Colspan = 3
            pdfCeldaLocalizacion.Border = 0
            pdfTable.AddCell(pdfCeldaLocalizacion)
            Dim pdfCeldaLocalizacionRespuesta As New PdfPCell(New Phrase(" ", New Font(Font.BOLD, 9.0F, Font.BOLD, Color.BLACK)))
            pdfCeldaLocalizacionRespuesta.Border = 0
            pdfTable.AddCell(pdfCeldaLocalizacionRespuesta)
    
            Dim Status As String = String.Format("Status: " + cmbStatus_pdf.Text)
            Dim pdfCeldaStatus As New PdfPCell(New Phrase(Status, New Font(Font.BOLD, 9.0F)))
            pdfCeldaStatus.Colspan = 3
            pdfCeldaStatus.Border = 0
            pdfTable.AddCell(pdfCeldaStatus)
            Dim pdfCeldaStatusRespuesta As New PdfPCell(New Phrase(" ", New Font(Font.BOLD, 9.0F, Font.BOLD, Color.BLACK)))
            pdfCeldaStatusRespuesta.Border = 0
            pdfTable.AddCell(pdfCeldaStatusRespuesta)
    
            Dim Observacion As String = String.Format("Observación: " + txtObservacion_pdf.Text)
            Dim pdfCeldaObservacion As New PdfPCell(New Phrase(Observacion, New Font(Font.BOLD, 9.0F)))
            pdfCeldaObservacion.Colspan = 3
            pdfCeldaObservacion.Border = 0
            pdfTable.AddCell(pdfCeldaObservacion)
            Dim pdfCeldaObservacionRespuesta As New PdfPCell(New Phrase(" ", New Font(Font.BOLD, 9.0F, Font.BOLD, Color.BLACK)))
            pdfCeldaObservacionRespuesta.Border = 0
            pdfCeldaObservacionRespuesta.FixedHeight = 400
            pdfTable.AddCell(pdfCeldaObservacionRespuesta)
    
    
            Dim pdfCelda694 As New PdfPCell(New Phrase("______________________________", New Font(Font.BOLD, 9.0F, Font.BOLD, Color.BLACK)))
            pdfCelda694.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER
            pdfCelda694.Colspan = 2
            pdfCelda694.Border = 0
            pdfTable.AddCell(pdfCelda694)
            Dim pdfCelda700 As New PdfPCell(New Phrase("______________________________", New Font(Font.BOLD, 9.0F, Font.BOLD, Color.BLACK)))
            pdfCelda700.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER
            pdfCelda700.Colspan = 2
            pdfCelda700.Border = 0
            pdfTable.AddCell(pdfCelda700)
    
    
            Dim pdfCelda711 As New PdfPCell(New Phrase("xxx", New Font(Font.BOLD, 9.0F, Font.BOLD, Color.BLACK)))
            pdfCelda711.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER
            pdfCelda711.Colspan = 2
            pdfCelda711.Border = 0
            pdfCelda711.FixedHeight = 30
            pdfTable.AddCell(pdfCelda711)
    
            Dim pdfCelda722 As New PdfPCell(New Phrase("xxx", New Font(Font.BOLD, 9.0F, Font.BOLD, Color.BLACK)))
            pdfCelda722.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER
            pdfCelda722.Colspan = 2
            pdfCelda722.Border = 0
            pdfCelda722.FixedHeight = 30
            pdfTable.AddCell(pdfCelda722)
    
    
            Dim pdfCsdelda694 As New PdfPCell(New Phrase("______________________________", New Font(Font.BOLD, 9.0F, Font.BOLD, Color.BLACK)))
            pdfCsdelda694.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER
            pdfCsdelda694.Colspan = 4
            pdfCsdelda694.Border = 0
            pdfTable.AddCell(pdfCsdelda694)
    
            Dim pdfCel34da722 As New PdfPCell(New Phrase("Guardia", New Font(Font.BOLD, 9.0F, Font.BOLD, Color.BLACK)))
            pdfCel34da722.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER
            pdfCel34da722.Colspan = 4
            pdfCel34da722.Border = 0
            pdfTable.AddCell(pdfCel34da722)
    
            pdf.Open()
            pdf.Add(pdfTable)
            htmlParse.Parse(sr)
            pdf.Close()



    jueves, 13 de abril de 2017 19:43

Respuestas

  • Hola Elíhu Neftali Sandoval Rodríguez,

    Para descargarlo tendrías que modificar tu código, agregando un MemoryStream para almacenar los datos en memoria.

    - Después de las declaraciones de tus variables :

    Using ms As New MemoryStream()
        Dim writer As PdfWriter = PdfWriter.GetInstance(pdf, ms)
    
        pdfTable.DefaultCell.Border = 0
        pdfTable.TotalWidth = 520
        pdfTable.LockedWidth = True
        pdfTable.SpacingBefore = 20.0F
        pdfTable.SpacingAfter = 20.0F
    
        'Demás código ....

    Y al finalizar, antes de cerrar el 'using' del MemoryStream :

        pdf.Open()
        pdf.Add(pdfTable)
        htmlParse.Parse(sr)
        pdf.Close()
    
        Dim bytes As Byte() = ms.ToArray()  'Obtienes los bytes
    
        Response.Clear()
        Response.ContentType = "application/pdf"
        Response.AddHeader("Content-Disposition", "attachment; filename=aPrueba.pdf")
        Response.ContentType = "application/pdf"
        Response.Buffer = True
        Response.Cache.SetCacheability(HttpCacheability.NoCache)
        Response.BinaryWrite(bytes)
        Response.End()
        Response.Close()
    
    End Using

    Pruébalo y comentas como te va.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    jueves, 13 de abril de 2017 21:58

Todas las respuestas

  • Hola Elíhu Neftali Sandoval Rodríguez

    Lo que debes usar es el control SaveFileDialog con su propieda filename, con ello le darás la ruta e incluso el nombre del archivo con que el usuario desee guardar, lo logras con el siguiente código.

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            SaveFileDialog1.ShowDialog()
            Dim ruta As String = SaveFileDialog1.FileName
    
        End Sub

    Arrastra el control SaveFileDialog a tu formulario y recupera el nombre de la ruta que elegiste

    Saludos


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    jueves, 13 de abril de 2017 19:57
  • ¿Tengo que Importar alguna librería o algo?

    No me lo reconoce como tal.

    Coloco el código, pero no me reconoce los objetos 

    ¿Por que sera?

    Uso Visual Basic

    Mis Imports

    Imports System.Data
    Imports System.Data.SqlClient
    Imports System.IO
    Imports MCAdministrador.clsDB
    Imports System.Globalization
    Imports System.Web.Services
    Imports System.Data.OleDb
    Imports iTextSharp.text
    Imports iTextSharp.text.pdf
    Imports iTextSharp.text.html.simpleparser
    

     

    jueves, 13 de abril de 2017 20:07
  • Hola Elíhu Neftali Sandoval Rodríguez, no

    Se encuentra en el toolbox: 

    Lo arrastras a tu formulario y te aparecerá abajo:


    No te preocupes si no ves algún control en tu formulario, esta asociado.

    Saludos


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.


    jueves, 13 de abril de 2017 20:10
  • Hola,

    El problema es que, no aparece en la caja de herramientas...

    Yo uso ASP ( con Visual Basic )

    Mira

    Saludos..


    jueves, 13 de abril de 2017 20:22
  • Hola

    Debiste indicar que trabajas con asp.net, pero bueno lo puedes lograr con el control FileUpload, te dejo la documentación oficial Método FileUpload.SaveAs (String)

    Saludos


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    jueves, 13 de abril de 2017 20:38
  • Hola Elíhu Neftali Sandoval Rodríguez,

    [-] ... pero el problema es que siempre lo pondrá en el escritorio ..... "C:\Users\fhz\Desktop\aPrueba.pdf"

    Debes ser más específico cuando publiques una pregunta y en el foro adecuado el cual sería 'ASP .Net'.

    No obstante, la ruta que presentas es estática el cuál solo funcionaría en tu PC más no en otras, además si quieres obtener el path de tu 'Escritorio' deberías utilizar :

    Dim ruta = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "aPrueba.pdf")

    Pero lamentablemente solo aplicaría para tu PC, y ya que estás en un desarrollo web el browser no tiene acceso a tus carpetas por lo que no podría 'escoger' en que carpeta guardarla. En vez de guardarlo directamente, sería recomendable que lo descargues, así el usuario verá donde lo guarda.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    jueves, 13 de abril de 2017 21:21
  • Hola,

    ¿y como descargo el archivo? ¿alguien sabe como?

    jueves, 13 de abril de 2017 21:36
  • Hola Elíhu Neftali Sandoval Rodríguez,

    Para descargarlo tendrías que modificar tu código, agregando un MemoryStream para almacenar los datos en memoria.

    - Después de las declaraciones de tus variables :

    Using ms As New MemoryStream()
        Dim writer As PdfWriter = PdfWriter.GetInstance(pdf, ms)
    
        pdfTable.DefaultCell.Border = 0
        pdfTable.TotalWidth = 520
        pdfTable.LockedWidth = True
        pdfTable.SpacingBefore = 20.0F
        pdfTable.SpacingAfter = 20.0F
    
        'Demás código ....

    Y al finalizar, antes de cerrar el 'using' del MemoryStream :

        pdf.Open()
        pdf.Add(pdfTable)
        htmlParse.Parse(sr)
        pdf.Close()
    
        Dim bytes As Byte() = ms.ToArray()  'Obtienes los bytes
    
        Response.Clear()
        Response.ContentType = "application/pdf"
        Response.AddHeader("Content-Disposition", "attachment; filename=aPrueba.pdf")
        Response.ContentType = "application/pdf"
        Response.Buffer = True
        Response.Cache.SetCacheability(HttpCacheability.NoCache)
        Response.BinaryWrite(bytes)
        Response.End()
        Response.Close()
    
    End Using

    Pruébalo y comentas como te va.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    jueves, 13 de abril de 2017 21:58
  • Hola Elíhu Neftali Sandoval Rodríguez,

    Para descargarlo tendrías que modificar tu código, agregando un MemoryStream para almacenar los datos en memoria.

    - Después de las declaraciones de tus variables :

    Using ms As New MemoryStream()
        Dim writer As PdfWriter = PdfWriter.GetInstance(pdf, ms)
    
        pdfTable.DefaultCell.Border = 0
        pdfTable.TotalWidth = 520
        pdfTable.LockedWidth = True
        pdfTable.SpacingBefore = 20.0F
        pdfTable.SpacingAfter = 20.0F
    
        'Demás código ....

    Y al finalizar, antes de cerrar el 'using' del MemoryStream :

        pdf.Open()
        pdf.Add(pdfTable)
        htmlParse.Parse(sr)
        pdf.Close()
    
        Dim bytes As Byte() = ms.ToArray()  'Obtienes los bytes
    
        Response.Clear()
        Response.ContentType = "application/pdf"
        Response.AddHeader("Content-Disposition", "attachment; filename=aPrueba.pdf")
        Response.ContentType = "application/pdf"
        Response.Buffer = True
        Response.Cache.SetCacheability(HttpCacheability.NoCache)
        Response.BinaryWrite(bytes)
        Response.End()
        Response.Close()
    
    End Using

    Pruébalo y comentas como te va.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    Listo..

    Muchas Gracias amigo.

    jueves, 13 de abril de 2017 22:18