2009-01-29 11 views
5

Nous avons une application dans laquelle les membres administrateurs peuvent ajouter du contenu pour leurs subordonnés à voir. Leur exigence est de pouvoir afficher des documents Word, Excel, PowerPoint et PDF de manière non modifiable.Comment afficher du contenu bureau et/ou pdf sur un formulaire Windows?

La seule option que j'ai trouvée pour cela est de charger le contenu dans un composant de navigateur Web. L'inconvénient de cela est qu'il invite l'utilisateur à ouvrir/enregistrer/annuler. Nous craignons que les subalternes, qui sont pour la plupart analphabètes, aient de la difficulté à ouvrir les documents de cette manière. L'utilisation de la méthode ci-dessus signifie également que Microsoft Office et Adobe Acrobat (ou une autre visionneuse PDF activée IE) doivent être installés sur toutes les machines qui exécuteront l'application, ce qui implique des frais de licence élevés.

Existe-t-il un meilleur moyen d'afficher ce contenu sur mes formulaires en C#?

+0

Adobe Reader et Foxit PDF Reader sont tous deux des visionneuses PDF gratuites (sans frais de licence) –

Répondre

3

Peut-être aussi intéressant:

Enregistrer les documents XPS à l'aide de Microsoft Office 2007 (ou les imprimer sur une imprimante XPS).

Vous pouvez afficher le document XPS en lecture seule à l'aide du composant de visionneuse XPS ou effectuer un rendu page par page dans une image PNG ou JPEG. Ce rendu peut être réalisé assez facilement en utilisant .NET 3.5/WPF.

XpsDocument xpsDoc = new XpsDocument(xpsFileName, System.IO.FileAccess.Read); 

FixedDocumentSequence docSeq = xpsDoc.GetFixedDocumentSequence(); 
const double scaleFactor = 0.8; 
for (int pageNum = 0; pageNum < docSeq.DocumentPaginator.PageCount; pageNum++) 
{ 
    DocumentPage docPage = docSeq.DocumentPaginator.GetPage(pageNum); 

    // FIX: calling GetPage without calling UpdateLayout causes a memory leak 
    ((FixedPage)docPage.Visual).UpdateLayout(); 

    RenderTargetBitmap renderTarget = new RenderTargetBitmap((int)Math.Round(scaleFactor * docPage.Size.Width), 
       (int)Math.Round(scaleFactor * docPage.Size.Height), (int)Math.Round(scaleFactor * 96), (int)Math.Round(scaleFactor * 96), PixelFormats.Default); 
    renderTarget.Render(docPage.Visual); 

    JpegBitmapEncoder encoder = new JpegBitmapEncoder(); 
    encoder.QualityLevel = 75; 
    // Choose type here ie: JpegBitmapEncoder, etc 
    //BitmapEncoder encoder = new PngBitmapEncoder(); // Choose type here ie: JpegBitmapEncoder, etc 
    encoder.Frames.Add(BitmapFrame.Create(renderTarget)); 

    string pageImageFileName = string.Format("{0}-{1}.jpg", Path.Combine(Path.GetDirectoryName(xpsFileName), Path.GetFileNameWithoutExtension(xpsFileName)), pageNum); 
      using (FileStream pageOutStream = new FileStream(pageImageFileName, FileMode.Create, FileAccess.Write)) 
    { 
     encoder.Save(pageOutStream); 
    } 
} 

Ce code nécessite des références aux assemblages PresentationCore, PresentationFramework et ReachFramework.

EDIT: Le code ci-dessus contenait une fuite de mémoire (voir Opening XPS document in .Net causes a memory leak). La solution de contournement a été insérée dans l'exemple.

+0

Ne pas utiliser 75 avec JpegBitmapEncoder. Il y a un petit bug :) –

+0

Le post sur le bug: http://modosansreves-coding.blogspot.com/2011/11/microsoft-jpegbitmapencoder-and-magical.html –

0

Avez-vous regardé la bibliothèque d'objets Microsoft Word 9.0? Il ne sera peut-être pas possible d'afficher simplement les données telles qu'elles ont été écrites à l'origine, cependant, vous POUVEZ faire quelque chose ici, qu'en est-il, en imprimant comme pdf temporaire en mémoire et en l'affichant?

This is how you display a PDF with C#

+0

En utilisant cette méthode pour afficher les fichiers PDF, Adobe Acrobat devra être installé sur le système. –

+0

