Просто удивление, если кто-либо мог бы сказать мне о простом способе создать файлы для печати? В данный момент я просто пишу сценарий HTML, но я задаюсь вопросом, нет ли некоторого более легкого способа сделать его, который дал бы мне больше контроля какой он распечатанный? Что-то вроде распечатки Доступа или распечатки Excel - где я мог решить, как разметить вещи и почти "Слияние" детали, на пути программируя.
В основном я хочу создать что-то для печати, которая может иметь таблицы, монтирующие в корпус его, и могла быть дольше или короче для каждой записи в зависимости от количества внешних ключей (например, у одного сотрудника могло быть 10 заданий сегодня, или всего 3. Я хочу создать документ, который генерирует и распечатает).
Какие-либо идеи/совет/мнения?Спасибо!
Править: Ничего себе, спасибо за все ответы! Для этой конкретной задачи FlowDocuments, кажется, является самым близким к тому, что я на самом деле после, таким образом, я буду играть с этим. Так или иначе у меня есть несколько действительно хороших вариантов теперь.
РЕДАКТИРОВАНИЕ 2: После некоторого проигрывания iTextSharp стал выбором для меня. Для любого задающегося вопросом в будущем, вот ссылка на большое и простое учебное руководство: http://www.mikesdotnetting.com/Category/20
Еще раз спасибо!
Я бы создал файл PDF, который можно просматривать где угодно, и при этом сохранится форматирование. Взгляните здесь: http://itextsharp.sourceforge.net/
В настоящее время мы с большим успехом используем PDFSharp -
http://www.pdfsharp.com/PDFsharp/
GDI + или WPF .. .. Все .NET, а не COM или взаимодействие.
Да, и его открытый исходный код. Вот пример кода -
Как Дэвид Я также рекомендовал 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 ;)
Мы используем ActiveReports . Очень легко определить макет, и его можно печатать и экспортировать в различных форматах, pdf, rtf, excel, tiff и т. Д.
Раньше я занимался генерацией Word и PDF, и поддержка генерации PDF в pdfsharp (@Kris) довольно хороша, и я бы использовал ее перед автоматизацией офиса.
Надеюсь, я не неправильно понял ваши потребности, но вместо того, чтобы экспортировать в конкретный формат и затем запустить функцию печати, я бы в эти дни пересмотрел бы обычную печать старого браузера. В прошлом ужасные ограничения печати в браузере означали, что печать была плохой (без усадки и т. Д.). Но современные браузеры имеют достаточную поддержку печати, чтобы их можно было использовать для простых работ.
Я только что проверил печать этой страницы в Firefox 3.5.8 и IE8, и оба поддерживают сжатие по размеру, и я считаю, что простая таблица стилей печати будет генерировать красиво выглядящие листы заданий прямо из браузера, если ваш (предположительно внутренняя) аудитория гарантированно имеет современный браузер.
Если вы ищете очень простой способ создания документов (возможно, не самый лучший, но, безусловно, простой), вы можете настроить документы Word с закладками и вставлять данные в закладки с помощью кода ], поэтому я предполагаю, что это сработает и для 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;
Всегда есть FlowDocuments. Посмотрите обзор в MSDN http://msdn.microsoft.com/en-us/library/aa970909.aspx и посмотрите, подходят ли они к тому, что вы хотите сделать. Их довольно легко печатать и можно сериализовать в xaml. Возможно, это не совсем то, что вам нужно, но они довольно полезны.
XPS - это решение MSFT для печати структурированных и форматированных документов. Я не говорю посылать кому-то XPS, просто используйте поддержку .NET для печати через фреймворк XPS.
http://roecode.wordpress.com/2007/12/21/using-flowdocument-xaml-to-print-xps-documents/
Это очень легко сделать, если вы используете WPF. По сути, XPS - это PDF от MSFT. Любой пользователь Vista или 7 может просматривать/печатать их.
Если вы используете генератор PDF или XPS, он по-прежнему требует, чтобы вы определяли состав документа, очень похоже на создание сценария для HTML, поэтому я не вижу, что он дает вам гораздо больше значений, кроме того, что созданный файл находится в формате, готовом к печати.
Что вам нужно, так это то, что вы можете создать шаблон и просто заполнить пробел, поэтому я предлагаю вам перейти на автоматизацию Word или Excel, в противном случае посмотрите какую-нибудь облегченную библиотеку для создания отчетов. Я наткнулся на это, и, возможно, его тоже стоит проверить. http://www.fyireporting.com/
Я создавал распечатки с веб-сайтов, используя формат Excel XML. В основном это означает, что вам не нужно использовать API Office для создания документа (что может быть громоздким и требует дополнительных библиотек на веб-сервере). Вместо этого вы можете просто взять XML-шаблон, использовать XPath, LINQ to XML или другие технологии для вставки данных в шаблон, а затем передать его пользователю, и он сможет его распечатать.
Создать шаблон очень просто. Вы просто используете Excel для создания документа, а затем сохраняете его в формате "XML Spreadsheet". XML немного угнетает, но это не ужасно.
Документация по формату XML Spreadsheet находится здесь:
http://msdn.microsoft.com/en-us/library/aa140066%28office.10%29.aspx
Обратите внимание, что документация относится к Excel 2002. Формат меняется в новых версиях Excel, но он обратно совместим.