功能和特性

功能和特性

功能和特性

本页涵盖了图表创作功能 Aspose.Words FOSS for .NET 带有可运行的C#示例,构建于 DocumentBuilder.InsertChart() 以及 Chart 对象模型。该库的完整文档对象模型(段落、表格、样式、书签、节)在产品概览以及以下内容中有描述 Quickstart 指南。


使用图表创建文档

使用 DocumentBuilder.InsertChart() 插入图表形状,然后通过返回的 Shape 访问其 Chart 对象。添加真实数据前,请先清除默认生成的系列:

using Aspose.Words;
using Aspose.Words.Drawing.Charts;

Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

Shape shape = builder.InsertChart(ChartType.Line, 432, 252);
Chart chart = shape.Chart;

// Delete default generated series.
chart.Series.Clear();

string[] categories = new string[] { "AW Category 1", "AW Category 2", "AW Category 3" };
chart.Series.Add("AW Series 1", categories, new double[] { 4.3, 2.5, 3.5 });

doc.Save("chart.docx");

图表系列、数据点和标记

Chart.Series 是一个 ChartSeriesCollection。每个 ChartSeries 通过 DataPoints 公开其单独的数据点,您可以仅自定义某个点的标记或格式,而不会影响该系列的其他部分:

Shape shape = builder.InsertChart(ChartType.Line, 432, 252);
Chart chart = shape.Chart;
chart.Series.Clear();
chart.Series.Add("AW Series 1", categories, new double[] { 4.3, 2.5, 3.5 });

ChartSeries series = chart.Series[0];
ChartDataPointCollection points = series.DataPoints;

ChartDataPoint point1 = points[0];
ChartDataPoint point2 = points[1];

point1.InvertIfNegative = true;
point1.Marker.Symbol = MarkerSymbol.Square;
point2.InvertIfNegative = true;
point2.Marker.Symbol = MarkerSymbol.Diamond;

// Reset a single data point back to the series' inherited default formatting.
point1.ClearFormat();

图表数据标签

ChartSeries.DataLabels 是一个 ChartDataLabelCollection,一次性控制系列中每个点的标签。使用 DataLabels[i] 索引它,以覆盖单个 ChartDataLabel:

Shape shape = builder.InsertChart(ChartType.Line, 432, 252);
Chart chart = shape.Chart;
chart.Series.Clear();
chart.Series.Add("AW Series 1", categories, new double[] { 4.3, 2.5, 3.5 });

ChartSeries series = chart.Series[0];
series.HasDataLabels = true;
series.DataLabels.ShowValue = true;

ChartDataLabel label = series.DataLabels[1];
label.ShowCategoryName = true;
label.Position = ChartDataLabelPosition.Below;

图表轴标题

Chart.AxisX 和 Chart.AxisY 都通过它们的 Title 属性公开一个 ChartAxisTitle:

Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

Shape shape = builder.InsertChart(ChartType.Column, 432, 252);

Chart chart = shape.Chart;
ChartAxisTitle xTitle = chart.AxisX.Title;
ChartAxisTitle yTitle = chart.AxisY.Title;

xTitle.Show = true;
xTitle.Text = "Categories";
yTitle.Show = true;
yTitle.Text = "Values";

图例和字体

Chart.Legend 公开 LegendEntries,每个系列一个 ChartLegendEntry,每个都有其自己的 Font。Font 实现填充格式化,因此 Font.Fill.Solid() 以与任何其他格式化文本相同的方式设置实心文本颜色:

using System.Drawing;

Shape shape = builder.InsertChart(ChartType.Column, 432, 252);

ChartLegend legend = shape.Chart.Legend;
Font font1 = legend.LegendEntries[0].Font;
Font font2 = legend.LegendEntries[1].Font;

font1.Fill.Solid(Color.Blue);
font2.Color = Color.Green;

图表数据表

Chart.DataTable 是一个 ChartDataTable,在图表下方显示底层系列值。它的 Has*Border 和 HasLegendKeys 属性控制哪些部分可见:

