ПРОДУКТЫСКАЧАТЬ  КУПИТЬ  ПОМОЩЬ БЛОГ   О КОМПАНИИ  
 
Визитная карточка
>>ASPX в PDF
Скачать
Купить
Online-demo
Online-demo: ASPX в PDF
Документация
Новости

Как конвертировать в PDF страницу ASPX с полями формы, заполненными данными с помощью C# и ASP.NET.

ASPX в PDF с заполненными полями формы с помощью C# и .NET.
  • Разнообразные API для конвертирования ASPX в PDF;

  • Требуется только .NET Framework 2.0 и выше;

  • Полностью написан на языке C#;

  • Сохранение всех заполненных данных.

«PDF Vision .Net» - это то, что Вам нужно!

«PDF Vision .Net» - это .NET-компонент, полностью написанный на C#, надежный и очень простой в использовании. Он улучшит Ваш веб-сервер ASP.NET или приложение Windows Forms.

«PDF Vision .Net» разработан нами для Вашего приложения чтобы создавать PDF-документы из ASPX и HTML на лету.

Вы можете скачать Demo-версию «PDF Vision .Net»
или установить пакет с NuGet.


NuGet   Скачать, 5.5.5.28 (Май 28, 2020)

Внедрение и пример кода

В этой статье мы расскажем как создать простое ASP.NET-приложение C# с некоторыми элементами управления (TextBox, ListBox и CheckBox) и кнопкой "Печать в PDF".

Вы согласитесь, что, если просто взять страницу ASPX и передать её в любой PDF-конвертер, мы увидим результат, где все формы полей и элементы управления будут иметь свои значения по умолчанию.

Другими словами, основная проблема при преобразовании страниц ASPX заключается в сохранении всех значений полей и элементов управления, установленных пользователем.

Здесь Вы найдете пошаговую инструкцию как решить эту проблему.

Итак, начнем!
Прежде всего, создайте новое web-приложение ASP.Net.
Далее, добавьте элементы управления внутри формы: текстовое поле, список и флажки.


<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>How convert ASPX page to PDF with filled forms in C# and .Net</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <h1>How convert ASPX page to PDF with filled forms in C# and .Net</h1>
        <div>Fill some house description here:<br />
            <br />
            House space (m2):
            <asp:TextBox ID="txtHouseSpace" runat="server"></asp:TextBox>
            <br />
            <br />
            Number of floors:
            <asp:ListBox ID="lstFloorsNum" runat="server" Rows="1">
                <asp:ListItem Selected="True">1</asp:ListItem>
                <asp:ListItem>2</asp:ListItem>
                <asp:ListItem>3</asp:ListItem>
            </asp:ListBox>
            <br />
            <br />
            <asp:CheckBox ID="chkBathroom" runat="server" Checked="True" Text="Bathroom" />
 <asp:CheckBox ID="chkToilet" runat="server" Checked="True" Text="Toilet" />
 <asp:CheckBox ID="chkSwimmingPool" runat="server" Text="Swimming pool " />
        </div>
        <br />
            <p>
                <asp:Button ID="ButtonPDF" runat="server" onclick="GetPDF_Click" 
                    Text="Print to PDF" />
            </p>
        </div>
    </form>
</body>
</html>

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

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// 
/// Summary description for HouseDescription
/// 
public class HouseDescription
{
	public HouseDescription()
	{
        HouseSpace = 120.0f;
        FloorsNumber = 2;
        IsBathroom = true;
        IsToilet = true;
        IsSwimmingPool = false;
	}
    public float HouseSpace { set; get; }
    public int FloorsNumber { set; get; }
    public bool IsBathroom { set; get; }
    public bool IsToilet { set; get; }
    public bool IsSwimmingPool { set; get; }
}

После этого мы получаем объект со всеми данными, которые нам нужны, чтобы поместить его внутрь Page.Application с уникальным ID. Таким образом, все наши данные будут доступны приблизительно в течение 20 минут, если мы знаем уникальный ID. Кстати, Вы можете настроить время хранения предметов внутри свойства Page.Application.

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

