Печать из веб-приложений

Прежде всего, сон никогда не является решением для ошибок. Он должен действительно генерировать предупреждение компилятора при каждом его использовании, которое передало бы одно и то же сообщение.

Теперь, когда вы изменяете управляющую переменную, охраняемую условием, это следует делать, удерживая мьютекс - обычно тот же, который используется в вашем cond.wait(). Ваш код этого не делает.

8
задан CMPalmer 22 January 2009 в 14:54
поделиться

4 ответа

Создание документов с нуля с iTextSharp может быть очень трудоемким. Как альтернатива, можно создать (или повторное использование) "шаблонные" документы PDF путем добавления полей формы к ним (при необходимости). Самый легкий способ сделать это с полной версией Adobe Acrobat, но можно также добавить заполняемые поля формы, использующие только iTextSharp.

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

Затем это - очень простой в использовании iTextSharp из Вашего веб-приложения, чтобы заполнить форму, сгладить его и передать его потоком назад пользователю.

В конце этого сообщения полный пример кода обработчика ASHX.

Также помните, что iTextSharp (или просто iText) также полезен для объединения документов в формате PDF или страниц из различных документов. Так, для годового отчета, который имеет фиксированный дизайн для покрытия или страницы объяснения, но динамично генерировал содержание, можно открыть титульный лист, открыть шаблонную страницу для отчета, генерировать динамический контент на пустую область шаблона, открыть последнюю страницу "шаблон", затем объединить их всех в единый документ для возврата к пользователю.

using System;
using System.Data;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Text;
using iTextSharp;
using iTextSharp.text;
using iTextSharp.text.pdf;

namespace iTextFormFillerDemo
{
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class DemoForm : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {

            context.Response.ContentType = "application/pdf";
            //This line will force the user to either open or save the 
            //file instead of it appearing on its own page - if you remove it, 
            //the page will appear in the browser in the same window.
            context.Response.AddHeader("Content-Disposition", 
                "attachment; filename=DemoForm_Filled.pdf");

            FillForm(context.Response.OutputStream);

            context.Response.End();
        }

        // Fills the form and pushes it out the output stream.
        private void FillForm(System.IO.Stream outputStream)
        {
            //Need to get the proper directory (dynamic path) for this file. 
            //This is a filesystem reference, not a web/URL reference...
            //The PDF reader reads in the fillable form
            PdfReader reader = new PdfReader("C:/DemoForm_Fillable.pdf");

            //The PDF stamper creates an editable working copy of the form from the reader 
            //and associates it with the response output stream
            PdfStamper stamper = new PdfStamper(reader, outputStream);

            //The PDF has a single "form" consisting of AcroFields
            //Note that this is shorthand for writing out 
            //stamper.AcroFields.SetField(...) for each set
            AcroFields form = stamper.AcroFields;

            //Set each of the text fields this way: SetField(name, value)
            form.SetField("txtFieldName", "Field Value");
            form.SetField("txtAnotherFieldName", "AnotherField Value");

            //Set the radio button fields using the names and string values:
            form.SetField("rbRadioButtons", "Yes"); //or "No"

            //Form flattening makes the form non-editable and saveable with the 
            //form data filled in
            stamper.FormFlattening = true;

            //Closing the stamper flushes it out the output stream
            stamper.Close();

            //We're done reading the file
            reader.Close();
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}
3
ответ дан 5 December 2019 в 19:03
поделиться

По моему скромному мнению, для фиксированного формата, печатающего PDF, если ответ

3
ответ дан 5 December 2019 в 19:03
поделиться

При использовании SQL Server Вы могли бы создать создание отчетов использования отчета сервисы. Пользователь может затем или распечатать это непосредственно или экспортировать его самостоятельно во многие различные форматы (можно управлять, какие форматы доступны пользователю).

Я использовал этот подход в прошлом, и я нашел, что это дает мне намного больше контроля видом документа, когда это распечатано или экспортировано.

1
ответ дан 5 December 2019 в 19:03
поделиться

Даже при том, что Вы заявили о попытке основанного на CSS подхода наилучший путь вперед состоит в том, чтобы смотреть на @print тип среды (http://www.w3.org/TR/CSS2/media.html). В основном позволяет Вам использовать другую таблицу стилей для печати, чем для экрана или любого из другого (много) типы среды.

Затем если Вы хотите запустить событие печати автоматически, Вы хотите использовать что-то вроде этого (JavaScript):

window.print();

Конечно, необходимо будет проверить, что браузер на самом деле поддерживает печать через JavaScript, и действуйте соответственно:

function doPrint() {
    if(!window.print())
    {
        alert("Your browser does not support direct printing, please select 'Print' from the 'File' menu.");
    }
}

Если, однако, Вы непреклонны, что CSS не удовлетворит Ваши потребности, то Вы, вероятно, испытываете необходимость для движения к ОСНОВАННОМУ НА PDF решению. Хотя, у меня нет опыта создания веб-распечаток 'через' PDF.

2
ответ дан 5 December 2019 в 19:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: