visual studio net imprimir formulario ejemplo boton abrirlo vb.net pdf

studio - printdocument vb.net ejemplo



Imprimir en una impresora pdf programáticamente (11)

Así es como lo hago en VBScript. Puede que no sea muy útil para ti, pero podría ayudarte a empezar. Necesita tener un creador de PDF (adobe acrobat) como una impresora llamada "Adobe PDF".

''PDF_WILDCARD = "*.pdf" ''PrnName = "Adobe PDF" Sub PrintToPDF(ReportName As String, TempPath As String, _ OutputName As String, OutputDir As String, _ Optional RPTOrientation As Integer = 1) Dim rpt As Report Dim NewFileName As String, TempFileName As String ''--- Printer Set Up --- DoCmd.OpenReport ReportName, View:=acViewPreview, WindowMode:=acHidden Set rpt = Reports(ReportName) Set rpt.Printer = Application.Printers(PrnName) ''Set up orientation If RPTOrientation = 1 Then rpt.Printer.Orientation = acPRORPortrait Else rpt.Printer.Orientation = acPRORLandscape End If ''--- Print --- ''Print (open) and close the actual report without saving changes DoCmd.OpenReport ReportName, View:=acViewNormal, WindowMode:=acHidden '' Wait until file is fully created Call waitForFile(TempPath, ReportName & PDF_EXT) ''DoCmd.Close acReport, ReportName, acSaveNo DoCmd.Close acReport, ReportName TempFileName = TempPath & ReportName & PDF_EXT ''default pdf file name NewFileName = OutputDir & OutputName & PDF_EXT ''new file name ''Trap errors caused by COM interface On Error GoTo Err_File FileCopy TempFileName, NewFileName ''Delete all PDFs in the TempPath ''(which is why you should assign it to a pdf directory) On Error GoTo Err_File Kill TempPath & PDF_WILDCARD Exit_pdfTest: Set rpt = Nothing Exit Sub Err_File: '' Error-handling routine while copying file Select Case Err.Number '' Evaluate error number. Case 53, 70 '' "Permission denied" and "File Not Found" msgs '' Wait 3 seconds. Debug.Print "Error " & Err.Number & ": " & Err.Description & vbCr & "Please wait a few seconds and click OK", vbInformation, "Copy File Command" Call sleep(2, False) Resume Case Else MsgBox Err.Number & ": " & Err.Description Resume Exit_pdfTest End Select Resume End Sub Sub waitForFile(ByVal pathName As String, ByVal tempfile As String) With Application.FileSearch .NewSearch .LookIn = pathName .SearchSubFolders = True .filename = tempfile .MatchTextExactly = True ''.FileType = msoFileTypeAllFiles End With Do While True With Application.FileSearch If .Execute() > 0 Then Exit Do End If End With Loop End Sub Public Sub sleep(seconds As Single, EventEnable As Boolean) On Error GoTo errSleep Dim oldTimer As Single oldTimer = Timer Do While (Timer - oldTimer) < seconds If EventEnable Then DoEvents Loop errSleep: Err.Clear End Sub

Estoy tratando de imprimir un archivo existente a PDF programáticamente en Visual Basic 2008.

Nuestros activos relevantes actuales son: Visual Studio 2008 Professional Adobe Acrobat Professional 8.0

Pensé en obtener un sdk como ITextSharp, pero parece ser excesivo para lo que estoy tratando de hacer sobre todo porque tenemos la versión completa de Adobe.

¿Hay un código relativamente simple para imprimir en una impresora PDF (y por supuesto asignarlo para imprimir a una ubicación específica) o requerirá el uso de otra biblioteca para imprimir en PDF?

Quiero imprimir un documento previamente creado en un archivo pdf. En este caso, es un archivo .snp que quiero convertir en un archivo .pdf, pero creo que la lógica sería la misma para cualquier tipo de archivo.

Acabo de probar la ejecución del shell anterior, y no funcionará de la manera que quiero. ya que me pregunta dónde quiero imprimir y aún no imprime donde quiero (múltiples ubicaciones), lo cual es crucial ya que creamos muchos de los mismos archivos PDF con nombre (con diferentes datos dentro del PDF y ubicados en carpetas de clientes correspondientes)

El proceso actual es:

  • Vaya a // servidor de informes / client1
  • crear archivos pdf de todos los documentos snp en la carpeta a mano
  • copie el pdf a // informes del sitio web / client1
  • luego repita para los más de 100 clientes toma aproximadamente dos horas para completar y verificar

Sé que esto se puede hacer mejor, pero solo llevo aquí tres meses y hubo otras preocupaciones urgentes que fueron mucho más inmediatas. Tampoco esperaba que algo tan trivial fuera tan difícil de codificar.



Lo que quiere hacer es encontrar un buen controlador de impresora PDF gratuito. Estos se instalan como impresoras, pero en lugar de imprimir en un dispositivo físico, procesa los comandos de la impresora en formato PDF. Luego, puede ejecutar ShellExecute como se indicó anteriormente, o usar el .NET PrintDocument incorporado, refiriendo la "impresora" PDF por su nombre. Encontré algunos gratuitos , incluyendo productos de Primo y BullZip (libertad limitada a 10 usuarios) bastante rápido.

