CaThey Joy Galias Ответов: 3

Как получить документ printdocument to ASP.NET


привет, у меня есть страница, которую я хотел распечатать в pdf-файл.не в конкретной настройке устройства, а для печати его в виде PDF-файла ... есть хоть одна идея?

я уже пробовал этот код. но это только освежает мою страницу ... ничего не происходит. пожалуйста, поправьте меня, если это подходящий код или нет.. Спасибо, что поделились своими идеями.

Что я уже пробовал:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;
using MySql.Data.MySqlClient;
using MySql.Web;
using MySql.Data;
using System.IO;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;
using System.ComponentModel;

namespace SchoolPortal
{

    public partial class nmb : System.Web.UI.Page
    {
        public Font printFont;
        public StreamReader streamToPrint;
        static string filePath;

        MySqlConnection conn = new MySqlConnection(@"Data Source =localhost; port=3306;Initial Catalog=mysql_testing;Uid=root;Pwd=secret;Database=payroll_system;");
        MySqlCommand cmd;
        MySqlDataReader mdr;
        protected void Page_Load(object sender, EventArgs e)
        {
            txte.Text = Session["e"].ToString();

        }
        protected void btnView_Click(object sender, EventArgs e)
        {

            conn.Open();
            string SelectQuery = "SELECT * From info_info WHERE employee_ID='" + txte.Text + "' AND month='" + txtmonth.Text + "' AND days='" + txtday.Text + "' AND year ='" + txtyear.Text + "'";
            cmd = new MySqlCommand(SelectQuery, conn);
            mdr = cmd.ExecuteReader();
            if (mdr.Read())
            {
                lblemployee.Text = mdr.GetString("employee_ID");
                lblmonth.Text = mdr.GetString("month");
                lbldays.Text = mdr.GetString("days");
                lblyear.Text = mdr.GetString("year");
                lbllast.Text = mdr.GetString("Name");
                lblLast1.Text = mdr.GetString("Name");
                lblposition.Text = mdr.GetString("position");
                lblregular.Text = mdr.GetString("regular");
                lbltotal.Text = mdr.GetString("totalday");
                lblGen.Text = mdr.GetString("month1");
                lblStat.Text = mdr.GetString("day1");
                lblCon.Text = mdr.GetString("month2");
                lblperm.Text = mdr.GetString("day2");
                lblcent.Text = mdr.GetString("percent");
                lblamount.Text = mdr.GetString("amount");
                lblcent1.Text = mdr.GetString("percent1");
                lblamount1.Text = mdr.GetString("amount1");
                lblcent2.Text = mdr.GetString("percent2");
                lblamount2.Text = mdr.GetString("amount2");
                lblcent3.Text = mdr.GetString("percent3");
                lblamount3.Text = mdr.GetString("amount3");
                lblholiday.Text = mdr.GetString("holiday");
                lblspecial.Text = mdr.GetString("special");
                //lbltotal.Text = mdr.GetString("total");
                lbldeduction.Text = mdr.GetString("deduction");
                lblholds.Text = mdr.GetString("date1");
                lblCash.Text = mdr.GetString("cash_advance");
                lblnet.Text = mdr.GetString("net");
                lbllate.Text = mdr.GetString("late");
                lblundertime.Text = mdr.GetString("under_time");
                lblabsent.Text = mdr.GetString("absent");

                lblmess.Text = "";
            }

            else
            {

                lblmess.Text = "no record found please check your ID number as well as month, day, and year then TRY AGAIN";
            }
            conn.Close();


        }
           
