none
imprimir pdf pagina 1 RRS feed

  • Pregunta

  • hola

    tengo una aplicación en Visual net donde imprimo un documento pdf

    no se si el codigo es el mas idoneo para imprimir pero funciona ok

    mi duda es si puedo imprimir solo la primera pagina


       Dim MyProcess As New Process
            MyProcess.StartInfo.CreateNoWindow = False
            MyProcess.StartInfo.Verb = "print"
            MyProcess.StartInfo.FileName = "fichero.pdf"
            MyProcess.Start()
            MyProcess.WaitForExit(10000)
            MyProcess.CloseMainWindow()
            MyProcess.Close()


    Aran

    jueves, 28 de enero de 2016 18:23

Respuestas

  • Puedes usar AcroExch.PDDoc

    Te pongo un ejemplo:

    Dim ret as Integer

    Dim pdfDoc As Acrobat.CAcroPDDoc
    Dim pdfPage As Acrobat.CAcroPDPage

    pdfDoc = CreateObject("AcroExch.PDDoc")

    ret = pdfDoc.Open(Fichero)   ' Abro el documento
    If ret = False Then
        Throw New FileNotFoundException
         Exit Sub
    End If
    pdfPage = pdfDoc.AcquirePage(1)   ' Aquí tomo la 1ª página

    Call pdfPage.CopyToClipboard(pdfRect, 0, 0, 100)

    Dim clipboardData As IDataObject = Clipboard.GetDataObject() ' Lo copio al portapapeles

    Ahora tendrás la imagen de la primera página en el portapapeles, ya solo tienes que imprimirla.




    Saludos, Javier J

    miércoles, 24 de febrero de 2016 11:17
  • Falta parte del código :

    Dim ret as Integer

    Dim pdfDoc As Acrobat.CAcroPDDoc
    Dim pdfPage As Acrobat.CAcroPDPage
    Dim pdfRect As Acrobat.CAcroRect
    Dim pdfRectTemp As Object

    pdfDoc = CreateObject("AcroExch.PDDoc")
    ret = pdfDoc.Open(Fichero)   ' Abro el documento 

    If ret = False Then
        Throw New FileNotFoundException
         Exit Sub
    End If
    pdfPage = pdfDoc.AcquirePage(1)   ' Aquí tomo la 1ª página

    dfRectTemp = pdfPage.GetSize
    pdfRect = CreateObject("AcroExch.Rect")
    pdfRect.Left = 0
    pdfRect.right = pdfRectTemp.x
    pdfRect.Top = 0
    pdfRect.bottom = pdfRectTemp.y

    Call pdfPage.CopyToClipboard(pdfRect, 0, 0, 100)

    Dim clipboardData As IDataObject = Clipboard.GetDataObject() ' Lo copio al portapapeles


    Saludos, Javier J

    martes, 1 de marzo de 2016 7:46
  • Supongo que puedes usar varias formas. Una puede ser capturar el portapapeles en un picturebox e imprimirlo :

    Dim data As IDataObject = Clipboard.GetDataObject()
    If data.GetDataPresent(GetType(System.Drawing.Bitmap)) Then
        Dim Bmp As Bitmap = CType(data.GetData(GetType(System.Drawing.Bitmap)), Bitmap)
    
        PictureBox1.Image = Bmp
    End If


    Saludos, Javier J

    martes, 1 de marzo de 2016 12:12

