2009-01-29 8 views
5

Tenemos una aplicación en la que los miembros del administrador pueden agregar contenido para que vean sus subordinados. Su requisito es que debería poder mostrar documentos de Word, Excel, PowerPoint y PDF de forma no editable.¿Cómo visualizo contenido de oficina y/o PDF en un formulario de Windows?

La única opción que encontré para hacer esto es cargar el contenido en un componente del navegador web. La desventaja de esto es que solicita al usuario abrir/guardar/cancelar. Nos preocupa que los subordinados, en su mayoría analfabetos informáticos, tengan problemas para abrir los documentos de esta manera.

El uso del método anterior también significa que Microsoft Office y Adobe Acrobat (u otro visor de PDF habilitado para IE) deben instalarse en todas las máquinas que ejecutarán la aplicación, lo que implica costosas tarifas de licencia.

¿Hay alguna forma mejor de mostrar este contenido en mis formularios en C#?

+0

Adobe Reader y Foxit PDF Reader son visores de PDF gratuitos (sin cargos por licencia) –

Respuesta

3

Posiblemente interesante también:

Guardar los documentos XPS utilizando Microsoft Office 2007 (o imprimirlos en una impresora XPS).

Puede visualizar el documento XPS de solo lectura utilizando el componente XPS Viewer o renderizar página por página en una imagen PNG o JPEG. Este renderizado se puede lograr fácilmente usando .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); 
    } 
} 

Este código necesita referencias a los montajes PresentationCore, PresentationFramework y ReachFramework.

EDITAR: El código anterior contenía una pérdida de memoria (consulte Opening XPS document in .Net causes a memory leak). La solución ha sido insertada en el ejemplo.

+0

No use 75 con JpegBitmapEncoder. Hay un pequeño error :) –

+0

La publicación sobre el error: http://modosansreves-coding.blogspot.com/2011/11/microsoft-jpegbitmapencoder-and-magical.html –

0

¿Ha mirado en la biblioteca de objetos Microsoft Word 9.0? Es posible que no se puedan mostrar los datos tal como se escribieron originalmente, sin embargo, PODRÍA hacer algo aquí, ¿qué tal, imprimir como un PDF temporal en la memoria y mostrar eso?

This is how you display a PDF with C#

+0

Al usar este método para visualizar PDF, Adobe Acrobat deberá instalarse en el sistema. –

+0

Adobe Acrobat es gratuito y es probable que pueda combinarlo con su software, y tal vez sea un SDK de adobe para que no lo haga. No puedo ver los problemas realmente, no hay tarifas de licencia. –

+1

Esto requiere Adobe Acrobat, no Adobe Acrobat Reader. El lector es libre, pero Acrobat tiene un cargo bastante elevado. Utilizando la biblioteca de objetos de Word, a mi leal saber y entender, requiere que se instale una oficina en la máquina. – RichieACC

0

Todo esto es Windows específica.

Si desea mostrar algo en una máquina cliente sin depender de ninguna instalación local, entonces debe asumir la responsabilidad total de la prestación, ya sea por:

  1. El suministro de algún tipo de bibliotecas no invasivos que se ejecutan en el cliente y saber cómo representarlo
  2. Utilice las herramientas/librerías 'adecuadas' para convertirlo en una imagen en la memoria y enviar esa imagen al cliente. Lento, muy costoso desde el punto de vista computacional en su servidor y no proporcionará una interfaz 'documental' para sus clientes.

Sumatra es completamente gratuito y de código abierto. No requeriría ninguna forma de instalación, por lo tanto, incluirlo en la instalación de la aplicación como un binario en una subcarpeta y luego desgranarlo directamente para mostrar el pdf funcionará bien (se puede acceder a la red de identificadores de archivos PDF por lo que es tan simple como ejecutar

SumatraPDF.exe {path-to-file} 

Si no se Red descarga accesible en segundo plano en una ubicación temporal y luego ejecutar el anterior.

documentos de oficina son un poco más complejo, ya que todos requieren una instalación local. Aquí hay un (a cabo de fecha) list Tenga en cuenta que muchos de los enlaces a descargas le indicarán la última versión recomendada.

Un enfoque alternativo para esto es usar OpenOffice.org en su encarnación 'portátil' que le permitirá ejecutarse sin requerir una instalación (para que pueda colocarlo en su lugar al igual que el enfoque de Sumatra) sin embargo esto tiene una gran cantidad fallas en su caso porque todavía requeriría instalar java, los campos resultantes serían editables (a menos que haya realizado cambios en la versión de OpenOffice que pueden ser complejos) y es posible que no obtenga una visualización muy buena.

Si tiene algún tipo de habilidad para ejecutar programas arbitrarios durante la instalación de su aplicación, la instalación de los visores es probablemente lo mejor, son totalmente gratuitos y redistribuibles.

Si tiene acceso a SharePoint, puede probar un enfoque completamente diferente que consiste en hacerlo todo a través de una aplicación web. Los complementos de sharepoint permitirán vistas de alojamiento en los documentos directamente en el navegador. Sin embargo, tenga en cuenta que esto requiere que Internet Explorer sea completamente utilizable.

+0

Si bien es factible, todas estas opciones requieren una aplicación de un tercero para abrir una ventana separada. El requisito es mostrarlo con otros elementos en la aplicación. – RichieACC

+0

El de SharePoint no, pero significa cambios más amplios en su aplicación. Me temo que la respuesta, a menos que sea el alojamiento fraudulento de procesos externos como controles acotados, es probable que sea - deje de intentar mostrar el documento directamente y muestre un subconjunto limitado de él. – ShuggyCoUk

+0

La alternativa se está convirtiendo en una aplicación de hospedaje OLE totalmente emprendedora que incorpora las aplicaciones de oficina reales, pero que requiere absolutamente la instalación de la oficina, y no facilita la edición fácil. También es difícil de hacer. – ShuggyCoUk

1

tiene un Excel Compatible Windows Forms control que mostrará sus libros de Excel (hará mucho más que eso si lo desea). Puede see what people say y download la versión de prueba gratuita si quiere probarlo.

SpreasheetGear también puede crear images from charts and ranges of cells si necesita generar imágenes para mostrar en una página web.

+0

Por increíble que parezca, ni nosotros ni nuestro cliente estamos dispuestos a pagar tanto por el componente. Gracias por la sugerencia, sin embargo. – RichieACC

+0

desafortunadamente no va a haber ninguna forma barata de hacer lo que quiera sin algún ajuste de expectativa :) –

0

exención de responsabilidad, soy de Atalasoft

Si desea visualizar PDF en cualquier tipo de .NET interfaz gráfica de usuario (Windows Forms, ASP.NET, Silverlight, WPF), nuestra DotImage con PDF Reader add-on lo soporta. No utiliza Adobe y no requiere que se instale nada en el equipo cliente o servidor (solo nuestros ensamblajes).

Cuestiones relacionadas