Создание чего-то для печати в C # - PullRequest
11 голосов
/ 26 февраля 2010

Просто интересно, кто-нибудь может рассказать мне о простом способе создания файлов для печати? На данный момент я просто пишу сценарий HTML, но мне интересно, нет ли более легкого способа сделать это, который дал бы мне больше контроля над тем, что он печатает? Нечто подобное распечатке Access или распечатке Excel - где я мог бы решить, как все устроить, и почти "слить почту" в детали с помощью программирования.

По сути, я хочу создать что-то для печати, в котором могут быть таблицы, заключающие его, и которые могут быть длиннее или короче для каждой записи в зависимости от количества внешних ключей (например, у одного сотрудника может быть 10 рабочих мест или только 3). Я хочу создать документ, который будет генерировать и печатать).

Есть идеи / советы / мнения? Спасибо!

РЕДАКТИРОВАТЬ: Wow, спасибо за все ответы! Для этой конкретной задачи, FlowDocuments, кажется, ближе всего к тому, что я на самом деле после, поэтому я буду играть с этим. В любом случае, сейчас у меня есть несколько действительно хороших вариантов.

РЕДАКТИРОВАТЬ 2: После некоторой игры iTextSharp стал выбором для меня. Для тех, кто интересуется будущим, вот ссылка на отличный и простой учебник: http://www.mikesdotnetting.com/Category/20

Еще раз спасибо!

Ответы [ 10 ]

8 голосов
/ 26 февраля 2010

Я бы создал PDF-файл, который можно просматривать практически везде и который будет поддерживать форматирование. Посмотрите здесь: http://itextsharp.sourceforge.net/

4 голосов
/ 26 февраля 2010

Всегда есть FlowDocuments. Проверьте обзор в MSDN http://msdn.microsoft.com/en-us/library/aa970909.aspx и посмотрите, соответствуют ли они тому, что вы хотите сделать. Их довольно легко распечатать и можно сериализовать в xaml. Может быть не совсем то, что вы ищете, но они довольно полезны.

3 голосов
/ 26 февраля 2010

В настоящее время мы используем PDFSharp с большим успехом -

http://www.pdfsharp.com/PDFsharp/

GDI + или WPF ... все .NET, а не COM или взаимодействие.

Да, и с открытым исходным кодом. Вот пример кода -

http://www.pdfsharp.net/wiki/PDFsharpSamples.ashx

1 голос
/ 26 февраля 2010

Как и Дэвид Я также порекомендовал I Text Sharp;) С его помощью создать документ pdf очень легко;) Я использую его в проекте ASP.NET. У этого есть много вариантов отформатировать файл PDF, в моем примере я использую основной;) Пример:

    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 ;)
1 голос
/ 26 февраля 2010

Если вы используете генератор PDF или XPS, он все равно требует от вас определения композиции документа, очень похожей на сценарий вашего HTML, поэтому я не вижу, что он дает вам гораздо больше значений, чем созданный файл в готовом для печати формате.

То, что вам нужно, это то, что вы можете создать шаблон и просто заполнить пробел, поэтому я предлагаю вам либо перейти на автоматизацию Word или Excel, в противном случае посмотрите на некоторую облегченную библиотеку создания отчетов. Я сталкивался с этим, и возможно это стоит проверить также. http://www.fyireporting.com/

0 голосов
/ 26 февраля 2010

В прошлом я занимался созданием слов и созданием PDF-файлов, и поддержка создания PDF-файлов в pdfsharp (@Kris) довольно хороша, и я бы использовал ее перед автоматизацией делопроизводства.

Я надеюсь, что я не неправильно прочитал ваши потребности, а вместо того, чтобы экспортировать в определенный формат и затем включить функцию печати, я бы в эти дни пересмотрел обычную печать в браузере. В прошлом ужасные ограничения печати в браузере означали, что печать была плохим опытом (без усадки и т. Д.). Но современные браузеры имеют достаточную поддержку печати, чтобы быть приемлемыми для простых заданий.

Я только что проверил печать этой страницы в Firefox 3.5.8 и IE8, и обе поддерживают сжатие до нужного размера, и я считаю, что простая таблица стилей печати будет генерировать красивые рабочие листы прямо из браузера, если вы (предположительно) внутренняя) аудитория гарантированно имеет современный браузер.

0 голосов
/ 26 февраля 2010

Мы используем ActiveReports . Это очень легко определить ваш макет и может печатать и экспортировать в различных форматах, PDF, RTF, Excel, TIFF и т. Д.

0 голосов
/ 26 февраля 2010

Я создал распечатки с веб-сайтов в формате Excel XML. В основном это означает, что вам не нужно использовать API-интерфейсы Office для создания документа (что может быть громоздким и требует дополнительных библиотек на веб-сервере). Вместо этого вы можете просто взять шаблон XML, использовать XPath, LINQ to XML или другие технологии, чтобы вставить свои данные в шаблон, а затем передать их пользователю и они могут распечатать.

Создать шаблон легко. Вы просто используете Excel для создания документа и затем сохраните его в формате «XML Spreadsheet». XML немного угнетающий, но не страшный.

Документация по формату электронной таблицы XML находится здесь:
http://msdn.microsoft.com/en-us/library/aa140066%28office.10%29.aspx

Обратите внимание, что документация для Excel 2002. Формат изменяется в новых версиях Excel, но он обратно совместим.

0 голосов
/ 26 февраля 2010

XPS - это решение MSFT для печати структурированных и отформатированных документов. Я не говорю, чтобы отправить кому-то XPS, просто чтобы использовать поддержку .NET для печати через платформу XPS.

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

Это очень легко сделать, если вы делаете WPF. По сути, XPS - это MSFT PDF. Любой, кто работает под управлением Vista или 7, может просматривать / печатать их нормально.

0 голосов
/ 26 февраля 2010

Если вы ищете очень простой способ создания документов (возможно, не самый лучший, но это легко), вы можете настроить документы Word с закладками и вставлять данные в закладки с помощью кода * 1002. *, так что я думаю, это будет работать и в Excel (если у них есть закладки?):

РЕДАКТИРОВАТЬ: Вот быстрый перевод на C # (был протестирован в VB, но не 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;
...