Member 11197134 Ответов: 2

Как добавить элемент управления диаграммой, который находится в gridview, в PDF-файл?


Я пытаюсь загрузить содержимое gridview1 в Excel и PDF-файл. Перепробовал множество способов использования iTextSharp. Я попробовал рендеринг, а также копирование ячейки за ячейкой, создавая pdfTable. Ни один не сработал. пожалуйста помочь





Пожалуйста, помогите мне, так как я новичок в управлении диаграммами. ASP.NET


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

частный недействительными PDF_Export()
{
Ответ.ContentType = " приложение / pdf";
Ответ.AddHeader ("content-disposition", " attachment;filename=GridViewExport. pdf");
Ответ.Кэш.SetCacheability (HttpCacheability.NoCache);
StringWriter sw = новый StringWriter();
HtmlTextWriter hw = новый HtmlTextWriter(sw);
Управления gridview1.AllowPaging = false;
Управления gridview1.Привязку();
Управления gridview1.RenderControl(гв);
StringReader sr = новый StringReader(sw.Метод toString());
Документ pdfDoc = новый документ(PageSize. A4, 10f, 10f, 10f, 0f);
HTMLWorker htmlparser = новый HTMLWorker(pdfDoc);
PdfWriter.GetInstance(pdfDoc, Response.Выходной поток);
pdfDoc.Открыть();
htmlparser.Синтаксический анализ(СР);
pdfDoc.Рядом();
Ответ.Запись (pdfDoc);
Ответ.Конец();
}


также я попробовал со следующим кодом в событии нажатия кнопки mwthod. Все Равно Не Получилось.


int columnsCount = GridView1. HeaderRow.Ячейки.Рассчитывать;

PdfPTable pdfTable = новый PdfPTable(columnsCount);


foreach(TableCell gridViewHeaderCell в GridView1. HeaderRow.Ячейки)
{

Шрифт шрифт = новый шрифт();

шрифт.Color = new BaseColor(GridView1.HeaderStyle.Цвет);


PdfPCell pdfCell = new PdfPCell(новая фраза(gridViewHeaderCell. Text, шрифт));


pdfCell.Свойство backgroundColor = новый BaseColor(управления gridview1.HeaderStyle.Задний цвет);

// Добавить ячейку в таблицу PDF
pdfTable.AddCell (pdfCell);
}


по каждому элементу (gridViewRow GridViewRow в управления gridview1.Строк)
{
если (gridViewRow.RowType == DataControlRowType.DataRow)
{

по каждому элементу (tablecell в gridViewCell в gridViewRow.Ячейки)
{
Шрифт шрифт = новый шрифт();
шрифт.Цвет = новый BaseColor(управления gridview1.RowStyle.Цвет);

PdfPCell pdfCell = new PdfPCell(новая фраза(gridViewCell. Text, шрифт));

pdfCell.Свойство backgroundColor = новый BaseColor(управления gridview1.RowStyle.Задний цвет);

pdfTable.AddCell (pdfCell);
}
}
}


Документы PDF документ = новый документ(размер страницы.А4, 10ф, 10ф, 10ф, 10ф);

PdfWriter.GetInstance(pdfDocument, Response.Выходной поток);

документы PDF.Открыть();
документы PDF.Добавить (pdfTable);
документы PDF.Закрывать();

Ответ.ContentType = " приложение / pdf";
Ответ.AppendHeader ("content-disposition",
"вложение;имя файла=Employees. pdf");
Ответ.Писать(документы PDF);
Ответ.Промывать();
Ответ.Конец();

2 Ответов

Рейтинг:
6

pparya27

Вот обновленный код для экспорта gridview в pdf вместе с диаграммами

Шаг 1: Поместите этот gridview и кнопку на вашу страницу aspx :

<asp:Button ID="btnExportGridView" runat="server" Text="ExportChart" OnClick="btnExportGridView_Click" />

<asp:GridView ID="gvData" runat="server" AutoGenerateColumns="false" 

onrowcreated="gvData_RowCreated" onrowdatabound="gvData_RowDataBound">
<Columns>
<asp:BoundField HeaderText="Username" DataField="Username" ItemStyle-Width="120px" />

<asp:TemplateField HeaderText="marks Report">
<ItemTemplate>