Adobe Acrobat est gratuit et vous pouvez probablement l'intégrer à votre logiciel, et il se peut que ce soit un SDK d'Adobe. Je ne peux pas vraiment voir les problèmes, il n'y a pas de frais de licence. –

+1

Ceci nécessite Adobe Acrobat, pas Adobe Acrobat Reader. Le lecteur est gratuit, mais Acrobat est livré avec une charge plutôt lourde. L'utilisation de la bibliothèque d'objets Word, à ma connaissance, nécessite que le bureau soit installé sur la machine. – RichieACC

0

Tout cela est Windows spécifique.

Si vous souhaitez afficher quelque chose sur une machine cliente sans compter sur une installation locale, vous devez prendre la responsabilité totale pour le rendu soit par:

  1. Fournir une sorte de bibliothèques non invasives qui fonctionnent au niveau du client et savoir comment le rendre
  2. Utilisez les outils/bibliothèques 'appropriés' pour le rendre sur le serveur vers une image en mémoire et envoyer cette image au client. Lent, très coûteux en calcul sur votre serveur et ne fournira pas une interface «document like» à vos clients.

Sumatra est complètement libre et open source. Il ne nécessite aucune forme d'installation, donc l'inclure dans votre application en tant que binaire dans un sous-dossier, puis décoller directement à celle pour afficher pdf fonctionnera bien (soit le réseau IDs pdf accessible, il est aussi simple que

SumatraPDF.exe {path-to-file} 

S'il est pas réseau téléchargement accessible dans l'arrière-plan à un emplacement temporaire, puis exécuter comme ci-dessus.

documents Office sont un peu plus délicat, car ils ont tous besoin d'une installation locale. Voici une (sur of date) list Notez que la plupart des liens vers les téléchargements vous dirigeront vers la toute dernière version recommandée

Une autre approche pour cela est d'utiliser OpenOffice.org dans son incarnation 'portable' qui lui permettra de fonctionner sans nécessiter d'installation (donc vous pouvez le laisser tomber comme l'approche de Sumatra) mais cela a beaucoup des failles dans votre cas, car il faudrait encore installer java, les fichiers résultants seraient éditables (à moins que vous n'apportiez des modifications à la version d'OpenOffice qui pourrait bien être complexe) et vous pourriez ne pas avoir un très bon affichage.

Si vous avez la possibilité d'exécuter des programmes arbitraires lors de l'installation de votre application, l'installation des visionneuses est probablement la meilleure, elle est entièrement gratuite et redistribuable.

Si vous avez accès à SharePoint, vous pouvez essayer une approche totalement différente qui consiste à tout faire via une application Web. Les plugins sharepoint permettent d'afficher des vues sur les documents directement dans le navigateur. Notez que cela nécessite à peu près Internet Explorer pour être entièrement utilisable.

+0

Tout en étant réalisables, ces options nécessitent toutes une application tierce pour ouvrir une fenêtre séparée. L'exigence est de l'afficher avec d'autres éléments sur l'application. – RichieACC

+0

Le SharePoint ne le fait pas, mais signifie des changements plus importants à votre application. Je crains que la réponse, à l'exception de l'hébergement hackish des processus externes en tant que contrôles bornés, soit susceptible d'être - d'arrêter d'essayer de montrer le document directement et d'en montrer un sous-ensemble limité. – ShuggyCoUk

+0

L'alternative est en train de devenir une application d'hébergement OLE à part entière qui incorpore les applications de bureau réelles, mais qui nécessite absolument l'installation de bureau, et ne fait pas obstacle à l'édition facile. C'est aussi difficile à faire. – ShuggyCoUk

1

a un Excel Compatible Windows Forms control qui affichera vos classeurs Excel (il fera beaucoup plus que cela si vous le souhaitez). Vous pouvez see what people say et download l'essai gratuit si vous voulez essayer.

SpreasheetGear peut également créer images from charts and ranges of cells si vous avez besoin de générer des images à afficher dans une page Web.

+0

Aussi génial que cela puisse paraître, ni nous, ni notre client ne sommes prêts à payer autant pour le composant. Merci pour la suggestion cependant. – RichieACC

+0

Malheureusement, il n'y aura pas de façons bon marché de faire ce que vous voulez sans un certain ajustement de l'attente :) –

0

Avertissement, je suis de Atalasoft

Si vous souhaitez afficher PDF dans tout type d'interface .NET (Winforms, ASP.NET, Silverlight, WPF), notre DotImage avec PDF Reader add-on soutient. Il n'utilise pas Adobe et ne nécessite aucune installation sur le client-machine ou le serveur (seulement nos assemblages).

Questions connexes