Parece que los archivos SNP son instantáneas de Microsoft Access. Deberá buscar una interfaz de línea de comando para Access o Snapshot Viewer que le permitirá especificar el destino de la impresora.

También vi que hay un control ActiveX incluido en la descarga de SnapshotViewer. Podría intentar usar eso en su programa para cargar el archivo snp, y luego decirle dónde imprimirlo, si es compatible con esa funcionalidad.


Si intenta generar el PDF generado a mano (con SDK o un controlador de impresora PDF) no es muy fácil. La referencia de formato PDF está disponible en Adobe.

El problema es que el archivo es una mezcla de ASCII y tablas que tienen desplazamientos binarios dentro del archivo para referenciar objetos. Es un formato interesante y muy extensible, pero es difícil escribir un archivo simple.

Es factible si es necesario. Miré los ejemplos en la referencia de Adobe PDF, los escribí a mano y los trabajé hasta que pude hacerlos funcionar como lo necesitaba. Si va a hacer esto mucho, puede valer la pena, de lo contrario, mire un SDK.


PDFforge ofrece PDFCreator. Creará archivos PDF desde cualquier programa que pueda imprimir, incluso los programas existentes. Tenga en cuenta que está basado en GhostScript, por lo que tal vez no se ajuste bien a su licencia de Acrobat.

¿Has mirado en el servidor de Adobe Distiller ? Puede generar archivos PostScript utilizando cualquier controlador de impresora y hacer que se traduzca a PDF. (En realidad, PDFCreator hace algo similar).


El gran punto clave aquí es que PDF ES DIFÍCIL. Si hay algo que pueda hacer para evitar crear o editar documentos PDF directamente, le recomiendo encarecidamente que lo haga. Parece que lo que realmente quieres es un convertidor de SNP a PDF por lotes. Probablemente puedas hacer esto con un producto listo para usar, sin siquiera abrir Visual Studio. Alguien mencionó Adobe Distiller Server: verifique sus documentos para Acrobat, sé que viene con Distiller básico, y puede configurar Distiller para que se ejecute en un modo similar, donde mira el Directorio A y escupe versiones en PDF de cualquier archivo. que aparecen en el Directorio B.

Una alternativa: ya que está trabajando con instantáneas de Access, es mejor escribir un script VBA que recorra todos los SNP en un directorio y los imprima en la impresora PDF instalada.

ETA: si necesita especificar el resultado de la impresora PDF, podría ser más difícil. Sugeriría tener el destilador PDF configurado para enviar a un directorio temporal, para que pueda imprimir uno, mover el resultado, luego imprimir otro, y así sucesivamente.


Encontré un problema similar en una aplicación C # ASP.NET. Mi solución fue disparar un compilador LaTeX en la línea de comando con un código generado. No es exactamente una solución simple, pero genera algunos .pdfs realmente hermosos.


La mejor biblioteca para Java es iText, pero desde el último año más o menos viendo la lista de correo NO es una tarea sencilla en absoluto


Tuve el mismo desafío. La solución que hice fue comprar un componente llamado PDFTron. Tiene una API para enviar documentos pdf a una impresora desde un servicio desatendido. Publiqué cierta información en mi blog sobre eso. ¡Echar un vistazo!

¿Cómo imprimir un archivo PDF programáticamente?


Imports System.Drawing.Printing Imports System.Reflection Imports System.Runtime.InteropServices Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim pkInstalledPrinters As String '' Find all printers installed For Each pkInstalledPrinters In _ PrinterSettings.InstalledPrinters printList.Items.Add(pkInstalledPrinters) Next pkInstalledPrinters '' Set the combo to the first printer in the list If printList.Items.Count > 0 Then printList.SelectedItem = 0 End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Try Dim pathToExecutable As String = "AcroRd32.exe" Dim sReport = " " ''pdf file that you want to print ''Dim SPrinter = "HP9F77AW (HP Officejet 7610 series)" ''Name Of printer Dim SPrinter As String SPrinter = printList.SelectedItem ''MessageBox.Show(SPrinter) Dim starter As New ProcessStartInfo(pathToExecutable, "/t """ + sReport + """ """ + SPrinter + """") Dim Process As New Process() Process.StartInfo = starter Process.Start() Process.WaitForExit(10000) Process.Kill() Process.Close() Catch ex As Exception MessageBox.Show(ex.Message) ''just in case if something goes wrong then we can suppress the programm and investigate End Try End Sub End Class


Similar a otras respuestas, pero mucho más simple. Finalmente lo reduje a 4 líneas de código, no a bibliotecas externas (aunque debe tener Adobe Acrobat instalado y configurado como Predeterminado para PDF).

Dim psi As New ProcessStartInfo psi.FileName = "C:/Users/User/file_to_print.pdf" psi.Verb = "print" Process.Start(psi)

Esto abrirá el archivo, lo imprimirá con la configuración predeterminada y luego lo cerrará.

Adaptado de esta respuesta C #