LoadFile() El método del objeto AxAcroPDFLib.AxAcroPDF no se puede usar para cargar archivos PDF ya abiertos

programación


Creé una aplicación de escritorio de Windows (en C#) donde uso el control AxAcroPDF para mostrar un archivo pdf en un formulario cuando el usuario proporciona la ruta del pdf y hace clic en un botón. El archivo PDF se encuentra en una carpeta de archivos compartida de la red donde varios usuarios pueden acceder a él.
(Yo uso el método LoadFile() del objeto AxAcroPDFLib.AxAcroPDF)

Esto está funcionando bien. Pero cuando el mismo archivo pdf que mis aplicaciones intentan abrir ya está abierto con Adobe Reader, entonces mi aplicación no puede abrir el mismo archivo pdf.

Si la PC que instaló mi aplicación tiene Adobe Reader 7, la aplicación arroja el mensaje de error “System.ApplicationException falló al cargar la plantilla PDF” y la aplicación se congela.

Y si la aplicación que ejecuta la PC tiene instalado Adobe Reader X, no aparecerá ningún error, pero la pantalla de carga aparecerá para siempre.

Pero abrir el mismo pdf simultáneamente en dos o más PC usando mi aplicación funciona perfecto.

¿Alguien puede ayudarme con este tema?

Solución 1

No pude encontrar una solución adecuada como esperaba encontrar. Pero para evitar que el programa se bloquee, verifiqué antes de cargar el pdf.

C#
bool PDFAvailable = axAcroPDF1.LoadFile(PDFPath.ToString());

Si la variable booleana ‘PDFAvailable’ devuelve verdadero, cargaré el PDF como se muestra a continuación. De lo contrario, se lanza un mensaje adecuado.

C#
bool PDFAvailable = axAcroPDF1.LoadFile(PDFPath.ToString());
                       
                       if (PDFAvailable == true)
                       {
                           axAcroPDF1.LoadFile(PDFPath.ToString());
                           axAcroPDF1.setShowToolbar(false); //disable pdf toolbar.
                           axAcroPDF1.Enabled = true;
                           
                       }
                       else
                       {
                           MessageBox.Show("Selected PDF Template Is Locked By Another Application.", ""Test Application"", MessageBoxButtons.OK, MessageBoxIcon.Information);
                           
                       }

Solución 2

Encontré una solución en esto correo

En lugar de LoadFile() podemos usar la propiedad “src” del control.

Solución 4

El uso de la propiedad src para definir la ruta también puede generar un error si la ruta es demasiado larga.
Una solución es copiar el archivo a un archivo de ruta más corto y luego modificar src con esta nueva ruta.

Archivo.Copy(iRec.Path, “https://www.codeproject.com/Questions/423157/C:\temp\a.pdf”,true);
Hilo.Sleep(500);
axAcroPDF1.src = “https://www.codeproject.com/Questions/423157/C:\temp\a.pdf”;

¿Alguna otra solución?

コメント

タイトルとURLをコピーしました