web-dev-qa-db-fra.com

Affichage d'un fichier pdf à partir de Winform

Je suis en train de créer une simple calculatrice en C # (formulaire Windows)

J'ai créé une "Aide utilisateur" qui est un fichier pdf, ce que je veux c'est afficher ce fichier pdf si l'utilisateur clique sur le bouton "Aide" dans le WinForm. Si l'on suppose qu'Adobe Reader est préinstallé sur la machine de l'utilisateur ...

Comment ouvrir le fichier pdf en cliquant sur le bouton dans winForm?

Je ne prévois pas de fournir ce fichier pdf sur le disque dur de l'utilisateur. Ce qui signifie que je dois intégrer ce pdf dans la calculatrice (winForm) et que je dois l'afficher en cliquant sur le bouton.

Veuillez me guider avec la meilleure pratique pour afficher un fichier incorporé dans winForm.

23
gsvirdi

Je le mettrais dans mon dossier de programme, ajouterais un lien dans mon dossier Menu Démarrer pour permettre un accès direct (sans démarrer mon outil) et juste sur un événement de clic System.Diagnostics.Process.Start(@".\Manual.pdf");

Mise à jour

Ok, maintenant nous arrivons à une toute nouvelle question: comment intégrer un fichier dans ma demande et le démarrer?

Pour cette question, vous trouverez déjà plusieurs réponses ici, mais voici la version courte:

  1. Cliquez avec le bouton droit sur votre projet et sélectionnez Ajouter - Élément existant
  2. Sélectionnez votre fichier (ne double-cliquez pas dessus)
    • Cliquez sur la petite flèche à côté du bouton Ajouter et sélectionnez Ajouter en tant que lien
  3. Double-cliquez sur Propriétés - Resources.resx
  4. Cliquez sur la petite flèche en regard de Ajouter une ressource et sélectionnez Ajouter un fichier existant
  5. Sélectionnez à nouveau le même fichier dans la boîte de dialogue ouverte
  6. Vous pouvez maintenant accéder au fichier dans votre code en tant que byte[] À partir de Properties.Resources.NameOfResource

Avec ces étapes, vous référencez votre fichier partout où il existe au sein de votre structure. Si vous aimez qu'une copie de votre fichier pdf soit placée dans un sous-dossier Ressources de votre projet, sautez simplement les points un et deux dans la liste ci-dessus.

Pour ouvrir votre pdf maintenant, vous devrez écrire l'octet [] sur le disque (peut-être avec Path.GetTempFileName()) et le démarrer avec Adobe Reader. (N'oubliez pas de supprimer le fichier après utilisation)

6
Oliver

Vous pouvez référencer le contrôle Adobe Reader ActiveX et le regrouper avec votre application.

Ajoutez simplement AcroPDF.PDF.1 dans votre boîte à outils à partir de l'onglet Composants COM (cliquez avec le bouton droit sur la boîte à outils et cliquez sur Choose Items...) puis faites glisser une instance sur votre Winform pour que le concepteur crée le code pour vous. Alternativement, après avoir ajouté la référence nécessaire, vous pouvez utiliser le code suivant:

AxAcroPDFLib.AxAcroPDF pdf = new AxAcroPDFLib.AxAcroPDF();
pdf.Dock = System.Windows.Forms.DockStyle.Fill;
pdf.Enabled = true;
pdf.Location = new System.Drawing.Point(0, 0);
pdf.Name = "pdfReader";
pdf.OcxState = ((System.Windows.Forms.AxHost.State)(new System.ComponentModel.ComponentResourceManager(typeof(ViewerWindow)).GetObject("pdfReader.OcxState")));
pdf.TabIndex = 1;

// Add pdf viewer to current form        
this.Controls.Add(pdf);

pdf.LoadFile(@"C:\MyPDF.pdf");
pdf.setView("Fit");
pdf.Visible = true;
22
Winston Smith

Vous pouvez utiliser le contrôle WebBrowser et laisser IE charger un lecteur PDF pour vous s'il y en a un installé sur la machine).

Cependant, la dernière fois que j'ai essayé cela, j'ai dû écrire le fichier PDF sur le disque en premier, afin de pouvoir pointer le contrôle WebBrowser dessus).

11
Ian Ringrose

Si vous souhaitez afficher un fichier PDF dans votre application, le contrôle WebBrowser est probablement préférable au contrôle Adobe Reader, car il ouvrira le fichier très facilement dans PDF Reader ou autre chose IE utilise par défaut pour ouvrir les fichiers PDF. Vous ajoutez simplement le contrôle WebBrowser à un formulaire existant ou nouveau et accédez au fichier pdf.

Ne présumez jamais qu'un utilisateur dispose d'Adobe ou de tout autre contrôle ou bibliothèque tiers installé sur ses machines, empaquetez-le toujours avec votre exécutable ou vous pourriez avoir des problèmes.

Le contrôle Adobe Reader ne s'intègre évidemment pas aussi bien avec .NET en tant que composant Windows intrinsèque. En règle générale, je privilégie toujours l'utilisation de contrôles .Net intégrés par rapport aux fournisseurs tiers. En ce qui concerne l'incorporation du fichier dans l'exécutable réel; ne se produira pas tant que Microsoft n'aura pas décidé qu'un ancien PDF peut être intégré dans le CLS et compilé dans MSIL. Ce que vous avez lorsque vous développez une application en .NET est du code qui peut être compilé en MSIL intermédiaire à traduire au moment de l'exécution par le CLR en code natif et exécuté dans le système d'exploitation.

