2010-07-18 8 views
5

Estoy creando un libro electrónico para un amigo. Él tiene el contenido en word (docx) así que tengo algunas preguntas. Creé un hilo más temprano sobre cómo abordar esto y la mejor respuesta fue crear PDF's. El punto principal de esto fue para que podamos tener cuadros de texto insertables, enlaces y tabla de contenidos.alojar un PDF en una aplicación C#

Ahora me preguntaba si puedo alojar los pdfs en mi aplicación. Quiero hacer un "lector de adobe" básicamente. ¿Hay una biblioteca por ahí que hace esto? ¿Puedo usar COM/dlls instalados para hacer esto?

La razón de esto es que debía crear una sección de "prueba" en mi aplicación, o una "tarjeta de informe" o incluso una función de "marcador".

Gracias chicos.

Respuesta

6

Hacer una costumbre control de explorador PDF podría ser una tarea extremadamente difícil. En su lugar, podría utilizar el Adobe Reader real en su aplicación, ya que se proporciona como un control COM que podría alojarse en cualquier aplicación de Windows. Estos son los pasos:

  1. iniciar una nueva aplicación Windows Forms
  2. hacer que el control de Acrobat disponible en la caja de herramientas (Herramientas -> Añadir/Eliminar elementos Caja de herramientas: activar el "Adobe Acrobat 7.0 Explorador del documento" en la ficha Componentes COM) No olvides tomar una taza de café antes de hacer clic en la pestaña COM.
  3. Arrastre el control al formulario
  4. manipularlo:

    axAcroPDF1.LoadFile("mypdf.pdf"); 
    axAcroPDF1.Show(); 
    
+0

Voy a votar porque funcionará ... Aunque creo que usando WebBrowser el control es más simple. – David

+0

@David, mientras que el enfoque 'WebBrowser' es de hecho más fácil de implementar, le da poco control sobre el PDF en comparación con el componente de Adobe que le permite navegar, imprimir, ... –

+0

¡Impresionante! pero ¿es posible para mí distribuir la biblioteca correcta también? El instalador debería hacer el trabajo. ¿Qué pasa con un lector de lightwieght pdf como foxit? ¿Se puede usar de manera similar? – masfenix

1

Sé que esto se ha preguntado antes, pero no recuerdo dónde. La respuesta aceptada era algo a lo largo de estas líneas:

que sería una muy mala idea para crear su propio lector de PDF, debido a que:

  1. no está en control de cuando Adobe cambia especificaciones
  2. Adobe proporciona un lector de forma gratuita, y la mayoría de los usuarios de ya lo tienen instalado.
  3. Teniendo en cuenta las dos declaraciones anteriores, ¿por qué querrías pasar tanto tiempo reinventando la rueda? Tiene sentido reinventar la rueda cuando puede mejorarla, pero no cuando solo está copiando la funcionalidad que está disponible gratuitamente.

Sería mucho mejor encontrar una forma de utilizar el lector Acrobat que ya han diseñado y distribuir de forma gratuita.

Esto es muy fácil de hacer. Todo lo que necesita hacer es usar el control WebBrowser (suponiendo que se trate de WinForms) y configurar DocumentSource en el archivo PDF. El control WebBrowser solo usará automáticamente cualquier lector de PDF que ya esté instalado en la PC del cliente, al igual que Internet Explorer.

1

que he tenido muy buenas experiencias de trabajo de las bibliotecas de los Aspose. Son asequibles y le ahorrarán mucho tiempo.

1

Puede incrustar Adobe Reader en sus aplicaciones a través del componente ActiveX que está instalado en su máquina junto con el lector. Puede agregarlo a su VS Toolbox desde la pestaña COM Components. Cualquiera que tenga instalado Abobe Reader podrá usar su aplicación para ver documentos PDF. Tenga en cuenta que si no hay Adobe Reader instalado, su programa no funcionará, o necesita de alguna manera proporcionar la lib a la aplicación. Si desea algo que no requiera Adobe Reader, entonces puede consultar iText#.

+0

Drawback es que su aplicación no funcionará en máquinas que no tienen adobe reader instalado. Supongo que el OP solo está creando algo para un amigo, pero sería bastante infeliz si tuviera que instalar adobe reader solo para usar alguna otra aplicación ... –

+0

Acutally, el amigo es contratista de una compañía más grande. La compañía tendrá que distribuir esto a sus clientes y, bueno, no pueden enviar algo si no funciona. – masfenix

+0

La compañía entonces aún menos puede distribuir bibliotecas de adobe sin permiso de adobe (la licencia de redist normal solo permite redistribuir un instalador completo: http://www.adobe.com/products/reader/rdr_distribution1.html). Esperaría que Foxit tuviera requisitos similares –

0

Un posible problema con el uso de un componente Adobe ActiveX/com es que el usuario debe tener Adobe Reader instalado para que esto funcione (no creo que pueda y/o permita redistribuir el control ActiveX solamente y wouldn no quiero obligar a mis usuarios a instalar Adobe Reader). Entonces, para un trabajo más serio, trataría de usar una biblioteca PDF que puede distribuir con su código, como escribir un contenedor P/Invoke (presumiblemente muy pequeño) para la biblioteca de código abierto http://ccxvii.net/mupdf/ o si puede/quiere permitírselo, use algún comercial biblioteca.

Un problema con el uso de un control de webbrowser es que debe tener cuidado de probar lo que sucede si un usuario de destino como la incrustación de PDF está deshabilitado en IE. Puede suceder que, en lugar de incrustación, aparezca un lector de adobe externo (o lo que esté registrado como controlador de PDF). Puede haber una solución alternativa, pero he sido mordido por esto antes (resultando en uno de esos problemas de "funciona en mi máquina")

+0

El problema con esto es que la biblioteca no admite los archivos PDF que tienen enlaces incrustados o cuadros de texto, etc. ¿o no? – masfenix

+0

Bueno, eso dependería de la biblioteca :) No estoy seguro acerca de mupdf para ser honesto, pero IIRC sumatrapdf está basado en mupdf y sumatra al menos admite enlaces incrustados, ToC y marcadores. Tyler Jensen mencionó a Aspose, supongo que admitiría funciones más avanzadas de PDF, pero nunca lo he usado yo mismo y es un poco caro ... Para mupdf, supongo que podría intentar y ver si sumatrapdf admite las características que necesita, luego investigar cuánto esfuerzo sería una capa P/Invoke para .net. –

+0

Ah, y por supuesto, mupdf es GNU GPL3 ("Para licencias comerciales, póngase en contacto con [email protected]").Por lo tanto, definitivamente debe asegurarse de cumplir con los términos de la licencia –

Cuestiones relacionadas