2009-01-29 11 views
9

Estoy construyendo una aplicación de escritorio ahora que presenta su salida legible para humanos como XHTML que se muestra en un control WebBrowser. Eventualmente, esta salida tendrá que convertirse de un archivo XHTML a una imagen de documento en un sistema de imágenes. A diferencia de los documentos XHTML, la imagen del documento debe dividirse en páginas físicas; Además, y esta es la parte que me está matando, debe haber encabezados y pies de página en estas páginas.¿Qué tecnología de generación de imágenes de página debo usar?

Por mucho que me gustaría, no puedo simplemente hacer que WebBrowser imprima en un archivo; las opciones de encabezado/pie de página que admite no son lo suficientemente sofisticadas. Así que estoy tratando de descubrir cuál es la tecnología correcta para generar estas imágenes.

Me parece probable (aunque no es obligatorio) que lo que terminaré haciendo es producir versiones en PDF de los documentos HTML (para poder agregar encabezados y pies de página) y luego renderizar los PDF como TIFF, que es el formato definitivo que el sistema de imágenes quiere. Entonces, ¿qué estoy considerando?

  • Utilice algún tipo de software de conversión de XHTML a PDF. El problema con esto es que, sin hacer muchas evaluaciones y pruebas, no puedo averiguar si los productos que he analizado tienen la capacidad de hacer lo que necesito, que es tomar los documentos XHTML existentes, decorarlos con encabezados. y los pies de página y los paginan.

  • Use XSL-FO para generar los archivos PDF. Ser un geek XSLT de nivel ninja ayuda aquí (así es como estoy produciendo el XHTML en primer lugar), pero aún parece una solución lenta e incómoda con muchas partes móviles. También esto significa que estoy metiendo un gran programa de Java torpe en el medio de mi agradable sistema .NET limpio, aunque soy bastante adulto para hacer eso si es la respuesta correcta.

  • Use alguna otra tecnología que aún no he pensado, como LaTeX. Tal vez haya alguna herramienta milagrosa de creación de imágenes de página que convierta XHTML directamente en TIFF con encabezados y pies de página. Eso sería ideal.

Mis principales preocupaciones son:

  • Estoy construyendo un producto comercial; cualquiera que sea la tecnología que uso debe ser asequible y compatible. No tiene que ser gratis.

  • No quiero desaparecer por un agujero de conejo durante tres meses golpeando estas cosas para que funcione. Intuitivamente, este parece ser el tipo de espacio problemático en el que puedo perder mucho tiempo simplemente evaluando y rechazando herramientas.

  • Cualquier solución que adopte debe ser relativamente inmune a los cambios de formato en el XHTML. La razón por la que estoy usando XSLT y produciendo XHTML es que los documentos que estoy produciendo se ensamblan dinámicamente usando reglas de negocios que cambian todo el tiempo.

He pasado mucho tiempo buscando alternativas y no he encontrado nada que obviamente sea la respuesta. Pero tal vez una de ustedes, buena persona, ya ha resuelto este problema, y ​​si es así, me gustaría ponerme sobre sus hombros.

+0