        protected void Button1_PrintPage(object sender, PrintPageEventArgs ev)
        {
            float linesPerPage = 0;
            float yPos = 0;
            int count = 0;
            float leftMargin = ev.MarginBounds.Left;
            float topMargin = ev.MarginBounds.Top;
            String line = null;

            linesPerPage = ev.MarginBounds.Height /
                printFont.GetHeight(ev.Graphics);

            while (count < linesPerPage && ((line = streamToPrint.ReadLine()) != null))
            {
                yPos = topMargin + (count * printFont.GetHeight(ev.Graphics));
                ev.Graphics.DrawString(line, printFont, Brushes.Black, leftMargin, yPos, new StringFormat());
                count++;
            }
            if (line != null)
                ev.HasMorePages = true;
            else
                ev.HasMorePages = false;
        }
        public void Printing()
        {
            try
            {
                streamToPrint = new StreamReader(filePath);
                try
                {

                    PrintDocument pd = new PrintDocument();
                    pd.PrintPage += new PrintPageEventHandler(Button1_PrintPage);
                    pd.Print();

                }
                finally
                {
                    streamToPrint.Close();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);

            }

        }

        public static void Main(string[] args)
        {
            string sampleName = Environment.GetCommandLineArgs()[0];
            if (args.Length != 1)
            {
                Console.WriteLine("Usage : " + sampleName + "<file path>");
                return;
            }
            filePath = args[0];
            new PrintingPermissionLevel();

        }


        }
    }

3 Ответов

Рейтинг:
2

Dave Kreskowiak

Ummm...ASP.NET код выполняется полностью на сервере, но никогда не на клиенте.

Печать из ASP.NET код никогда не является хорошей идеей, потому что драйвер принтера может создать диалоговое окно на сервере, которое никто никогда не увидит или не сможет ответить. Кроме того, никогда не стоит использовать систему.Окна.Формирует классы в Ан ASP.NET страница.

Кроме того, страница не отображается сервером. Он отображается браузером на клиенте.

Для того чтобы получить страницу, визуализированную на сервере, в ASP.NET конвейер, вам нужно будет либо написать свой собственный фильтр, чтобы сделать рендеринг, либо вы можете использовать стороннюю библиотеку, чтобы сделать это за вас, пример которой вы можете найти здесь[^].

Или просто погуглите для "ASP.NET рендеринг страницы в pdf".


CaThey Joy Galias

Любая идея...

Dave Kreskowiak

ЧТО??? Ты вообще читал мой пост? Особенно последние несколько строк.

CaThey Joy Galias

Потому что я только новичок, использующий asp. Net.. Можете ли вы найти пример кода для моей проблемы

Dave Kreskowiak

Нет, не могу. У меня никогда не было необходимости что-то делать ASP.NET в PDF.

Именно здесь появляется исследовательская часть написания кода. Я уже сказал вам, что нужно искать. Идите вперед и ищите, а затем начните читать.

Рейтинг:
0

CaThey Joy Galias

Сэр, это тот самый, который вы пытаетесь заставить меня закодировать?

using System.IO;
using iTextSharp.text;
using iTextSharp.text.html.simpleparser;
using iTextSharp.text.pdf;


protected void btnExport_Click(object sender, EventArgs e)
{
    Response.ContentType = "application/pdf";
    Response.AddHeader("content-disposition", "attachment;filename=TestPage.pdf");
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    StringWriter sw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(sw);
    this.Page.RenderControl(hw);
    StringReader sr = new StringReader(sw.ToString());
    Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 100f, 0f);
    HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
    PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
    pdfDoc.Open();
    htmlparser.Parse(sr);
    pdfDoc.Close();
    Response.Write(pdfDoc);
    Response.End();
}


Рейтинг:
0

Patrice T

Очевидно, что месяц, дни и год-это дата, это плохая идея обрабатывать дату как 3 поля, еще хуже сделать их строками.
если список отсортирован по дням, то вы получите:
1 10 11 12 13 14 15 16 17 18 19 2 20 21 ...
И с этой датой все станет еще сложнее.

string SelectQuery = "SELECT * From info_info WHERE employee_ID='" + txte.Text + "' AND month='" + txtmonth.Text + "' AND days='" + txtday.Text + "' AND year ='" + txtyear.Text + "'";

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]