Todas las respuestas

  • veo que nadie tiene solucion para mi duda

    tambien existe el System.Diagnostics.ProcessStartInfo pero me pasa igual

    no consigo que imprima solo la primera pagina

    por favor si alguien tiene alguna suguerencia que me pueda ayudar seria de muchisimo agradecer

    un saludo


    Aran

    miércoles, 24 de febrero de 2016 9:44
  • Puedes usar AcroExch.PDDoc

    Te pongo un ejemplo:

    Dim ret as Integer

    Dim pdfDoc As Acrobat.CAcroPDDoc
    Dim pdfPage As Acrobat.CAcroPDPage

    pdfDoc = CreateObject("AcroExch.PDDoc")

    ret = pdfDoc.Open(Fichero)   ' Abro el documento
    If ret = False Then
        Throw New FileNotFoundException
         Exit Sub
    End If
    pdfPage = pdfDoc.AcquirePage(1)   ' Aquí tomo la 1ª página

    Call pdfPage.CopyToClipboard(pdfRect, 0, 0, 100)

    Dim clipboardData As IDataObject = Clipboard.GetDataObject() ' Lo copio al portapapeles

    Ahora tendrás la imagen de la primera página en el portapapeles, ya solo tienes que imprimirla.




    Saludos, Javier J

    miércoles, 24 de febrero de 2016 11:17
  • muchas gracias

    entiendo que tengo que agragar la referencia COM de Acrobat a mi proyecto no?

    me da error la linea

    Call pdfPage.CopyToClipboard(pdfRect, 0, 0, 100)

    entiendo que en lugar de pdfRect es pdfdoc, o pdfpage o ret, pero con todas me da error, ref. a objeto no establecida

    de todos modos, me dices que me quedo con la imagen en el portapapeles para imprimir pero tampoco se como imprimirla


    Aran

    lunes, 29 de febrero de 2016 8:10
  • Falta parte del código :

    Dim ret as Integer

    Dim pdfDoc As Acrobat.CAcroPDDoc
    Dim pdfPage As Acrobat.CAcroPDPage
    Dim pdfRect As Acrobat.CAcroRect
    Dim pdfRectTemp As Object

    pdfDoc = CreateObject("AcroExch.PDDoc")
    ret = pdfDoc.Open(Fichero)   ' Abro el documento 

    If ret = False Then
        Throw New FileNotFoundException
         Exit Sub
    End If
    pdfPage = pdfDoc.AcquirePage(1)   ' Aquí tomo la 1ª página

    dfRectTemp = pdfPage.GetSize
    pdfRect = CreateObject("AcroExch.Rect")
    pdfRect.Left = 0
    pdfRect.right = pdfRectTemp.x
    pdfRect.Top = 0
    pdfRect.bottom = pdfRectTemp.y

    Call pdfPage.CopyToClipboard(pdfRect, 0, 0, 100)

    Dim clipboardData As IDataObject = Clipboard.GetDataObject() ' Lo copio al portapapeles


    Saludos, Javier J

    martes, 1 de marzo de 2016 7:46
  • y luego como imprimo lo que tengo en el portapapeles?

    Aran

    martes, 1 de marzo de 2016 8:45
  • Supongo que puedes usar varias formas. Una puede ser capturar el portapapeles en un picturebox e imprimirlo :

    Dim data As IDataObject = Clipboard.GetDataObject()
    If data.GetDataPresent(GetType(System.Drawing.Bitmap)) Then
        Dim Bmp As Bitmap = CType(data.GetData(GetType(System.Drawing.Bitmap)), Bitmap)
    
        PictureBox1.Image = Bmp
    End If


    Saludos, Javier J

    martes, 1 de marzo de 2016 12:12
  • no va a ralentizar mucho el proceso?

    y luego como lo imprimo?


    Aran

    martes, 1 de marzo de 2016 15:03
  • Puedes imprimirlo así:

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

            Dim myPrintDocument1 As System.Drawing.Printing.PrintDocument = New System.Drawing.Printing.PrintDocument()
            Dim myPrinDialog1 As New PrintDialog()
            AddHandler myPrintDocument1.PrintPage, New System.Drawing.Printing.PrintPageEventHandler(AddressOf myPrintDocument1_PrintPage)
            myPrinDialog1.Document = myPrintDocument1
            If myPrinDialog1.ShowDialog() = DialogResult.OK Then
                myPrintDocument1.Print()
            End If

        End Sub

       Private Sub myPrintDocument1_PrintPage(sender As System.Object, e As System.Drawing.Printing.PrintPageEventArgs)
            Dim myBitmap2 As New Bitmap(Me.Width, Me.Height)
            Me.DrawToBitmap(myBitmap2, New Rectangle(0, 0, Me.Width, Me.Height))
            e.Graphics.DrawImage(myBitmap2, 0, 0)
            myBitmap2.Dispose()
        End Sub


    Saludos, Javier J

    martes, 1 de marzo de 2016 17:48
  • Al poner el programa en el equipo del cliente me da un error.

    he copiado el fichero Interop.Acrobat.dll


    Aran

    martes, 8 de marzo de 2016 10:47