2009-01-29 6 views
5

Wir haben eine Anwendung, in der Admin-Mitglieder Inhalt für ihre Untergebenen zum Anzeigen hinzufügen können. Ihre Anforderung ist, dass Word-, Excel-, PowerPoint- und PDF-Dokumente nicht editierbar dargestellt werden können.Wie zeige ich Office- und/oder PDF-Inhalt in einem Windows-Formular an?

Die eine Option, die ich dafür gefunden habe, ist, den Inhalt in eine Webbrowser-Komponente geladen zu haben. Der Nachteil ist, dass der Benutzer aufgefordert wird, zu öffnen/speichern/abzubrechen. Wir sind besorgt, dass die Untergebenen, die hauptsächlich Computer-Analphabeten sind, Schwierigkeiten haben werden, die Dokumente auf diese Weise zu öffnen.

Die obige Methode bedeutet auch, dass Microsoft Office und Adobe Acrobat (oder ein anderer IE-fähiger PDF-Viewer) auf allen Computern installiert werden müssen, auf denen die Anwendung ausgeführt wird, was teure Lizenzgebühren bedeutet.

Gibt es eine bessere Möglichkeit, diesen Inhalt auf meinen Formularen in C# anzuzeigen?

+0

Adobe Reader und Foxit PDF Reader sind beide kostenlose PDF-Viewer (keine Lizenzgebühren) –

Antwort

3

Möglicherweise interessant auch:

Speichern Sie die Dokumente XPS mit Microsoft Office 2007 (oder auf einen XPS-Drucker).

Sie können das schreibgeschützte XPS-Dokument entweder mit der XPS-Viewer-Komponente anzeigen oder Seite für Seite in ein PNG- oder JPEG-Bild rendern. Dieses Rendering kann mit .NET 3.5/WPF sehr einfach durchgeführt werden.

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

Dieser Code benötigt Verweise auf die PresentationCore-, PresentationFramework- und ReachFramework-Assemblys.

EDIT: Der obige Code enthielt ein Speicherleck (siehe Opening XPS document in .Net causes a memory leak). Die Problemumgehung wurde in das Beispiel eingefügt.

+0

Verwenden Sie nicht 75 mit JpegBitmapEncoder. Es gibt einen kleinen Fehler :) –

+0

Der Beitrag über den Fehler: http://modosansreves-coding.blogspot.com/2011/11/microsoft-jpegbitmapencoder-and-magical.html –

0

Haben Sie sich die Microsoft Word 9.0-Objektbibliothek angesehen? Es ist vielleicht nicht möglich, die Daten nur so anzuzeigen, wie sie ursprünglich geschrieben wurden, aber Sie könnten etwas hier machen, wie wäre es, wenn Sie als temporäres PDF im Speicher drucken und das anzeigen?

This is how you display a PDF with C#

+0

Mit dieser Methode zur Anzeige von PDF muss Adobe Acrobat auf dem System installiert werden. –

+0

Adobe Acrobat ist kostenlos und Sie können es wahrscheinlich mit Ihrer Software bündeln, und möglicherweise ist es ein SDK von Adobe, so dass Sie es nicht tun. Ich kann die Probleme nicht wirklich sehen, es gibt keine Lizenzgebühren. –

+1

Dies erfordert Adobe Acrobat, nicht Adobe Acrobat Reader. Der Leser ist frei, aber Acrobat kommt mit einer ziemlich hohen Gebühr. Die Verwendung der Word-Objektbibliothek erfordert nach bestem Wissen, dass Office auf dem Computer installiert wird. – RichieACC

0

All dies ist Windows-spezifisch.

Wenn Sie etwas auf einem Client-Computern angezeigt werden mögen, ohne auf jedem lokale Berufung installieren, dann müssen Sie die volle Verantwortung für die Wiedergabe entweder durch:

  1. eine Art von nicht-invasiven Bibliotheken Versorgung, die auf dem Client ausgeführt und wissen, wie man es rendert
  2. Verwenden Sie die 'richtigen' Tools/Bibliotheken, um es auf dem Server zu einem im Speicherbild zu rendern und dieses Bild an den Client zu senden. Langsam, sehr rechenintensiv auf Ihrem Server und bietet Ihren Clients keine "dokumentenähnliche" Oberfläche.