Shape shape = builder.InsertChart(ChartType.Column, 432, 252);
ChartDataTable dataTable = shape.Chart.DataTable;

dataTable.HasLegendKeys = false;
dataTable.HasHorizontalBorder = true;
dataTable.HasVerticalBorder = true;
dataTable.HasOutlineBorder = false;

doc.Save("chart-report.docx");

技巧与最佳实践

  • DocumentBuilder.InsertChart() 用默认生成的系列填充新图表——在添加自己的数据之前调用 chart.Series.Clear(),否则默认系列会与之并存。
  • 当只有少数点需要自定义格式时,使用 ChartSeries.DataLabels[i] 定位单个数据标签;使用集合级属性(DataLabels.ShowValue 等)一次性为系列中的每个标签设置默认值。
  • ClearFormat() 在 ChartDataPoint 和 ChartDataLabelCollection 上均可使用——它会将直接格式化重置为系列默认继承的状态。
  • 字段求值引擎会以编程方式更新诸如 DATE 和 DOCPROPERTY 等内容字段,但依赖页面布局的字段(目录中的页码,NUMPAGES)会求值为占位符 0 值,因为此版本不包含布局引擎。
  • 请参阅 安装指南 通过 NuGet 添加软件包,或从源码构建,然后再引用这些 API。

常见问题

问题原因修复
页码或目录条目显示 0此版本不包含页面布局/渲染引擎预期行为 — 布局相关的字段值未计算;请使用 commercial Aspose.Words 用于 .NET 如果你需要它们
Document.Save() 到 .pdf、.xps 或图像扩展名失败此版本未包含渲染格式改为保存为 DOCX、DOCM、DOTX、DOTM、Flat OPC、Markdown 或纯文本
加载 .doc、.rtf、.odt、.html 或 .epub 文件失败仅支持加载/保存 DOCX、DOCM、DOTX、DOTM、Flat OPC、Markdown 和纯文本请先将源文件转换为 DOCX,或使用商业版
添加自定义数据后,默认图表系列仍然出现chart.Series.Clear() 在 InsertChart() 之后未被调用在调用 chart.Series.Add() 之前清除默认生成的系列

FAQ

为什么目录中的页码显示为 0?

此 FOSS 版不包含页面布局和渲染子系统,因此任何依赖页面布局的字段值——包括页码——都会评估为占位符 0,而不是计算得到的值。

我可以将文档导出为 PDF 或图像格式吗?

此版本不支持。PDF、XPS 和图像导出依赖于已被移除的同一渲染子系统,以保持此版本免费。请使用商业版 Aspose.Words 来获取 .NET,以生成这些输出。

我可以在文档上创建新的数字签名吗?

不——此版本可以验证现有的数字签名,但不能创建新的签名。

InsertChart() 支持哪些图表类型?

InsertChart() 接受一个 ChartType 值——该枚举涵盖标准图表系列,如折线图、柱状图、条形图、饼图、面积图、环形图、雷达图、散点图、股票图和表面图,并包括它们的堆叠和 3D 变体。

API Reference 摘要

类 / 属性描述
Document根文档对象;Save() 写入 DOCX、Markdown 或纯文本
DocumentBuilder高级光标 API;InsertChart() 添加图表形状
Shape由 InsertChart() 返回的绘图对象;公开 Chart 属性
Chart图表对象;Series、Legend、DataTable、AxisX、AxisY、Title
ChartSeries / ChartSeriesCollection系列数据(Add,Clear)以及每个系列的设置
ChartDataPoint / ChartDataPointCollection每点格式化;ClearFormat()
ChartMarker / MarkerSymbol数据点标记的形状和大小
ChartDataLabel / ChartDataLabelCollection每个标签和整个集合的标签显示设置
ChartAxisTitle在 Chart.AxisX / Chart.AxisY 上显示的标题文本
ChartLegend / ChartLegendEntry图表图例及其每个系列的条目
ChartDataTable图表下方显示的数据表
Font / Fill图表文本元素的文本格式和填充(纯色、渐变)

另请参阅

 中文