сгенерировать PDF в шаблон с использованием ASP.net, C #, MVC - PullRequest
3 голосов
/ 08 декабря 2011

Я новичок в MVC, и мне необходимо сгенерировать PDF счетов по предоставленному шаблону. После некоторого поиска в Google, теперь я могу создать PDF, но не в шаблоне. Может ли любое тело помочь мне в этом. Я пишу свой код здесь ниже:

public ActionResult pdfStatement(string InvoiceNumber)
{
    InvoiceNumber = InvoiceNumber.Trim();
    ObjectParameter[] parameters = new ObjectParameter[1];
    parameters[0] = new ObjectParameter("InvoiceNumber", InvoiceNumber);
    var statementResult = _db.ExecuteFunction<Models.Statement>("uspInvoiceStatement", parameters);
    Models.Statement statement = statementResult.SingleOrDefault();

    return ViewPdf("Invoice", "pdfStatement", statement);
}

public class PdfViewController : Controller
{
    private readonly HtmlViewRenderer htmlViewRenderer;
    private readonly StandardPdfRenderer standardPdfRenderer;

    public PdfViewController()
    {
        this.htmlViewRenderer = new HtmlViewRenderer();
        this.standardPdfRenderer = new StandardPdfRenderer();
    }

    protected ActionResult ViewPdf(string pageTitle, string viewName, object model)
    {
        // Render the view html to a string.
        string htmlText = this.htmlViewRenderer.RenderViewToString(this, viewName, model);
        // Let the html be rendered into a PDF document through iTextSharp.
        byte[] buffer = standardPdfRenderer.Render(htmlText, pageTitle);

        // Return the PDF as a binary stream to the client.
        return new BinaryContentResult(buffer, "application/pdf");
    }
}

public class BinaryContentResult : ActionResult
{
    private readonly string contentType;
    private readonly byte[] contentBytes;

    public BinaryContentResult(byte[] contentBytes, string contentType)
    {
        this.contentBytes = contentBytes;
        this.contentType = contentType;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        var response = context.HttpContext.Response;
        response.Clear();
        response.Cache.SetCacheability(HttpCacheability.Public);
        response.ContentType = this.contentType;

        using (var stream = new MemoryStream(this.contentBytes))
        {
            stream.WriteTo(response.OutputStream);
            stream.Flush();
        }
    }
}

Ответы [ 3 ]

6 голосов
/ 08 декабря 2011

Я бы порекомендовал библиотеку iTextSharp .

Ознакомьтесь с этим руководством по заполнению pdf из c # с использованием библиотеки.Создайте PDF-файл с полями в Adobe Acrobat, а затем заполните поля из кода.

// Open the template pdf
PdfReader pdfReader = new PdfReader(Request.MapPath("~/assets/form.pdf")); 
PdfStamper pdfStamper = new PdfStamper(pdfReader, Response.OutputStream);
pdfStamper.FormFlattening = true; // generate a flat PDF 

// Populate the fields
AcroFields pdfForm = pdfStamper.AcroFields;
pdfForm.SetField("InvoiceRef", "00000");
pdfForm.SetField("DeliveryAddress", "Oxford Street, London");
pdfForm.SetField("Email", "anon@anywhere.com");
pdfStamper.Close(); 
3 голосов
/ 08 декабря 2011

это не ответ на вопрос, а мой опыт создания pdf на asp.net. Может быть, это сэкономит ваше время. К сожалению, я не нашел бесплатных достаточно хороших инструментов для создания PDF-файлов.

Я пытался использовать HtmlViewRenderer, но он не работает для меня со сложным CSS. Чем я нашел pdfsharp . Есть много хороших статей о его использовании StackOverFlow.

Это помогает мне создавать счета-фактуры - простая таблица, но я хочу предупредить, вы бы добавили строки своими руками. И этот код выглядит не очень хорошо. Также это не работает для сложных CSS.

Для больших красочных отчетов сейчас мы используем PdfCrowd . Это сервис, который отображает ваш HTML в формате PDF. Он отлично работает, но не бесплатно, самый дешевый тариф стоит 10 долларов в год.

На официальном сайте вы можете найти библиотеку .net и примеры для ASP.NET.

0 голосов
/ 23 апреля 2015

Попробуйте это ejsreport

Он использует JSON и Javascript, но выполняет свою работу.

Я пытался найти более простой инструмент отчетности в MVC, и этолучшее, что я нашел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...