<asp:Chart ID="Chart2" runat="server" Width="250px" Height="200px">
<Series>
 <asp:Series Name="Series1" LegendText="LEVEL 1"      IsValueShownAsLabel="false" ChartArea="ChartArea1"

 MarkerBorderColor="#DBDBDB" XValueMember="col1"    YValueMembers="col2">
 </asp:Series>                                
 </Series>
<ChartAreas>
<asp:ChartArea Name="ChartArea1">
</asp:ChartArea>
</ChartAreas>
</asp:Chart>

</ItemTemplate>
</asp:TemplateField>

</Columns>
</asp:GridView>



Шаг 2: привязка выборочных данных к GridView :


DataTable dtData;
protected void Page_Load(object sender, EventArgs e)
   {
       BindData();
   }



private void BindData()
 {
     dtData = GetData();
     gvData.DataSource = dtData;
     gvData.DataBind();
 }



private DataTable GetData()
    {
        DataTable dtDataTmp = new DataTable();
        dtDataTmp.Columns.Add("Username", typeof(string));
        dtDataTmp.Columns.Add("Marks", typeof(DataTable));

        DataTable dt1 = new DataTable();
        dt1.Columns.Add("col1", typeof(string));
        dt1.Columns.Add("col2", typeof(decimal));

        DataTable dt2 = new DataTable();
        dt2.Columns.Add("col1", typeof(string));
        dt2.Columns.Add("col2", typeof(decimal));

        dt1.Rows.Add("Math", 40);
        dt1.Rows.Add("Science", 65);
        dt1.Rows.Add("English", 74);
        dt1.AcceptChanges();

        dt2.Rows.Add("Math", 45);
        dt2.Rows.Add("Science", 60);
        dt2.Rows.Add("English", 30);
        dt2.AcceptChanges();

        dtDataTmp.Rows.Add("Rohit", dt1);
        dtDataTmp.Rows.Add("Mohit", dt2);
        dtDataTmp.AcceptChanges();

        return dtDataTmp;
    }



protected void gvData_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            DataTable dtTmp = (DataTable)dtData.Rows[e.Row.RowIndex]["Marks"];
            Chart chart = (Chart)e.Row.FindControl("Chart2");

            chart.DataSource = dtTmp;
            chart.DataBind();

        }
    }



Шаг 3: Код для экспорта Gridview вместе с диаграммой в формат pdf с помощью iTextSharp :


protected void btnExportGridView_Click(object sender, EventArgs e)
   {
       Document doc = new Document(PageSize.LETTER, 50, 50, 50, 50);
       using (MemoryStream output = new MemoryStream())
       {
           PdfWriter wri = PdfWriter.GetInstance(doc, output);
           doc.Open();

           GridViewRow gvr = null;
           PdfPTable tab = new PdfPTable(2);
           PdfPCell[] cells = null;
           Chart chrt = null;
           Random rnd = new Random();
           string img_path = "";
           List<string> lstImgs = new List<string>();

           for (int i = 0; i < gvData.Rows.Count; i++)
           {
               gvr = gvData.Rows[i];

               PdfPCell c1 = new PdfPCell();
               PdfPCell c2 = new PdfPCell();

               for (int j = 0; j < gvData.Rows[i].Cells.Count; j++)
               {
                   c1 = new PdfPCell();
                   c2 = new PdfPCell();
                   c1.AddElement(new Paragraph(gvr.Cells[0].Text));
                   chrt = (Chart)gvr.FindControl("Chart2");
                   img_path = Server.MapPath("Images/img_" + rnd.NextDouble() + ".jpg");
                   chrt.SaveImage(img_path);
                   c2.AddElement(iTextSharp.text.Image.GetInstance(img_path));
                   lstImgs.Add(img_path);
               }
               cells = new PdfPCell[] { c1, c2 };
               tab.Rows.Add(new PdfPRow(cells));
           }
           doc.Add(tab);
           doc.Close();

           foreach (string img in lstImgs)
           {
               if (File.Exists(img))
                   File.Delete(img);
           }

           Response.ClearContent();
           Response.ClearHeaders();
           Response.ContentType = "application/pdf";
           Response.AddHeader("Content-Disposition", "attachment; filename=testpdf.pdf");

           Response.BinaryWrite(output.ToArray());
           Response.End();
           Response.Flush();
           Response.Clear();
       }

   }




