2010-02-26 13 views
11

¿Solo me pregunto si alguien podría decirme de una manera simple de crear archivos para imprimir? Por el momento solo estoy creando scripting HTML, pero me pregunto si no hay una manera más fácil de hacerlo que me dé más control sobre lo que se imprime. Algo parecido a una impresión de Access, o una copia impresa de Excel, donde pude decidir cómo presentar las cosas y casi "combinar por correo" los detalles en la programación.Creando algo imprimible en C#

Básicamente, quiero crear algo para imprimir que tenga tablas que lo encapsulan, y podría ser más largo o más corto para cada registro dependiendo de la cantidad de claves externas (por ejemplo, un miembro del personal podría tener 10 trabajos hoy o solo 3 . Quiero crear un documento que genere e imprima).

¿Alguna idea/consejo/opinión? ¡Gracias!

EDITAR: ¡Wow, gracias por todas las respuestas! Para esta tarea en particular, FlowDocuments parece ser lo más parecido a lo que realmente estoy buscando, así que jugaré con eso. De cualquier manera, tengo varias opciones realmente buenas ahora.

EDIT 2: Después de tocar un poco, iTextSharp se ha convertido en mi elección. Para cualquiera que se pregunte en el futuro, aquí hay un enlace a un gran y simple tutorial: http://www.mikesdotnetting.com/Category/20

¡Gracias de nuevo!

Respuesta

0

Si está buscando una manera muy simple de crear documentos (el problema no es el mejor, pero seguro que es fácil), puede configurar documentos de Word con marcadores e insertar datos en los marcadores through code, así que supongo que esto funcionaría para Excel también (si tienen marcadores?):

EDIT: he aquí una traducción rápida en C# (sido probado en VB, pero no C#):

Word.Application oWord = default(Word.Application); 
Word.Document oDoc = default(Word.Document); 

oWord = Interaction.CreateObject("Word.Application"); 
oWord.Visible = false; 

oDoc = oWord.Documents.Add(Directory + "\\MyDocument.dot"); 

oDoc.Bookmarks("MyBookmark").Range.Text = strBookmark; 

oDoc.PrintOut(); 
oDoc.Close(Word.WdSaveOptions.wdDoNotSaveChanges); 
oDoc = null; 
oWord.Application.Quit(); 
oWord = null; 
+0

Sí, pero a veces no quieren instalado Office ... especialmente si su servidor está prestando documentos sobre la marcha . –

+0

En su pregunta, él dijo "A lo largo de las líneas de impresión de Access o Excel", así que supongo que tiene una oficina. Sé que esta no es la forma preferida, pero si necesita juntar algo realmente rápido (como en 5 minutos), esto lo hace mucho más fácil. –

+1

Los documentos de Word en C# son mucho más difíciles que en VB, por ahora. Esperaría hasta que se lanzara C# 4 porque promete proporcionar un soporte mucho mejor para esto. –

4

Siempre hay FlowDocuments. Consulte la descripción general en MSDN http://msdn.microsoft.com/en-us/library/aa970909.aspx y vea si coinciden con lo que desea hacer. Son bastante fáciles de imprimir y se pueden serializar a xaml. Puede que no sea exactamente lo que buscas, pero son bastante útiles.

+0

+1 por presentarme FlowDocs! –

+0

¡Además de mí también! Es una gran herramienta!¡No sé si WPF tiene este! – netmajor

0

XPS es la solución de MSFT para imprimir documentos estructurados y formateados. No estoy diciendo enviar a alguien un XPS, solo para usar el soporte de .NET para imprimir a través del marco XPS.

http://roecode.wordpress.com/2007/12/21/using-flowdocument-xaml-to-print-xps-documents/

Es muy fácil de hacer si usted está haciendo WPF. Esencialmente, un XPS es el PDF de MSFT. Cualquiera que ejecute Vista o 7 puede verlos/imprimirlos bien.

+5

Esa es una declaración bastante audaz para decir que XPS es la mejor manera o incluso la preferida. ¡No estaría completamente de acuerdo! PDF, en mi opinión, es la forma preferida debido a su independencia de la plataforma y su uso más generalizado. Si bien XPS logrará el objetivo para Vista y 7 usuarios, no es la mejor manera. –

+0

Buena suerte en XP, Mac o Linux. – jvenema

+6

No creo que alguna vez haya recibido o descargado un documento XPS de nadie. Nunca. Suele ser: "Oh, mierda, acabo de imprimir en Microsoft XPS Document Writer por error en lugar de CutePDF". – Pwninstein

0