posible duplicado de [obtener mediante programación captura de pantalla de la página] (http://stackoverflow.com/questions/1981670/programmatically-get-screenshot-of-page) – h22

Respuesta

5

Editar (2010-11-28 12:30 PM PST) Por favor, haga +1 de esta respuesta si descarga mi código. Noté que mi muestra de Codeplex se ha descargado cientos de veces. El código no es espectacular, pero funciona como un excelente punto de partida, con muchos enlaces para ayudar con la fuente incluida. ¡Gracias! + tom Editar (2009-03-29 9:00 AM PST) Publicado sample conversion.
Editar (2009-03-23 ​​12:30 PM PST, publicado en CodePlex) Desarrollé una solución para esto y la publiqué en CodePlex. La publicación version 2.0 se escribe utilizando el patrón WPF MVVP. Los archivos TIFF (uno por página) se envían a c: \ Temp \ XhtmlToTiff. Los formatos XAML y XPS también se crean. Una versión instalable compilado está disponible en CricketSoft.com


¿Ha probado el " Microsoft XPS Document Writer"? Esta es una impresora de solo software que genera resultados paginados de una variedad de fuentes, incluidas las páginas web.

Hay un SDK para trabajar con documentos XPS y documentos Open XML en general. Aquí hay un artículo de How-to por Beth Massi: "Accessing Open XML Document Parts with the Open XML SDK".

+ tom

+0

Necesito más control sobre el formato de lo que puedo obtener simplemente redirigiendo la salida impresa de IE a un controlador, desafortunadamente. Generar el XPS subyacente parece, por decirlo suavemente, no trivial. –

+0

ah, puede que tenga un poco de ayuda para usted aquí. Decidí codificar una muestra. Pls hold ... (y thx para el "Respondido"). –

+0

Bueno, la "respuesta" se hizo automáticamente cuando expiró la recompensa. En realidad no es lo que pretendía, pero el sistema funciona de la manera en que funciona. –

1

¿ha pensado en usar postscript?

ps: ¿qué tipo de encabezados/pies de página necesita, los personalizados para poner las páginas en el medio? si es así, postscript o PDF es probablemente el mejor.pero será muy difícil crear el convertidor xhtml + css a pdf. básicamente, necesitaría tener una biblioteca que pueda analizar tanto xhtml como css (+ cualquier objeto como imágenes, flash, etc.)

1

PrinceXML es un convertidor de XHTML/CSS a PDF. Parece que tiene las características que necesita: cabeceras

  • Página/pies de página, numeración de página y la impresión dúplex.

que se dan cuenta es probable que desee más extensas respuestas que éste (lo siento, pero no he evaluado el producto), pero sin embargo, espero que ayude!

+0

Esto fue sorprendentemente fácil de implementar en mi prototipo. Lástima que la licencia del servidor sea tan costosa. –

+0

Sí, los precios altos también me volvieron loco. ¿Tal vez podría ponerse en contacto con su departamento de ventas para ver si puede obtener un trato especial? Parece que funciona a veces ... – onnodb

+0

Sí, podríamos obtener precios de OEM. Pero incluso con un descuento del 50%, estoy agregando $ 2K al precio de mi software (o, más realista, reduciendo mis ganancias en $ 2K). Estoy muy motivado para encontrar otra solución. Aunque todo lo demás acerca de Prince es perfecto. –

2

Si tiff es su objetivo, esto podría ser un enfoque libre y bajo riesgo:

  1. utilizar un componente para crear una imagen de una determinada URL. No estoy seguro de qué herramienta usamos para él, pero GIYF: Acabo de tropezar con WebPreview de SmallSharpTool que parece hacer el trabajo
  2. Asegúrese de que puede crear una imagen de toda la página, es decir, el área desplazable de todo.
  3. Use ImageMagick para hacer toda la manipulación de la imagen, como cortarla en varias páginas, agregar sus propios encabezados, pies de página y numeración de páginas y conversión a tiff.

He utilizado personalmente las técnicas anteriores por separado en proyectos de C# (aplicaciones de consola y sitios web) con éxito, así que casi puedo garantizar que esto funcionará.

1

Todo depende de la importancia de la calidad para los documentos generados. También importa qué otras operaciones necesita hacer con el documento.

Estoy construyendo una aplicación de escritorio en este momento que presenta su salida legible como XHTML representada en un control WebBrowser.Eventualmente, esta salida va a tener para convertirse de un archivo XHTML a una imagen de documento en un sistema de imágenes.

Parece que su aplicación es de una forma suave. Genera formularios rellenos y guárdelos.

[...] debe haber encabezados y pies de página en estas páginas.

Esta es la parte fácil. Puede usar plantillas y combinar los datos con la plantilla de encabezado/pie de página estática . Suenas como si estuvieras haciendo VDP. Hm. Vamonos.

no puedo simplemente hacer la impresión WebBrowser a un archivo - el encabezado/pie de página opciones que soportes no son ni de lejos lo suficientemente sofisticados.

¿Por qué? Todo lo que necesitas es un controlador capaz.

Parece probable que a mí (aunque no es obligatorio) que lo que voy a terminar haciendo es producen versiones PDF de los documentos HTML

Una vez más, no está claro por qué desea PDF de inmediato PDF es un formato de intercambio de documentos . No es una PDL per se. PostScript es una opción mucho mejor. Sí, sé que hay cosas como XPS, PCL y otras cosas. Sin embargo, la cantidad de control de renderizado y de calidad que obtiene con PS es demasiado para arriesgar una solución más económica. Digo más barato, porque, también debe tener en cuenta el tipo de impresión que puede hacer uso. Las impresoras PostScript (no las que tienen los RIP clonados) son más costosas en general.

Ahora, regrese a su aspecto de PDF. Sí, por supuesto, puedes generar PDF. Tiene ciertas ventajas como:

  • Mejor soporte para la transparencia (y en la calidad general)
  • Archivo
  • intercambio
  • Compártelo través de revisión
  • Avance/Comprobación preliminar/Correcto
  • Seguridad
  • Encriptación de transmisión (tanto para seguridad como para la cantidad de datos que transfiere a la impresora)
  • Utilice plantillas

Pero recuerda que tienes que hacer cualquier impresora PDF nativo rasga? Porque de lo contrario, realiza una conversión de PDF a PS/PCL con pérdida. Y acabas de perder el juego. Lo que me lleva de regreso a PostScript;)

+0

El intercambio y el archivo son los argumentos más convincentes para PDF. No estoy seguro de cuán importantes son el control y la calidad del procesamiento: muchos de los documentos que este sistema está reemplazando son documentos Word cubiertos con enmiendas manuscritas, por lo que las expectativas de los usuarios son actualmente muy bajas. –

+0

¿Eso significa que está tomando los documentos de Word a través de OCR? En ese caso, el motor de OCR generará tiffs para usted. O bien, ¿necesita generar los diferentes planos (C, M, Y, K) también? – dirkgently

+0

