Méthode LoadFile() de l’objet AxAcroPDFLib.AxAcroPDF ne peut pas utiliser pour charger des fichiers PDF déjà ouverts

la programmation


J’ai créé une application de bureau Windows (en C#) dans laquelle j’utilise le contrôle AxAcroPDF pour afficher un fichier pdf sur un formulaire lorsque l’utilisateur donne le chemin du pdf et clique sur un bouton. Le fichier PDF se trouve dans un dossier de fichiers partagé sur le réseau où plusieurs utilisateurs peuvent y accéder.
(J’utilise la méthode LoadFile() de l’objet AxAcroPDFLib.AxAcroPDF)

Cela fonctionne bien. Mais lorsque le même fichier PDF que mes applications tentent d’ouvrir est déjà ouvert à l’aide d’Adobe Reader, mon application ne peut pas ouvrir le même fichier PDF.

Si le PC installé sur mon application est équipé d’Adobe Reader 7, l’application renvoie le message d’erreur “System.ApplicationException Failed Loading PDF Template” et l’application se bloque.

Et si l’application exécutant le PC est équipée d’Adobe Reader X, aucune erreur n’apparaîtra mais l’écran de chargement apparaîtra pour toujours.

Mais ouvrir le même PDF simultanément sur deux ou plusieurs PC à l’aide de mon application fonctionne parfaitement.

Quelqu’un peut-il m’aider sur ce problème ?

Solution 1

Je n’ai pas trouvé de solution appropriée comme je m’y attendais. Mais pour éviter que le programme ne plante, j’ai mis une coche avant de charger le pdf.

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

Si la variable booléenne ‘PDFAvailable’ renvoie vrai, je chargerai le PDF comme ci-dessous. Sinon, un message approprié est lancé.

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);
                           
                       }

Solution 2

J’ai trouvé une solution de contournement ici poste

Plutôt que LoadFile() nous pouvons utiliser la propriété “src” du contrôle.

Solution 4

l’utilisation de la propriété src pour définir le chemin peut également générer une erreur si le chemin est trop long.
Une solution consiste à copier le fichier dans un chemin de fichier plus court, puis à modifier src avec ce nouveau chemin.

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

Une autre solution ?

コメント

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