He creado impresiones de sitios web utilizando el formato XML de Excel.Básicamente, esto significa que no tiene que usar las API de Office para generar el documento (que puede ser engorroso y requiere bibliotecas adicionales en el servidor web). En su lugar, puede tomar una plantilla XML, usar XPath, LINQ to XML u otras tecnologías para insertar sus datos en la plantilla, y luego transmitirla al usuario y ellos pueden imprimirla.

Generar la plantilla es fácil. Simplemente usa Excel para crear el documento y luego guárdelo en el formato "Hoja de cálculo XML". El XML es un poco opresivo pero no es terrible.

Documentación sobre el formato de hoja de cálculo XML está aquí:
http://msdn.microsoft.com/en-us/library/aa140066%28office.10%29.aspx

Tenga en cuenta que la documentación es para Excel 2002. El formato cambia en nuevas versiones de Excel, pero es compatible con versiones anteriores.

0

Utilizamos ActiveReports. Es muy fácil definir su diseño y puede imprimir y exportar en varios formatos, pdf, rtf, excel, tiff, etc.

1

Si utiliza un generador de PDF o XPS, todavía necesita definir la composición del documento muy parecido a la creación de scripts de su HTML, por lo que no veo que le da muchos más valores que el archivo creado en formato listo para imprimir.

Lo que necesita es algo en lo que pueda diseñar una plantilla y rellenar el espacio en blanco, por lo que le sugiero que vaya a la automatización de Word o Excel; de lo contrario, mire alguna biblioteca ligera de generación de informes. Me encuentro con esto y tal vez vale la pena echarle un vistazo también. http://www.fyireporting.com/

0

He hecho las cosas de generación de palabras y pdf en el pasado y el soporte para generación de PDF en pdfsharp (@Kris) es bastante bueno y lo usaría antes de la automatización de oficina.

Espero no haber leído mal sus necesidades, pero en lugar de exportar en un formato específico y luego activar la función de impresión, en estos días volvería a considerar la simple impresión del navegador antiguo. En el pasado, las tremendas limitaciones de la impresión del navegador significaba que la impresión era una mala experiencia (sin contracción, etc.). Pero los navegadores modernos tienen suficiente soporte de impresión para ser aceptables para trabajos simples.

Acabo de comprobar la impresión de esta página en Firefox 3.5.8 e IE8 y ambas admiten la reducción de tamaño y creo que una simple hoja de estilo de impresión generará hojas de trabajo atractivas directamente desde el navegador, siempre y cuando audiencia supuestamente interna) tiene garantizado un navegador moderno.

1

Me gusta David también recomendé I Text Sharp;) Es realmente fácil de crear un documento pdf con esto;) Lo uso en el proyecto ASP.NET. Que tiene la mayor parte de las opciones de formato de archivo PDF, en mi ejemplo yo uso básico;) Ejemplo:

string file = @"d:\print.pdf"; //path to pdf file 
    Document myDocument = new Document(PageSize.A4.Rotate());   
    PdfWriter.GetInstance(myDocument, new FileStream(file, FileMode.Create)); 
    myDocument.Open(); 
    //data to save in pdf- unimportant! 
    Opiekun obiekun = (from opiekunTmp in db.Opiekuns where opiekunTmp.idOpiekun == nalez.Dziecko.idOpiekun select opiekunTmp).SingleOrDefault(); 
    Dziecko dzieckoZap = (from dzieckoTmp in db.Dzieckos where dzieckoTmp.idDziecko == nalez.idDziecko select dzieckoTmp).SingleOrDefault(); 
    //some info about font 
    BaseFont times = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1250, BaseFont.EMBEDDED); 
    Font font = new Font(times, 12); 
    myDocument.Add(new Paragraph("--------------------------Raport opłaty--------------------------",font)); 
    myDocument.Add(new Paragraph("Data rozliczenia: " + (((TextBox)this.GridViewOplaty.Rows[e.RowIndex].Cells[8].Controls[0]).Text), font)); 
    myDocument.Add(new Paragraph("Płatnik: " + obiekun.Imie + " " + obiekun.Nazwisko, font)); 
    myDocument.Add(new Paragraph("Dziecko: " + dzieckoZap.Imie + " " + dzieckoZap.Nazwisko, font)); 
    myDocument.Add(new Paragraph("")); 
    myDocument.Add(new Paragraph("Data    Podpis płatnika: " + obiekun.Imie + " " + obiekun.Nazwisko, font)); 
    myDocument.Add(new Paragraph("")); 
    myDocument.Add(new Paragraph(" ...........  .................................")); 
    myDocument.Close(); //we close the pdf and open 
    System.Diagnostics.Process.Start(file); //and open our file if You want that ;)