No, el cliente no está actualizando los documentos de Word. La producción de PDF no es * realmente * el requisito en este punto, es la producción de archivos TIFF de los documentos formateados. Así que posiblemente podría usar PS. ¿Qué tipo de herramientas necesito? Soy un bebé en el bosque con PS. –

3

Solo mi 2p pero si eres un ninja XSLT, te sugiero que te quedes con eso. Puede evitar el desagradable programa java mirando nFop que es un puerto C# del proyecto apache FOP. Lo mejor es que simplemente puede tomar el ensamblaje y usar directamente pasando su XML y XSLT para obtener la salida de PDF que desee.

http://sourceforge.net/projects/nfop/

Espero que ayude.

+0

Nunca se me ocurrió que una persona inteligente volvería a hacer FOP en .Net. Es posible que tenga que investigar un poco más sobre XSL-FO. Sé que puedo lograr que funcione al menos. –

1

Puede usar PISA para Python. Utiliza el kit de herramientas de reportlab para generar un pdf desde html (usando html5lib)

+0

Es notable lo mal organizada que está la documentación para PISA. (Al igual, no hay ni siquiera un enlace en el sitio de PISA. Y no importa obtener una lista completa de dependencias.) Pero parece funcionar, con el tiempo. –

+0

Encontré un ejemplo que me llevó directamente a través de él ... Recuerdo que la documentación era un poco escasa. – jle

+0

Pasé una hora y media ayer simplemente escribiendo el procedimiento que mis colegas no técnicos tendrían que seguir para instalar a pisa. Pero funcionalmente está muy cerca de lo que necesito. Ojalá soportara elementos flotantes. Otro costo oculto del diseño sin mesa. –

1

También puede intentar usar PDFCreator y simplemente imprimir el documento en PDF. PDFCreator actúa como cualquier impresora normal y utiliza ghostscript para convertir la salida de la impresora a pdf, tiff, jpeg, o lo que quieras. Creo que puede cambiar los elementos de encabezado y pie de página a través de la interfaz de COM de IE e imprimir directamente desde IE. PDFCreator tiene ejemplos para diferentes idiomas en la carpeta com del directorio de instalación. Lo he usado y puedo responderlo. Solo Windows.

+0

Una idea interesante, excepto que IE no le da la capacidad de (digamos) definir un DIV como pie de página, que es realmente el nivel de control de formato que necesito. –

+0

Es posible que pueda agregar eso con PDFCreator ... – jle

1

¿Realmente necesita usar XHTML/navegador web?

He estado en este dilema exacto tratando de generar buenos informes HTML y la solución que encontré es ... para soltar HTML y usar un generador de informes "real", hay muchos de ellos, todas soportan todas las opciones de paginación y encabezado/pie de página en las que puede pensar que generalmente pueden imprimir en formato PDF y, en ocasiones, directamente en imágenes.

HTML no es la tecnología adecuada para los informes.

+0

No es la tecnología correcta para los informes, de acuerdo. Es sin duda la tecnología adecuada para los documentos que produce mi programa. –

2

usan alguna otra tecnología que ni siquiera he pensado todavía, como LaTeX.

TeXML, que es la semántica de látex con sintaxis XML. Para usar que puede crear XSLT, lo que decorar tu XHTML con comandos TeXML (see example)

+0

Eso es ... desalentador. Puede ser una muy buena respuesta para alguien que conoce LaTeX. Yo no, así que eso es dos colinas para escalar. También hay esto: http://www.w3.org/2004/04/xhlt91/. –

+0

Ok, como lo mencionaste, he supuesto que lo sabes. ;-) A partir de [X] HTML para las herramientas LaTeX, la mayoría crea documentos que son demasiado simples, a menudo incluso feos. – vartec

1

ExpertPDF HtmlToPdf Converter (www.html-to-pdf.net) debe ser capaz de hacer exactamente lo que necesita. Es realmente simple de usar, simplemente haga referencia al ensamblaje en su proyecto y comience a usarlo. He utilizado este producto con gran éxito en un par de proyectos de trabajo.

+0

Ya comencé a evaluar esto. El gran problema con este componente es que tienes que hacer mucha manipulación en el código; no puede (por ejemplo) usar marcado en el documento para proporcionar contenido a encabezados y pies de página. –

0

Mencionó los resultados de exportación de su aplicación de escritorio actual en xhtml. Como xhtml está bien formado xml, debe salirse con la suya usando xsl fo para exportarlo a pdf.

XML -> XSL-FO = PDF

He aquí una guía para principiantes: http://www.devx.com/xml/Article/16430

Mi empresa ha utilizado esta técnica en un webaplication java + capullo para el gobierno holandés.

+0

Correcto, es por eso que lo mencioné como una posibilidad. He usado XSL-FO antes. Funciona, pero es lento y desgarbado. –

0

http://iecapt.sourceforge.net/

citando desde arriba página web:

IECapt es una utilidad de línea de comandos pequeña para capturar la representación de una página web de Internet Explorer en un archivo de imagen BMP, JPEG o PNG. La versión C++ también tiene soporte experimental para la salida de gráficos vectoriales de metarchivo mejorado. IECapt está disponible en una versión C++ y C#.

Cuestiones relacionadas