Executar mala direta em apresentações
Introdução
No mundo do desenvolvimento .NET, a criação de apresentações dinâmicas e personalizadas é um requisito comum. Uma ferramenta poderosa que simplifica esse processo é o Aspose.Slides for .NET. Neste tutorial, nos aprofundaremos no fascinante reino de realizar mala direta em apresentações usando Aspose.Slides for .NET.
Pré-requisitos
Antes de embarcarmos nesta jornada, certifique-se de ter os seguintes pré-requisitos em vigor:
- Biblioteca Aspose.Slides for .NET: Certifique-se de ter a biblioteca Aspose.Slides for .NET instalada. Você pode baixá-lo em aqui .
- Modelo de documento: Prepare um modelo de apresentação (por exemplo, PresentationTemplate.pptx) que servirá como base para mala direta.
- Fonte de dados: você precisa de uma fonte de dados para mala direta. Em nosso exemplo, usaremos dados XML (TestData.xml), mas Aspose.Slides suporta várias fontes de dados como RDBMS. Agora, vamos mergulhar nas etapas de execução de mala direta em apresentações usando Aspose.Slides for .NET.
Importar namespaces
Em primeiro lugar, certifique-se de importar os namespaces necessários para aproveitar as funcionalidades fornecidas pelo Aspose.Slides:
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Aspose.Slides;
using Aspose.Slides.Charts;
using Aspose.Slides.Examples.CSharp;
using Aspose.Slides.Export;
using DataTable = System.Data.DataTable;
Etapa 1: configure seu diretório de documentos
string dataDir = "Your Document Directory";
string presTemplatePath = Path.Combine(dataDir, "PresentationTemplate.pptx");
string resultPath = Path.Combine(RunExamples.OutPath, "MailMergeResult");
// Verifique se o caminho do resultado existe
if (!Directory.Exists(resultPath))
Directory.CreateDirectory(resultPath);
Etapa 2: Criar um DataSet usando dados XML
using (DataSet dataSet = new DataSet())
{
dataSet.ReadXml(dataPath);
DataTableCollection dataTables = dataSet.Tables;
DataTable usersTable = dataTables["TestTable"];
DataTable staffListTable = dataTables["StaffList"];
DataTable planFactTable = dataTables["Plan_Fact"];
Etapa 3: percorrer os registros e criar apresentações individuais
foreach (DataRow userRow in usersTable.Rows)
{
// criar nome da apresentação do resultado (individual)
string presPath = Path.Combine(resultPath, "PresFor_" + userRow["Name"] + ".pptx");
// Carregar modelo de apresentação
using (Presentation pres = new Presentation(presTemplatePath))
{
// Preencha as caixas de texto com dados da tabela principal
((AutoShape)pres.Slides[0].Shapes[0]).TextFrame.Text = "Chief of the department - " + userRow["Name"];
((AutoShape)pres.Slides[0].Shapes[4]).TextFrame.Text = userRow["Department"].ToString();
// Obtenha imagem do banco de dados
byte[] bytes = Convert.FromBase64String(userRow["Img"].ToString());
//Insira a imagem no porta-retratos da apresentação
IPPImage image = pres.Images.AddImage(bytes);
IPictureFrame pf = pres.Slides[0].Shapes[1] as PictureFrame;
pf.PictureFormat.Picture.Image.ReplaceImage(image);
// Obtenha e prepare o quadro de texto para preenchê-lo com dados
IAutoShape list = pres.Slides[0].Shapes[2] as IAutoShape;
ITextFrame textFrame = list.TextFrame;
textFrame.Paragraphs.Clear();
Paragraph para = new Paragraph();
para.Text = "Department Staff:";
textFrame.Paragraphs.Add(para);
// Preencha os dados da equipe
FillStaffList(textFrame, userRow, staffListTable);
// Preencha os dados factuais do plano
FillPlanFact(pres, userRow, planFactTable);
pres.Save(presPath, SaveFormat.Pptx);
}
}
Etapa 4: preencher o quadro de texto com dados como uma lista
static void FillStaffList(ITextFrame textFrame, DataRow userRow, DataTable staffListTable)
{
foreach (DataRow listRow in staffListTable.Rows)
{
if (listRow["UserId"].ToString() == userRow["Id"].ToString())
{
Paragraph para = new Paragraph();
para.ParagraphFormat.Bullet.Type = BulletType.Symbol;
para.ParagraphFormat.Bullet.Char = Convert.ToChar(8226);
para.Text = listRow["Name"].ToString();
para.ParagraphFormat.Bullet.Color.ColorType = ColorType.RGB;
para.ParagraphFormat.Bullet.Color.Color = Color.Black;
para.ParagraphFormat.Bullet.IsBulletHardColor = NullableBool.True;
para.ParagraphFormat.Bullet.Height = 100;
textFrame.Paragraphs.Add(para);
}
}
}
Etapa 5: preencher o gráfico de dados da tabela PlanFact secundária
static void FillPlanFact(Presentation pres, DataRow row, DataTable planFactTable)
{
IChart chart = pres.Slides[0].Shapes[3] as Chart;
IChartTitle chartTitle = chart.ChartTitle;
chartTitle.TextFrameForOverriding.Text = row["Name"] + " : Plan / Fact";
DataRow[] selRows = planFactTable.Select("UserId = " + row["Id"]);
string range = chart.ChartData.GetRange();
IChartDataWorkbook cellsFactory = chart.ChartData.ChartDataWorkbook;
int worksheetIndex = 0;
// Adicionar pontos de dados para séries de linhas
chart.ChartData.Series[0].DataPoints.AddDataPointForLineSeries
(cellsFactory.GetCell(worksheetIndex, 1, 1, double.Parse(selRows[0]["PlanData"].ToString())));
chart.ChartData.Series[1].DataPoints.AddDataPointForLineSeries(
cellsFactory.GetCell(worksheetIndex, 1, 2, double.Parse(selRows[0]["FactData"].ToString())));
chart.ChartData.Series[0].DataPoints.AddDataPointForLineSeries(
cellsFactory.GetCell(worksheetIndex, 2, 1, double.Parse(selRows[1]["PlanData"].ToString())));
chart.ChartData.Series[1].DataPoints.AddDataPointForLineSeries(
cellsFactory.GetCell(worksheetIndex, 2, 2, double.Parse(selRows[1]["FactData"].ToString())));
chart.ChartData.Series[0].DataPoints.AddDataPointForLineSeries(
cellsFactory.GetCell(worksheetIndex, 3, 1, double.Parse(selRows[2]["PlanData"].ToString())));
chart.ChartData.Series[1].DataPoints.AddDataPointForLineSeries(
cellsFactory.GetCell(worksheetIndex, 3, 2, double.Parse(selRows[2]["FactData"].ToString())));
chart.ChartData.Series[0].DataPoints.AddDataPointForLineSeries(
cellsFactory.GetCell(worksheetIndex, 3, 1, double.Parse(selRows[3]["PlanData"].ToString())));
chart.ChartData.Series[1].DataPoints.AddDataPointForLineSeries(
cellsFactory.GetCell(worksheetIndex, 3, 2, double.Parse(selRows[3]["FactData"].ToString())));
chart.ChartData.SetRange(range);
}
Estas etapas demonstram um guia abrangente sobre como realizar mala direta em apresentações usando Aspose.Slides for .NET. Agora, vamos responder a algumas perguntas frequentes.
perguntas frequentes
1. O Aspose.Slides for .NET é compatível com diferentes fontes de dados?
Sim, Aspose.Slides for .NET oferece suporte a várias fontes de dados, incluindo XML, RDBMS e muito mais.
2. Posso personalizar a aparência dos marcadores na apresentação gerada?
Certamente! Você tem controle total sobre a aparência dos marcadores, conforme demonstrado noFillStaffList
método.
3. Que tipos de gráficos posso criar usando Aspose.Slides for .NET?
Aspose.Slides for .NET oferece suporte a uma ampla variedade de gráficos, incluindo gráficos de linhas conforme mostrado em nosso exemplo, gráficos de barras, gráficos de pizza e muito mais.
4. Como obtenho suporte ou assistência com Aspose.Slides for .NET?
Para suporte e assistência, você pode visitar o Fórum Aspose.Slides .
5. Posso experimentar o Aspose.Slides for .NET antes de comprar?
Certamente! Você pode aproveitar uma avaliação gratuita do Aspose.Slides for .NET em aqui .
Conclusão
Neste tutorial, exploramos os recursos interessantes do Aspose.Slides for .NET na realização de mala direta em apresentações. Seguindo o guia passo a passo, você pode criar apresentações dinâmicas e personalizadas sem esforço. Eleve sua experiência de desenvolvimento .NET com Aspose.Slides para geração de apresentações perfeita.