WebBrowser1.Navigate("SomePDF.pdf");
7
Scott Net

Il existe un projet de visionneuse C # pdf sur le code Google. http://code.google.com/p/pdfviewer-win32/ il y a le visualiseur et il y a la bibliothèque qu'il utilise disponible qui utilise mupdf et xpdf pour rendre les documents pdf dans votre programme winforms . Je suis en train de développer une bibliothèque de contrôle utilisateur pour les gens à utiliser et à déposer dans leurs programmes pour les capacités de visualisation PDF. ça marche plutôt bien.

7
Cory

Si votre utilisateur a Adobe Reader (ou tout autre lecteur PDF lecteur) installé sur sa machine, vous pouvez utiliser:

System.Diagnostics.Process.Start(
       "My-PDF-file.pdf");

J'espère que cela t'aides.

Remarque: Évidemment, cela échouera si l'utilisateur n'a pas installé d'applications PDF Reader).

6
Tommy

Je suggérerais de convertir votre fichier pdf en un fichier d'aide Microsoft, afin que vous n'ayez pas besoin d'avoir Adobe Reader installé (c'est bogué et a beaucoup trop de problèmes de sécurité). Vous ne pouvez pas vous attendre à ce que les utilisateurs l’aient.

En réponse au commentaire du démarreur:

Oui, vous devrez créer votre fichier d'aide en tant que document HTML au lieu d'un pdf. Il n'y a pas de moyen facile de convertir un pdf en HTML.

5
Snake

Il peut être possible d'incorporer Adobe's Reader dans votre formulaire en tant que composant ActiveX. Mais cela signifie que vous devrez vous assurer que Reader est installé sur la machine cliente pour que cela fonctionne.

Dans le cas où il ne doit pas être strictement intégré, vous pouvez simplement lancer le fichier PDF et laisser le visualiseur que l'utilisateur l'ouvrira.

4
Assaf Lavie

Comment ouvrir PDF avec chemin relatif

Dans ce cas, l'application créée doit fonctionner sur plusieurs PC. Pour faire référence à un fichier qui ne se trouve pas dans le réseau, mais dans le dossier Programm lui-même, utilisez l'extrait de code suivant:

Incluez tout d'abord la bibliothèque suivante:

using System.IO;

Utilisez ensuite un Button, picturebox, ou any pour créer un ClickEvent et utiliser l'extrait de code suivant:

    private void pictureBox2_Click(object sender, EventArgs e)
    {
        //get current folderpath of the .exe
        string ProgramPath = AppDomain.CurrentDomain.BaseDirectory;
        //jump back relative to the .exe-Path to the Resources Path
        string FileName = string.Format("{0}Resources\\Master_Thesis_Expose.pdf", Path.GetFullPath(Path.Combine(ProgramPath, @"..\..\")));

        //Open PDF
        System.Diagnostics.Process.Start(@"" + FileName + "");

    }

| Pouce en l'air |

3
Ricardo Fercher

La sortie du fichier intégré ne devrait pas être un problème du tout. Cela ne dépend pas du fait qu'il soit au format .pdf, et vous pouvez simplement y chercher une solution distincte.

Pour l'affichage, sauf si vous savez qu'Acrobat ou similaire est installé (enfin, même Edge peut ouvrir ces fichiers de nos jours), ou si vous souhaitez afficher le fichier incorporé dans une application WinForms, il y a

Solution de projet de code

https://www.codeproject.com/Articles/37458/PDF-Viewer-Control-Without-Acrobat-Reader-Installe

écrit en VB en s'appuyant sur de nombreuses bibliothèques (partiellement commerciales, si votre solution est commerciale).

PdfiumViewer

https://github.com/pvginkel/PdfiumViewer

est génial et également disponible via NuGet.

The PdfiumViewer library primarily consists out of three components:
•The  PdfViewer  control. This control provides a Host for the  PdfRenderer  control and has a default toolbar with limited functionality;
•The  PdfRenderer  control. This control implements the raw PDF renderer. This control displays a PDF document, provides zooming and scrolling functionality and exposes methods to perform more advanced actions;
•The  PdfDocument  class provides access to the PDF document and wraps the Pdfium library.

Il s'agit d'une solution tout-en-un pour l'affichage et est livrée avec une licence Apache 2.0 plus conviviale.

édition, exemple de code ajouté , pour votre commodité :) J'ai inclus ce qui suit

data = File.ReadAllBytes(@"C:\temp\abc.pdf");
PdfiumViewer.PdfDocument doc;
using (Stream stream = new MemoryStream(data))
{
    doc = PdfiumViewer.PdfDocument.Load(stream);
    var viewer = new PdfiumViewer.PdfViewer();
    viewer.Document = doc;
    var form = new System.Windows.Forms.Form();
    form.Size = new Size(600, 800);
    viewer.Dock = System.Windows.Forms.DockStyle.Fill;
    form.Controls.Add(viewer);
    form.ShowDialog();
}

Cela génère un formulaire à la volée, bien sûr, vous pouvez également utiliser le concepteur.

3
Andreas Reiff