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.
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");
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:
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)
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;
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).
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");
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.
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).
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.
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.
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 + "");
}
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.