seguro puedo para imprimir gratis espaƱol descargar archivos .net vb.net interop activex adobe-reader

.net - puedo - descargar pdf gratis y seguro



Imprimir mediante programaciĆ³n en Adobe Reader 9 usando.NET Interop (4)

Estoy usando VB.Net WinForms. Me gustaría llamar al control ActiveX de Adobe Reader 9 para imprimir algunos archivos PDF. He agregado el control ActiveX a la caja de herramientas de VS (el dll es AcroPDF.dll, el nombre COM "Adobe PDF Reader". Después de algunos experimentos, funciona el siguiente código).

Dim files As String() = Directory.GetFiles(TextBoxPath.Text, "*.pdf", SearchOption.TopDirectoryOnly) Using ActiveXPDF As New AxAcroPDFLib.AxAcroPDF Me.Controls.Add(ActiveXPDF) ActiveXPDF.Hide() For Each filename As String In files ActiveXPDF.LoadFile(filename) ActiveXPDF.printAll() ''Begin Yukky Hack '' Dim endTime As Date = DateAdd(DateInterval.Second, 20, Now) Do While Now < endTime My.Application.DoEvents() Loop ''End Yuk '' Next End Using

Sin el bit Yuk, esto solo imprimirá algunos de los PDF, parece que la sentencia End Using llama a disponer sobre el control antes de que haya terminado de imprimir.

Por lo tanto, parece que la llamada a printAll no es de bloqueo, pero no puedo encontrar una propiedad de devolución de llamada o estado que pueda consultar para ver si se completó la cola de impresión. Me falta una propiedad / método o hay un trabajo más elegante (y más receptivo)?


Terminamos usando el verificador PDF de Adobe para nuestros propios propósitos de prueba. Para hacer esto, tuvimos que lanzar acrobat y manipular su interfaz mediante programación utilizando SendInput .

Me interesaría mucho ver si sería posible utilizar una API interna.


Usar este método para imprimir múltiples documentos no va a funcionar bien como lo encontró.

Tenerlo funciona es bastante complicado, pero aquí hay una descripción general de la solución.

Uso System.Diagnostics.Process para imprimir usando myProcess.StartInfo.Verb = "Imprimir" Luego verifico el estado y el estado de la cola de la impresora en dos pasos para asegurarme de que la impresión esté lista lo suficiente como para poder imprimir el próximo documento. Use WMI y ManagementObjectSearcher para enumerar la información de la impresora usando "SELECT * FROM Win32_Printer". La lógica es que trato de ver si el spooling se inicia antes de seguir imprimiendo el siguiente.

Consulte http://msdn.microsoft.com/en-us/library/aa394363.aspx para la clase Win32_Printer WMI.


Puede usar este código para mostrar cualquier archivo con su software apropiado.

Sub Show_Document(ByVal FILENAME As String) Dim p As Process = Nothing Try If My.Computer.FileSystem.FileExists(FILENAME) Then p = Process.Start(FILENAME) p.Dispose() End If Catch ex As Exception Finally End Try End Sub


Tuve el mismo problema al usar AcroPDF en Delphi ... luego descubrí que cuando "detengo" el proceso usando un mensaje, AcroPDF comienza a imprimir.

Así que solo creo un TForm modal que se cierra después de algunos segundos.

var formModal : TFormModal; begin formModal := TFormModal.Create(self); //PrintMethodHere frmPecas.CarregarDocumentoParaImpressao(); formModal.ShowModal; end;

El TFormModal es esto y simplemente inserto un ícono de carga en el formulario para representar algo así como "imprimir".

unit FModal; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, Animate, GIFCtrl; type TFormModal = class(TForm) Timer: TTimer; imgGif: TRxGIFAnimator; procedure TimerTimer(Sender: TObject); procedure FormShow(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCreate(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private declarations } public { Public declarations } end; var FormModal: TFormModal; implementation {$R *.dfm} // Author: Anderson Mello Date: 09-fev-2012 // DEscription: Using TTimer after 5 seconds I close this form procedure TFormModal.TimerTimer(Sender: TObject); begin close; end; // Author: Anderson Mello Date: 09-fev-2012 // Description: Enable the timer only when the form is shown procedure TFormModal.FormShow(Sender: TObject); begin Timer.Enabled := true; end; // Description: disable when close procedure TFormModal.FormClose(Sender: TObject; var Action: TCloseAction); begin Timer.Enabled := false; end; // Author: Anderson Mello Date: 09-fev-2012 // Description: disable close button "X", so the user can''t close procedure TFormModal.FormCreate(Sender: TObject); var hSysMenu:HMENU; begin hSysMenu:=GetSystemMenu(Self.Handle,False); if hSysMenu <> 0 then begin EnableMenuItem(hSysMenu,SC_CLOSE,MF_BYCOMMAND or MF_GRAYED); DrawMenuBar(Self.Handle); end; KeyPreview:=True; end; // Author: Anderson Mello Date: 09-fev-2012 // Description: disable shortcuts to close procedure TFormModal.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key = VK_F4) and (ssAlt in Shift) then Key:=0; end;