Úvod

Tento průvodce ukazuje, jak vytvořit nativní grafy Wordu pomocí Aspose.Words FOSS pro .NET — stejné kreslicí objekty, které Word sám vytváří při použití Insert > Chart — kompletně z kódu. Graf přidaný tímto způsobem není obrázek; jedná se o Chart objekt vložený do OOXML balíčku dokumentu, s modelem datových sérií, osami, legendou a tabulkou dat, kterou Word i po uložení souboru stále může otevřít a upravit. Tento příspěvek je detailním ponorem do toho Chart API: jak vytvořit graf, přidat data sérií a získat přístup k objektům os, legendy, popisků dat a formátování, které řídí jeho vykreslení.

Knihovna je licencována pod MIT a nemá žádné nativní závislosti. Cílí na .NET Standard 2.0, takže kód v tomto příspěvku běží beze změny na .NET Framework 4.6.2+ a .NET 6, 8 a 10. Nainstalujte ji pomocí NuGet, nebo ji sestavte ze zdrojového kódu — viz Rychlý start níže. Všechno, co je zde ukázáno, je stejný engine grafů, který používá komerční Aspose.Words pro .NET; tato edice zahrnuje kompletní model objektů grafu, ale ne rozvržení stránky ani vykreslování, takže pozice grafu na stránce se nepočítá a dokument nelze exportovat do PDF ani obrázku.


Co je součástí

Vytvoření grafu a přidání datové série

DocumentBuilder.InsertChart(chartType, width, height) vloží tvar grafu na aktuální pozici a vrátí Shape; jeho vlastnost Chart je vstupním bodem pro vše ostatní. Nově vložený graf již má výchozí sérii, takže většina kódu ji nejprve vymaže a přidá vlastní data pomocí Chart.Series, což je ChartSeriesCollection.

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 });

ChartSeriesCollection.Add má přetížení pro páry kategorie/hodnota (jak výše), páry X/Y, časové série a bublinové série s extra hodnotou velikosti. Na jednotlivém ChartSeries, Add(xValue), Add(xValue, yValue) a Add(xValue, yValue, bubbleSize) lze přidávat jednotlivé body, Insert umístí bod na zadaný index a Clear() / ClearValues() odstraňují data série, aniž by nutně odstraňovaly samotný objekt série.

Typy grafů a typy řad

ChartType — výčet předávaný do InsertChart — má zhruba 40 členů pokrývajících standardní rodiny grafů Wordu: Line, Bar, Column, Pie, Doughnut, Radar, Scatter, Stock, Surface, Treemap, Sunburst, Histogram, Pareto, BoxAndWhisker, Waterfall a Funnel, plus vrstvené, procentuálně vrstvené a 3D varianty několika z nich (Bar3D, ColumnStacked, Area3DPercentStacked a tak dále).

Související, ale odlišný výčet, ChartSeriesType, se objevuje na ChartSeries.SeriesType a ChartSeriesGroup.SeriesType a popisuje typ jednotlivé řady nebo skupiny řad spíše než celý graf. Obsahuje stejné členy jako ChartType plus dva další — ParetoLine a RegionMap — které ChartType přímo neukazuje. ChartSeriesGroup je to, co umožňuje kombinované grafy: Chart.SeriesGroups (a ChartSeriesGroupCollection) obsahuje jednu skupinu pro každý typ řady v grafu, a každá skupina má svůj vlastní pár AxisX/AxisY a vlastnosti rozvržení jako Overlap, GapWidth, BubbleScale a DoughnutHoleSize.

Osy, mřížky a škálování

Chart.AxisX, AxisY a AxisZ (plus kolekce Axes) vracejí objekty ChartAxis. Každá osa má Type (ChartAxisType.Category, Series nebo Value), nastavení značek dělení (MajorTickMark, MinorTickMarkCross, Inside, Outside nebo None), příznaky mřížky (HasMajorGridlines, HasMinorGridlines) a řízení jednotek (MajorUnit, MinorUnit a jejich *IsAuto protějšky). ChartAxis.Scaling vrací objekt AxisScaling, jehož Minimum a Maximum jsou hodnoty AxisBoundAxisBound.IsAuto uvádí, zda je mez vypočítána automaticky, a parametrizované konstruktory (AxisBound(value), AxisBound(datetime)) nastavují explicitní číselnou nebo datovou mez. Osa kategorie může být připevněna k textovým nebo časovým kategoriím prostřednictvím ChartAxis.CategoryType (AxisCategoryType.Automatic, Category nebo Time), a ChartAxis.Title odhaluje ChartAxisTitle se svými vlastními Text, Show a Font.

