web-dev-qa-db-fra.com

Ajouter une visionneuse PDF à une application WPF

Je suis nouveau sur WPF et j'essaie d'ajouter un PDF visualiseur à mon application WPF, mais je n'arrive pas à trouver comment le faire ... J'ai essayé de suivre quelques tutoriels/exemples que j'ai trouvés en ligne, mais ils ne semblent pas fonctionner pour moi pour diverses raisons ...

Par exemple, j'ai essayé de suivre le didacticiel sur: https://documentation.devexpress.com/#WPF/CustomDocument114328 pour ajouter un PDF Viewer at Design Time- it dit à

faites glisser le PdfViewerControl depuis l'onglet DX.15.2: Data Analytics Toolbox et déposez-le dans la fenêtre principale

Cependant, je ne semble pas avoir un Data & Analytics onglet dans la boîte à outils ... il y a un onglet Data, mais qui ne contient que des éléments comme Pointer, Chart, ListView, etc. Y a-t-il quelque chose que je dois faire pour ajouter/activer le Data & Analytics barre d'outils dans Visual Studio?

J'ai essayé de suivre le tutoriel sur: https://documentation.devexpress.com/#WPF/CustomDocument114329 pour ajouter un PDF Viewer via code - il dit à

Ouvrez l'Explorateur de solutions, cliquez avec le bouton droit sur Références et choisissez Ajouter une référence ... pour ajouter la bibliothèque de visionneuses PDF.

Ensuite, recherchez les assemblys DevExpress.Data.v15.2, DevExpress.Pdf.v15.2.Core, DevExpress.Xpf.DocumentViewer.v15.2.Core et DevExpress.Xpf.PdfViewer.v15.2 et activez leurs cases à cocher .

Mais quand je vais à Add Reference, Je ne trouve nulle part les assemblages qu'il mentionne, et si je les "cherche", aucun élément n'est trouvé ...

Me manque-t-il un include, ou dois-je importer des bibliothèques quelque part ou quelque chose pour les utiliser?

Un autre que j'ai essayé est: http://www.codeproject.com/Articles/380019/Using-Adobe-Reader-in-a-WPF-app qui dit:

Une fois ce contrôle ajouté au projet, le Concepteur Windows Forms doit être ouvert avec un canevas vierge. Vous devrez ouvrir la boîte à outils (CTRL + W, X). Dans un premier temps, c'est une bonne idée d'ajouter un nouvel onglet pour les contrôles personnalisés - il s'agit d'une option du menu contextuel de la boîte à outils. Avec ce nouvel onglet développé, sélectionnez "choisir les éléments" dans le menu contextuel. Lorsque la boîte de dialogue Choisir les éléments de la boîte à outils apparaît, sélectionnez l'onglet Composants COM et sélectionnez Adobe PDF Reader (cela ajoutera AcroPDF.DLL à la boîte à outils).

Mais je n'arrive pas à trouver le Choose Toolbox Items ou COM Components ça parle de...

Quelqu'un peut-il me diriger vers un didacticiel plus clair ou expliquer comment j'ajouterais une visionneuse PDF à mon application WPF? J'utilise Visual Studio 2015.

Modifier

J'ai essayé d'afficher le fichier PDF dans ma fenêtre d'application, en procédant comme suit:

Ajout d'un <Grid> pour afficher le PDF à l'interface graphique dans le XAML:

<StackPanel>
    <Grid x:Name="browserHost" Height="300" Width="525" Margin="0,0,0,0"></Grid>
</StackPanel>

Ajout d'un WebBrowser au <Grid> dans le C #, et en pointant cela vers l'emplacement du PDF je veux afficher:

        System.Windows.Controls.WebBrowser browser = new System.Windows.Controls.WebBrowser();

public MainWindow()
    {
        InitializeComponent();

        try
        {
            //browser.Navigate("C:\\...\\sample.pdf");
            browserHost.Children.Add(browser);

            //browser.Visible = true;
            browser.Navigate("C:\\...\\sample.pdf");
            browserHost.Opacity = 200;
        }catch(Exception e)
        {
            Console.WriteLine("browser is visible/ not: " + browserHost.Visibility);
        }
    }

    private void Window_Loaded_1(object sender, RoutedEventArgs e)
    {
        /*Create the interop Host control */
        //System.Windows.Forms.Integration.WindowsFormsHost Host = new System.Windows.Forms.Integration.WindowFormsHost();

        /*Create the MaskedTextBox control */
        //browser.Navigate("C:\\...\\sample.pdf");
        //Host.Child = browser;
        browserHost.Children.Add(browser);
    }

Mais actuellement, lorsque j'exécute mon application, dès qu'elle se charge, le browser que je lui ai ajouté affiche une page qui dit:

La navigation vers le site a été annulée

et une boîte de dialogue apparaît me demandant si je veux ouvrir ou enregistrer le fichier (sample.pdf - celui que j'essaie d'afficher dans le navigateur) ...

Pourquoi essaie-t-il de télécharger le fichier, plutôt que de l'afficher? Comment puis-je obtenir le browser pour afficher le fichier au lieu d'essayer de le télécharger? Ou dois-je utiliser autre chose qu'un System.Windows.Controls.WebBrowser ici?

10
Noble-Surfer

Comme déjà suggéré par @NawedNabiZada, une façon simple et éprouvée consiste à utiliser InternetExplorer intégré pour afficher Adobe PDF Reader Contrôle ActiveX. Il suppose donc que vous utilisez Windows et que vous avez Adobe PDF Reader installée.

Ensuite, vous créez un contrôle utilisateur, une fenêtre, etc. qui contient le contrôle suivant:

<WebBrowser x:Name="pdfWebViewer"></WebBrowser>

Dans le constructeur, accédez à une page vierge:

pdfWebViewer.Navigate(new Uri("about:blank"));

Pour charger un PDF sur ce contrôle, utilisez ce code simple:

pdfWebViewer.Navigate(fullPathToPDF);

Cette approche est utilisée par de nombreux logiciels Windows non seulement les applications WPF, y compris le client SAP, mais a un problème caché, voir cette question .

Le module complémentaire Adobe PDF Reader dans Internet Explorer doit être activé pour que cela fonctionne. Il existe divers problèmes avec Acrobat Reader XI, mieux vaut utiliser DC. Pour activer Adobe PDF allez dans IE paramètres, modules complémentaires et recherchez Adobe PDF Reader et activez-le (AR XI et au dessus).

Pour moi, c'était le moyen préféré par rapport à l'article de projet de code que vous avez lié.

11
Vojtěch Dohnal

Pour tous ceux qui tombent dessus et qui ont besoin d'un peu plus de contrôle qu'avec le WebBrowser: il est assez facile de créer votre propre visionneuse PDF PDF avec les API Windows 10. J'ai écrit un blog sur la façon de le faire. Vous pouvez facilement y ajouter d'autres fonctionnalités comme dessiner dessus (signature) et ainsi de suite.

Le code est disponible sur github .

Cependant, pour les fonctionnalités super avancées, vous aurez probablement besoin d'une de ces bibliothèques chères et sophistiquées.

7
LanderV

Il est également possible par le cefsharp navigateur Web.

il comprend des modules intégrés pour PDF, vous n'avez donc pas besoin d'Acrobat-Reader ou de tout autre ActiveX.

Mise en route CefSharp dans WPF

3
dovid

Pour WPF pdf viewer, vous pouvez utiliser http://pdfprinting.net/

1
user2038221