Наслаждайтесь !!


Member 11197134

Большое спасибо, сэр. Это сработало для меня.

Рейтинг:
0

pparya27

Привет, приятно видеть ваш вопрос.

Я только что создал образец кода для вашего требования. Однако я не создал диаграмму внутри gridview. Я только что быстро написал код для экспорта элемента управления диаграммой в pdf-файл.

Я использовал библиотеку iTextSharp для создания pdf-файла.


Шаг 1 : Поместите следующий элемент управления диаграммой на веб-страницу

<asp:Chart runat="server" ID="Chart1">
          <Series>
              <asp:Series Name="Series1" XValueMember="col1" YValueMembers="col2">
           </asp:Series>
          </Series>
      <ChartAreas>
           <asp:ChartArea Name="ChartArea1">
           </asp:ChartArea>
      </ChartAreas>
</asp:Chart>



Шаг 2: Экспорт элемента управления диаграммой в pdf одним нажатием кнопки

protected void btnExportChart_Click(object sender, EventArgs e)
   {
       DataTable dtData = new DataTable();
       dtData.Columns.Add("col1", typeof(decimal));
       dtData.Columns.Add("col2", typeof(decimal));

       dtData.Rows.Add(2, 10);
       dtData.Rows.Add(4, 6);
       dtData.Rows.Add(6, 9);
       dtData.Rows.Add(8, 12);
       dtData.Rows.Add(10, 15);
       dtData.AcceptChanges();

       Chart1.DataSource = dtData;
       Chart1.DataBind();

       string img_path = Server.MapPath("Images/chart1.jpg");

       Chart1.SaveImage(img_path, ChartImageFormat.Jpeg);

       Document doc = new Document(PageSize.LETTER, 50, 50, 50, 50);
       using (MemoryStream output = new MemoryStream())
       {
           PdfWriter wri = PdfWriter.GetInstance(doc, output);
           doc.Open();

           iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(img_path);
           doc.Add(img);
           doc.Close();

           Response.ClearContent();
           Response.ClearHeaders();
           Response.ContentType = "application/pdf";
           Response.AddHeader("Content-Disposition"," attachment;filename=testpdf.pdf");

           Response.BinaryWrite(output.ToArray());
           Response.End();
           Response.Flush();
           Response.Clear();
       }

   }



Надеюсь,это поможет вам использовать этот код в соответствии с вашими требованиями и для gridview.
Пожалуйста, вернитесь, если вам нужны какие-либо разъяснения.


Member 11197134

- Да, Сэр. Спасибо за ответ. Но я получил этот код и попробовал. Он отлично работает, если я создаю диаграмму отдельно и печатаю в pdf-файл. Но у меня есть требование, как я уже упоминал ранее в своем вопросе. моя карта находится в ячейке таблицы. Я хочу распечатать готовые таблицы в PDF. Помоги мне в этом пеласе.
&ЛТ;АСП:таблицы с ID="gridview1, на" атрибут runat="сервер" AutoGenerateColumns="ложных" ширина="700px в" OnRowDataBound="GridView1_RowDataBound"&ГТ;
& lt;столбцы>
<asp:BoundField HeaderText=" Username "DataField= "Username" ItemStyle-Width= "120px" />
<asp:TemplateField HeaderText= "отчет о метках" >
& lt;itemtemplate>
< div>
&ЛТ;АСП:уникальный идентификатор="Диаграмма1" атрибут runat="сервер" ширина="550px" высота="200 пикселей"&ГТ;
& lt;серия>
<asp:название серии= " Series1"
LegendText= "LEVEL 1" IsValueShownAsLabel= "false" ChartArea= " ChartArea1"
MarkerBorderColor= "#DBDBDB " >
<asp:название серии= " Series2"
LegendText= "LEVEL 2" IsValueShownAsLabel= "false" ChartArea= " ChartArea1"
MarkerBorderColor= "#DBDBDB " >
&ЛТ;АСП:серия наименование="выводятся в ряд series3"
LegendText= "LEVEL 3" IsValueShownAsLabel= "false" ChartArea= " ChartArea1"
MarkerBorderColor= "#DBDBDB " >


& lt;chartareas>
<asp:Chartarea Name= "ChartArea1">



< / div>