Formatera presentationsdiagram i PHP

Översikt

Denna artikel förklarar hur man formaterar diagram i PowerPoint‑presentationer med Aspose.Slides. Den visar hur man anpassar viktiga diagram‑element som axlar, rutnätlinjer, titlar, legender, plotområdet och väggfyllningar för att förbättra utseendet och läsbarheten för diagramdata.

Den demonstrerar också hur man anger teckensnittsegenskaper för diagramtext, tillämpar fördefinierade och anpassade numeriska format på diagramdata samt aktiverar runda hörn för diagramområdet. Tillsammans visar dessa exempel hur man styr både den visuella stilen och datapresentationen i diagram i en presentation.

Formatera diagram‑entiteter

Aspose.Slides för PHP via Java låter utvecklare lägga till anpassade diagram på sina bilder från grunden. Denna artikel förklarar hur man formaterar olika diagram‑entiteter inklusive diagram‑kategorial axel och värdeaxel.

Aspose.Slides för PHP via Java tillhandahåller ett enkelt API för att hantera olika diagram‑entiteter och formatera dem med anpassade värden:

  1. Skapa en instans av klassen Presentation.
  2. Hämta en bilds referens via dess index.
  3. Lägg till ett diagram med standarddata samt någon av önskade typer (i detta exempel använder vi ChartType::LineWithMarkers).
  4. Åtkomst till diagrammets värdeaxel och ange följande egenskaper:
    1. Ställ in Linjeformat för värdeaxelns huvudrutnätlinjer
    2. Ställ in Linjeformat för värdeaxelns delrutnätlinjer
    3. Ställ in Nummerformat för värdeaxeln
    4. Ställ in Min, Max, Huvud‑ och delenheter för värdeaxeln
    5. Ställ in Textegenskaper för värdeaxelns data
    6. Ställ in Titel för värdeaxeln
    7. Ställ in Linjeformat för värdeaxeln
  5. Åtkomst till diagrammets kategorialaxel och ange följande egenskaper:
    1. Ställ in Linjeformat för huvudrutnätlinjer på kategorialaxeln
    2. Ställ in Linjeformat för delrutnätlinjer på kategorialaxeln
    3. Ställ in Textegenskaper för kategorialaxelns data
    4. Ställ in Titel för kategorialaxeln
    5. Ställ in Etikettspositionering för kategorialaxeln
    6. Ställ in Rotationsvinkel för etiketter på kategorialaxeln
  6. Åtkomst till diagrammets legend och ange Textegenskaper för dem
  7. Visa diagramlegender utan att de överlappar diagrammet
  8. Åtkomst till diagrammets sekundära värdeaxel och ange följande egenskaper:
    1. Aktivera den sekundära värdeaxeln
    2. Ställ in Linjeformat för den sekundära värdeaxeln
    3. Ställ in Nummerformat för den sekundära värdeaxeln
    4. Ställ in Min, Max, Huvud‑ och delenheter för den sekundära värdeaxeln
  9. Plotta nu den första diagramserien på den sekundära värdeaxeln
  10. Ange färg för diagrammets bakre väggfyllning
  11. Ange färg för diagrammets plotområdefyllning
  12. Skriv den modifierade presentationen till en PPTX‑fil
  # Skapa en instans av Presentation-klassen
  $pres = new Presentation();
  try {
    # Åtkomst till den första bilden
    $slide = $pres->getSlides()->get_Item(0);
    # Lägger till exempeldiagrammet
    $chart = $slide->getShapes()->addChart(ChartType::LineWithMarkers, 50, 50, 500, 400);
    # Ställer in diagramtitel
    $chart->hasTitle();
    $chart->getChartTitle()->addTextFrameForOverriding("");
    $chartTitle = $chart->getChartTitle()->getTextFrameForOverriding()->getParagraphs()->get_Item(0)->getPortions()->get_Item(0);
    $chartTitle->setText("Sample Chart");
    $chartTitle->getPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
    $chartTitle->getPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->GRAY);
    $chartTitle->getPortionFormat()->setFontHeight(20);
    $chartTitle->getPortionFormat()->setFontBold(NullableBool::True);
    $chartTitle->getPortionFormat()->setFontItalic(NullableBool::True);
    # Ställer in format för huvudrutnätlinjer för värdeaxeln
    $chart->getAxes()->getVerticalAxis()->getMajorGridLinesFormat()->getLine()->getFillFormat()->setFillType(FillType::Solid);
    $chart->getAxes()->getVerticalAxis()->getMajorGridLinesFormat()->getLine()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLUE);
    $chart->getAxes()->getVerticalAxis()->getMajorGridLinesFormat()->getLine()->setWidth(5);
    $chart->getAxes()->getVerticalAxis()->getMajorGridLinesFormat()->getLine()->setDashStyle(LineDashStyle->DashDot);
    # Ställer in format för delrutnätlinjer för värdeaxeln
    $chart->getAxes()->getVerticalAxis()->getMinorGridLinesFormat()->getLine()->getFillFormat()->setFillType(FillType::Solid);
    $chart->getAxes()->getVerticalAxis()->getMinorGridLinesFormat()->getLine()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
    $chart->getAxes()->getVerticalAxis()->getMinorGridLinesFormat()->getLine()->setWidth(3);
    # Ställer in värdeaxelns talformat
    $chart->getAxes()->getVerticalAxis()->isNumberFormatLinkedToSource();
    $chart->getAxes()->getVerticalAxis()->setDisplayUnit(DisplayUnitType::Thousands);
    $chart->getAxes()->getVerticalAxis()->setNumberFormat("0.0%");
    # Ställer in diagrammets maximala och minimala värden
    $chart->getAxes()->getVerticalAxis()->isAutomaticMajorUnit();
    $chart->getAxes()->getVerticalAxis()->isAutomaticMaxValue();
    $chart->getAxes()->getVerticalAxis()->isAutomaticMinorUnit();
    $chart->getAxes()->getVerticalAxis()->isAutomaticMinValue();
    $chart->getAxes()->getVerticalAxis()->setMaxValue(15.0);
    $chart->getAxes()->getVerticalAxis()->setMinValue(-2.0);
    $chart->getAxes()->getVerticalAxis()->setMinorUnit(0.5);
    $chart->getAxes()->getVerticalAxis()->setMajorUnit(2.0);
    # Ställer in textegenskaper för värdeaxeln
    $txtVal = $chart->getAxes()->getVerticalAxis()->getTextFormat()->getPortionFormat();
    $txtVal->setFontBold(NullableBool::True);
    $txtVal->setFontHeight(16);
    $txtVal->setFontItalic(NullableBool::True);
    $txtVal->getFillFormat()->setFillType(FillType::Solid);
    $txtVal->getFillFormat()->getSolidFillColor()->setColor(new java("java.awt.Color", PresetColor->DarkGreen));
    $txtVal->setLatinFont(new FontData("Times New Roman"));
    # Ställer in värdeaxelns titel
    $chart->getAxes()->getVerticalAxis()->hasTitle();
    $chart->getAxes()->getVerticalAxis()->getTitle()->addTextFrameForOverriding("");
    $valtitle = $chart->getAxes()->getVerticalAxis()->getTitle()->getTextFrameForOverriding()->getParagraphs()->get_Item(0)->getPortions()->get_Item(0);
    $valtitle->setText("Primary Axis");
    $valtitle->getPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
    $valtitle->getPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->GRAY);
    $valtitle->getPortionFormat()->setFontHeight(20);
    $valtitle->getPortionFormat()->setFontBold(NullableBool::True);
    $valtitle->getPortionFormat()->setFontItalic(NullableBool::True);
    # Ställer in format för huvudrutnätlinjer för kategorialaxeln
    $chart->getAxes()->getHorizontalAxis()->getMajorGridLinesFormat()->getLine()->getFillFormat()->setFillType(FillType::Solid);
    $chart->getAxes()->getHorizontalAxis()->getMajorGridLinesFormat()->getLine()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->GREEN);
    $chart->getAxes()->getHorizontalAxis()->getMajorGridLinesFormat()->getLine()->setWidth(5);
    # Ställer in format för delrutnätlinjer för kategorialaxeln
    $chart->getAxes()->getHorizontalAxis()->getMinorGridLinesFormat()->getLine()->getFillFormat()->setFillType(FillType::Solid);
    $chart->getAxes()->getHorizontalAxis()->getMinorGridLinesFormat()->getLine()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->YELLOW);
    $chart->getAxes()->getHorizontalAxis()->getMinorGridLinesFormat()->getLine()->setWidth(3);
    # Ställer in textegenskaper för kategorialaxeln
    $txtCat = $chart->getAxes()->getHorizontalAxis()->getTextFormat()->getPortionFormat();
    $txtCat->setFontBold(NullableBool::True);
    $txtCat->setFontHeight(16);
    $txtCat->setFontItalic(NullableBool::True);
    $txtCat->getFillFormat()->setFillType(FillType::Solid);
    $txtCat->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLUE);
    $txtCat->setLatinFont(new FontData("Arial"));
    # Ställer in kategori‑titel
    $chart->getAxes()->getHorizontalAxis()->hasTitle();
    $chart->getAxes()->getHorizontalAxis()->getTitle()->addTextFrameForOverriding("");
    $catTitle = $chart->getAxes()->getHorizontalAxis()->getTitle()->getTextFrameForOverriding()->getParagraphs()->get_Item(0)->getPortions()->get_Item(0);
    $catTitle->setText("Sample Category");
    $catTitle->getPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
    $catTitle->getPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->GRAY);
    $catTitle->getPortionFormat()->setFontHeight(20);
    $catTitle->getPortionFormat()->setFontBold(NullableBool::True);
    $catTitle->getPortionFormat()->setFontItalic(NullableBool::True);
    # Ställer in position för kategori‑axelns etiketter
    $chart->getAxes()->getHorizontalAxis()->setTickLabelPosition(TickLabelPositionType::Low);
    # Ställer in rotationsvinkel för kategori‑axelns etiketter
    $chart->getAxes()->getHorizontalAxis()->setTickLabelRotationAngle(45);
    # Ställer in textegenskaper för legender
    $txtleg = $chart->getLegend()->getTextFormat()->getPortionFormat();
    $txtleg->setFontBold(NullableBool::True);
    $txtleg->setFontHeight(16);
    $txtleg->setFontItalic(NullableBool::True);
    $txtleg->getFillFormat()->setFillType(FillType::Solid);
    $txtleg->getFillFormat()->getSolidFillColor()->setColor(new java("java.awt.Color", PresetColor->DarkRed));
    # Ställ in att visa diagramlegender utan att överlappa diagrammet
    $chart->getLegend()->setOverlay(true);
    # chart.ChartData.Series[0].PlotOnSecondAxis=true;
    $chart->getChartData()->getSeries()->get_Item(0)->setPlotOnSecondAxis(true);
    # Ställer in sekundär värdeaxel
    $chart->getAxes()->getSecondaryVerticalAxis()->isVisible();
    $chart->getAxes()->getSecondaryVerticalAxis()->getFormat()->getLine()->setStyle(LineStyle->ThickBetweenThin);
    $chart->getAxes()->getSecondaryVerticalAxis()->getFormat()->getLine()->setWidth(20);
    # Ställer in nummerformat för sekundär värdeaxel
    $chart->getAxes()->getSecondaryVerticalAxis()->isNumberFormatLinkedToSource();
    $chart->getAxes()->getSecondaryVerticalAxis()->setDisplayUnit(DisplayUnitType::Hundreds);
    $chart->getAxes()->getSecondaryVerticalAxis()->setNumberFormat("0.0%");
    # Ställer in diagrammets maximala och minimala värden
    $chart->getAxes()->getSecondaryVerticalAxis()->isAutomaticMajorUnit();
    $chart->getAxes()->getSecondaryVerticalAxis()->isAutomaticMaxValue();
    $chart->getAxes()->getSecondaryVerticalAxis()->isAutomaticMinorUnit();
    $chart->getAxes()->getSecondaryVerticalAxis()->isAutomaticMinValue();
    $chart->getAxes()->getSecondaryVerticalAxis()->setMaxValue(20.0);
    $chart->getAxes()->getSecondaryVerticalAxis()->setMinValue(-5.0);
    $chart->getAxes()->getSecondaryVerticalAxis()->setMinorUnit(0.5);
    $chart->getAxes()->getSecondaryVerticalAxis()->setMajorUnit(2.0);
    # Ställer in diagrammets bakre väggfärg
    $chart->getBackWall()->setThickness(1);
    $chart->getBackWall()->getFormat()->getFill()->setFillType(FillType::Solid);
    $chart->getBackWall()->getFormat()->getFill()->getSolidFillColor()->setColor(java("java.awt.Color")->ORANGE);
    $chart->getFloor()->getFormat()->getFill()->setFillType(FillType::Solid);
    $chart->getFloor()->getFormat()->getFill()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
    # Ställer in plotområdets färg
    $chart->getPlotArea()->getFormat()->getFill()->setFillType(FillType::Solid);
    $chart->getPlotArea()->getFormat()->getFill()->getSolidFillColor()->setColor(new java("java.awt.Color", PresetColor->LightCyan));
    # Spara presentationen
    $pres->save("FormattedChart.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Ange teckensnittsegenskaper för ett diagram

Aspose.Slides för PHP via Java erbjuder stöd för att ange teckensnittsegenskaper för diagrammet. Följ stegen nedan för att ange teckensnittsegenskaper för diagrammet.

  • Instansiera objektet för klassen Presentation.
  • Lägg till ett diagram på bilden.
  • Ange teckensnittshöjd.
  • Spara den modifierade presentationen.

Nedan följer ett exempel.

  # Skapa en instans av Presentation-klassen
  $pres = new Presentation();
  try {
    $chart = $pres->getSlides()->get_Item(0)->getShapes()->addChart(ChartType::ClusteredColumn, 100, 100, 500, 400);
    $chart->getTextFormat()->getPortionFormat()->setFontHeight(20);
    $chart->getChartData()->getSeries()->get_Item(0)->getLabels()->getDefaultDataLabelFormat()->setShowValue(true);
    $pres->save("FontPropertiesForChart.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Ange numeriskt format

Aspose.Slides för PHP via Java tillhandahåller ett enkelt API för att hantera diagramdatats format:

  1. Skapa en instans av klassen Presentation.
  2. Hämta en bilds referens via dess index.
  3. Lägg till ett diagram med standarddata samt någon av önskade typer (detta exempel använder ChartType::ClusteredColumn).
  4. Ange det fördefinierade nummerformatet från de möjliga fördefinierade värdena.
  5. Gå igenom diagramdatacellerna i varje diagramserie och ange diagramdatans nummerformat.
  6. Spara presentationen.
  7. Ange det anpassade nummerformatet.
  8. Gå igenom diagramdatacellerna i varje diagramserie och ange ett annat nummerformat för diagramdata.
  9. Spara presentationen.
  # Skapa en instans av Presentation-klassen
  $pres = new Presentation();
  try {
    # Åtkomst till den första presentationsbilden
    $slide = $pres->getSlides()->get_Item(0);
    # Lägger till ett standardklustrat kolumndiagram
    $chart = $slide->getShapes()->addChart(ChartType::ClusteredColumn, 50, 50, 500, 400);
    # Åtkomst till diagramseriens samling
    $series = $chart->getChartData()->getSeries();
    # Gå igenom varje diagramserie
    foreach($series as $ser) {
      # Gå igenom varje datacell i serien
      foreach($ser->getDataPoints() as $cell) {
        # Ställer in talformatet
        $cell->getValue()->getAsCell()->setPresetNumberFormat(10);// 0,00%
      }
    }
    # Sparar presentationen
    $pres->save("PresetNumberFormat.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

De möjliga fördefinierade nummerformatvärdena tillsammans med deras index som kan användas visas nedan:

0 General
1 0
2 0.00
3 #,##0
4 #,##0.00
5 $#,##0;$-#,##0
6 $#,##0;Red$-#,##0
7 $#,##0.00;$-#,##0.00
8 $#,##0.00;Red$-#,##0.00
9 0%
10 0.00%
11 0.00E+00
12 # ?/?
13 # /
14 m/d/yy
15 d-mmm-yy
16 d-mmm
17 mmm-yy
18 h:mm AM/PM
19 h:mm:ss AM/PM
20 h:mm
21 h:mm:ss
22 m/d/yy h:mm
37 #,##0;-#,##0
38 #,##0;Red-#,##0
39 #,##0.00;-#,##0.00
40 #,##0.00;Red-#,##0.00
41 _ * #,##0_ ;_ * “_ ;_ @_
42 _ $* #,##0_ ;_ $* “_ ;_ @_
43 _ * #,##0.00_ ;_ * “??_ ;_ @_
44 _ $* #,##0.00_ ;_ $* “??_ ;_ @_
45 mm:ss
46 h:mm:ss
47 mm:ss.0
48 ##0.0E+00
49 @

Ange rundade kanter för diagramområde

Aspose.Slides för PHP via Java erbjuder stöd för att ange diagramområde. Metoderna hasRoundedCorners och setRoundedCorners har lagts till i klassen Chart.

  1. Instansiera objektet för klassen Presentation.
  2. Lägg till ett diagram på bilden.
  3. Ange fyllningstyp och fyllningsfärg för diagrammet
  4. Ställ in egenskapen för rundade hörn till True.
  5. Spara den modifierade presentationen.

Nedan följer ett exempel.

  # Skapa en instans av Presentation-klassen
  $pres = new Presentation();
  try {
    $slide = $pres->getSlides()->get_Item(0);
    $chart = $slide->getShapes()->addChart(ChartType::ClusteredColumn, 20, 100, 600, 400);
    $chart->getLineFormat()->getFillFormat()->setFillType(FillType::Solid);
    $chart->getLineFormat()->setStyle(LineStyle->Single);
    $chart->setRoundedCorners(true);
    $pres->save("output.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

FAQ

Kan jag ange halvtransparenta fyllningar för kolumner/områden samtidigt som kanten förblir opak?

Ja. Fyllningens transparens och konturen konfigureras separat. Detta är användbart för att förbättra läsbarheten i rutnätet och data i täta visualiseringar.

Hur kan jag hantera datalabels när de överlappar?

Minska teckensnittsstorleken, inaktivera icke‑nödvändiga labelkomponenter (t.ex. kategorier), justera etikettens förskjutning/position, visa etiketter endast för valda punkter vid behov, eller byt format till “värde + legend”.

Kan jag applicera gradient‑ eller mönsterfyllningar på serier?

Ja. Både solida och gradient‑/mönsterfyllningar är vanligtvis tillgängliga. I praktiken bör gradienter användas sparsamt och undvika kombinationer som minskar kontrasten mot rutnätet och texten.