Legenda, datová tabulka a nadpis grafu

Chart.Legend vrací ChartLegend, jehož Position (a LegendPosition z None, Bottom, Left, Right, Top nebo TopRight) určuje, kde se vykresluje vzhledem k ploše grafu; LegendEntries je ChartLegendEntryCollection jednotlivých objektů ChartLegendEntry, z nichž každý má své vlastní Font a příznak IsHidden pro skrytí jedné řady v legendě bez odebrání z grafu. Chart.DataTable (a ChartDataTable) vykresluje hodnoty řad jako mřížku pod grafem, když je nastaveno Show, přičemž HasLegendKeys, HasHorizontalBorder, HasVerticalBorder a HasOutlineBorder řídí její vzhled. Chart.Title je ChartTitle s vlastnostmi Text a Show, následující stejný vzor jako názvy os.

Popisky dat, datové body a značky

ChartSeries.HasDataLabels zapíná popisky dat pro řadu a ChartSeries.DataLabels (a ChartDataLabelCollection) nebo jednotlivý ChartDataLabel z ní určuje, co každý popisek zobrazuje: ShowValue, ShowCategoryName, ShowSeriesName, ShowPercentage, ShowLegendKey a ShowBubbleSize jsou nezávislé příznaky a Position (ChartDataLabelPosition.Center, InsideEnd, OutsideEnd, BestFit a další) umisťuje popisek relativně k bodu. ChartSeries.DataPoints poskytuje přístup k jednotlivým bodům přes ChartDataPoint, který má vlastní Marker (a ChartMarker s Symbol z výčtu MarkerSymbol a Size), Explosion (pro vytažení plátku koláče) a Format. Každý prvek grafu, který může být vyplněn nebo obkreslen – řady, datové body, legenda, nadpis, datová tabulka – vystavuje ChartFormat přes svou vlastnost Format, s vlastnostmi Fill, Stroke a ShapeType (ChartShapeType) a metodou SetDefaultFill() pro jeho resetování. Jedna věc, kterou je dobré vědět: varianty výplně a barvy tahu spojené s motivem na ChartFormat (FillableForeThemeColor, FillableBackThemeColor, StrokeForeThemeColor, StrokeBackThemeColor a jejich protějšky odstínů/tónů) nejsou v této edici implementovány – nastavte obyčejné barvy Fill/Stroke místo odkazů na barvu motivu. Chart.Style (a ChartStyle jako Muted, Saturated, Gradient, Outline nebo Black) použije předdefinovaný vzhled na celý graf v jednom kroku.


Rychlý start

Aspose.Words FOSS pro .NET je k dispozici prostřednictvím NuGet:

dotnet add package Aspose.Words.FOSS

Pro sestavení ze zdrojového kódu místo toho:

git clone https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git
cd Aspose.Words-FOSS-for-.NET
dotnet build Aspose.Words.sln -c Release

Poté přidejte referenci na projekt Aspose.Words.csproj z vaší aplikace. S referencí na místě tento kód vytvoří čárový graf s jednou řadou a uloží jej do DOCX:

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");
Console.WriteLine("Saved chart.docx");

Otevřete chart.docx ve Wordu a graf je plně upravitelný — klikněte na něj pravým tlačítkem a vyberte “Edit Data”, abyste viděli stejné tři kategorie a hodnoty uvedené výše.


Podporované formáty

FormátPříponaČístZapisovat
DOCX.docx
DOCM.docm
DOTX.dotx
DOTM.dotm
Flat OPC (všechny varianty)(různé)
Markdown.md
Text.txt

Grafy vytvořené pomocí Chart API jsou objekty kreslení OOXML, takže procházejí napříč výše uvedenými formáty rodiny DOCX (DOCX, DOCM, DOTX, DOTM a Flat OPC). Tato edice neumí exportovat do PDF, XPS ani obrázků a neumí tisknout, takže nic neprovádí vykreslení grafu do bitmapy – graf zůstává živým, editovatelným objektem uvnitř souboru Word. Další konvertory formátů, které byly z této edice odstraněny (DOC, RTF, ODT, HTML, EPUB, MHTML, MOBI, AZW3 a WordML), jsou stejné subsystémy vyloučené jinde v knihovně, ne něco specifického pro grafy.


Open Source a licencování

Aspose.Words FOSS pro .NET je vydáno pod licencí MIT, zdarma pro komerční i osobní použití bez poplatků za autorská práva ani omezení šíření. Kompletní zdrojový kód, včetně tříd grafů zmíněných v tomto příspěvku, je dostupný na GitHub v Aspose.Words FOSS pro .NET úložišti.


Začínáme

Související zdroje