Sumatra ist vollständig frei und Open Source. Es würde keine Form der Installation erfordern, so dass es in Ihrer Anwendung Installation als eine Binärdatei in einem Unterordner und dann direkt auf die Anzeige von PDF-Dateien wird funktionieren gut (entweder das PDF-IDs-Netzwerk zugänglich, so einfach wie die Ausführung

)
SumatraPDF.exe {path-to-file} 

Wenn es nicht zugänglich Download-Netzwerk ist es im Hintergrund an einem temporären Speicherort und dann wie oben ausgeführt werden.

Office-Dokumente ein wenig komplizierter, da sie alle eine lokale benötigen installieren. Hier ist eine (aus des Datums) list Beachten Sie, dass viele der Links zu Downloads Sie dann auf die neueste Version verweisen, die empfohlen wird.

Ein alternativer Ansatz ist die Verwendung von OpenOffice.org in seiner 'portablen' Inkarnation, die es erlaubt, ohne eine Installation zu laufen (so dass Sie es genau wie den Sumatra-Ansatz fallen lassen können), dies hat jedoch sehr viele Fehler in Ihrem Fall, weil es noch Java benötigt, um installiert zu werden, könnten die resultierenden Felder bearbeitet werden (es sei denn, Sie haben Änderungen an der OpenOffice-Version vorgenommen, die sehr komplex sein können), und Sie werden möglicherweise keine schrecklich gute Anzeige bekommen.

Wenn Sie irgendeine Art von Fähigkeit haben, beliebige Programme auf der Installation Ihrer Anwendung zu starten, ist die Installation der Viewer wahrscheinlich das Beste, sie sind völlig kostenlos und verteilbar.

Wenn Sie Zugriff auf SharePoint haben, können Sie einen völlig anderen Ansatz ausprobieren, der alles über eine Webanwendung erledigen soll. Die Sharepoint-Plugins ermöglichen das Hosten von Ansichten auf die Dokumente direkt im Browser. Beachten Sie, dass dies ziemlich viel Internet Explorer benötigt, um voll nutzbar zu sein.

+0

Diese Optionen erfordern alle eine Drittanbieter-Anwendung, um ein separates Fenster zu öffnen. Die Anforderung besteht darin, sie zusammen mit anderen Elementen in der Anwendung anzuzeigen. – RichieACC

+0

Das SharePoint tut nicht, aber bedeutet breitere Änderungen an Ihrer Anwendung. Ich fürchte, die Antwort, die hashish hosting von externen Prozessen als beschränkte Kontrollen zu sperren, wird wahrscheinlich sein - aufhören zu versuchen, das Dokument direkt zu zeigen und zeigen eine begrenzte Teilmenge davon. – ShuggyCoUk

+0

Die Alternative wird zu einer vollwertigen OLE-Hosting-App, die die eigentlichen Office-Apps einbettet, aber das erfordert unbedingt die Office-Installation und macht die Bearbeitung nicht einfach. Es ist auch schwer zu tun. – ShuggyCoUk

1

hat eine Excel Compatible Windows Forms control, die Ihre Excel-Arbeitsmappen anzeigen (es wird viel mehr als das tun, wenn Sie es wollen). Sie können see what people say und download die kostenlose Testversion, wenn Sie es versuchen wollen.

SpreasheetGear kann auch images from charts and ranges of cells erstellen, wenn Sie Bilder generieren müssen, die auf einer Webseite angezeigt werden sollen.

+0

So beeindruckend das aussieht, weder wir noch unser Kunde sind bereit, so viel für die Komponente zu bezahlen. Danke für den Vorschlag. – RichieACC

+0

Leider gibt es keine billigen Möglichkeiten zu tun, was Sie wollen, ohne irgendeine Erwartungseinstellung :) –

0

Haftungsausschluss, ich bin von Atalasoft

Wenn Sie PDF in jeder Art von .NET GUI (WinForms, ASP.NET, Silverlight, WPF), angezeigt werden soll unsere DotImage mit PDF Reader add-on unterstützt. Es verwendet nicht Adobe und benötigt keine Installation auf dem Client-Rechner oder Server (nur unsere Assemblies).

Verwandte Themen