Ну и конечно логично будет завершить процесс воссозданием состояния страницы по идентификатору (ID). Другими словами, метод, который преобразует ASPX в PDF, откроет страницу с параметром, например:

http://www.mysite.com/default.aspx?id=123456789

Зная ID, Вы найдете необходимый объект пользовательского класса и заполните все элементы управления: текстовые поля, флажки и списки.

Это остальная часть кода C# (Default.aspx.cs):

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Net;
using System.Text;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string id = Request.QueryString["id"];
        HouseDescription hd = null;


        if (id != null)
        {
            // Recreate the page state
            hd = (HouseDescription)Application[id];
            SetPageState(hd);
        }
        // First time loading. Set all to default.
        else
        {
            if (!IsPostBack)
                SetPageState(new HouseDescription());
        }

    }
    protected void GetPDF_Click(object sender, EventArgs e)
    {
        // 1. Save the current page state
        // 1.1. Create ID
        string id = Guid.NewGuid().ToString();

        // 1.2 Save the current state in the Application State.
        HouseDescription hd = GetPageState();
        Application[id] = hd;

        // 2. Create url
        string pageUrl = System.Web.HttpContext.Current.Request.Url.AbsoluteUri;
        string pageUrlWithQuerry = string.Format("{0}?id={1}", pageUrl, id);

        // 3. Get PDF
        SautinSoft.PdfVision v = new SautinSoft.PdfVision();

        // Set "Edge mode" to support all modern CSS.
        SautinSoft.PdfVision.TrySetBrowserModeEdgeInRegistry();
        byte[] pdf = v.ConvertHtmlFileToPDFStream(pageUrlWithQuerry);

        // 4. Show PDF result
        if (pdf != null)
        {
            Response.Buffer = true;
            Response.Clear();
            Response.ContentType = "application/PDF";
            //Response.AddHeader("Content-Disposition:", "attachment; filename=Result.pdf");
            Response.AddHeader("Content-Disposition:", "inline; filename=Result.pdf");
            Response.BinaryWrite(pdf);
            Response.Flush();
            Response.End();
        }
    }
    protected void SetPageState(HouseDescription hd)
    {
        txtHouseSpace.Text = hd.HouseSpace.ToString();
        lstFloorsNum.SelectedValue = hd.FloorsNumber.ToString();
        chkBathroom.Checked = hd.IsBathroom;
        chkToilet.Checked = hd.IsToilet;
        chkSwimmingPool.Checked = hd.IsSwimmingPool;
    }
    protected HouseDescription GetPageState()
    {
        HouseDescription hd = new HouseDescription();

        float houseSpace = 0f;

        if (float.TryParse(txtHouseSpace.Text, out houseSpace))
            hd.HouseSpace = houseSpace;

        int floorsNum = 1;
        if (Int32.TryParse(lstFloorsNum.SelectedValue, out floorsNum))
            hd.FloorsNumber = floorsNum;

        hd.IsBathroom = chkBathroom.Checked;
        hd.IsToilet = chkToilet.Checked;
        hd.IsSwimmingPool = chkSwimmingPool.Checked;
        return hd;
    }
}

Метод "GetPageState" получает все данные из элементов управления и сохраняет их в качестве объекта пользовательского класса.

Метод "SetPageState" заполняет все элементы управления страницами из объекта пользовательского класса.

Метод "GetPDF_Click" вставляет объект пользовательского класса внутрь страницы. Приложение, использующее уникальный ID. Далее этот метод запускает преобразование в PDF, но требует ID.

А метод "Page_Load" воссоздает состояние страницы (заполняет все элементы управления) в том случае, если он встретил ID и нашел объект пользовательского класса, соответствующий этому ID.

Вот как это работает /проект работает в режиме реального времени 🙂/:
Online-demo ASPX в PDF

Если Вас заинтересовал наш продукт, Вы можете скачать демо-версию тут или посмотреть цены на «PDF Vision .Net».

 
Программы Скачать Помощь О компании
SautinSoft on Facebook SautinSoft on Twitter SautinSoft on Youtube Our Blog
Авторское право © 2002 - 2020 SautinSoft (начало с сайта sautin.com). Все права защищены.