Limitations et différences d'API

Différences d’API publiques

Cette liste, en utilisant des extraits de code d’exemple, démontre certaines différences entre Aspose.Slides for Java et Aspose.Slides for PHP via les API Java.

Importation de la bibliothèque (Comparaison des packages)

Aspose.Slides for Java

import com.aspose.slides.*;

Aspose.Slides for PHP via Java

require_once("Java.inc");
require_once("lib/aspose.slides.php");

use aspose\sldes;
use aspose\sldes\Presentation;

Instanciation d’une nouvelle présentation

Aspose.Slides for Java

Presentation presentation = new Presentation();

Aspose.Slides for PHP via Java

$presentation = new Presentation();

Énumérations ou constantes

Aspose.Slides for Java

arc2.getLineFormat().setDashStyle(MsoLineDashStyle.SOLID);

Aspose.Slides for PHP via Java

$arc2->getLineFormat()->setDashStyle(slides\MsoLineDashStyle::SOLID);

Exemple

Aspose.Slides for Java

import com.aspose.slides.ISlide;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
import com.aspose.slides.ShapeType;

public class Test
{
    public static void main(String[] args) throws Exception
    {
        // Instancie un objet Presentation qui représente un fichier de présentation
        Presentation pres = new Presentation();
        try
        {
            // Obtient la première diapositive
            ISlide slide = pres.getSlides().get_Item(0);

            // Ajoute une forme auto de type ligne
            slide.getShapes().addAutoShape(ShapeType.Line, 50, 150, 300, 0);
            pres.save("NewPresentation_out.pptx", SaveFormat.Pptx);
        }
        finally
        {
            if (pres != null) pres.dispose();
        }
    }
}

Aspose.Slides for PHP via Java

<?php
require_once("Java.inc");
require_once("lib/aspose.slides.php");

use aspose\slides;
use aspose\slides\Presentation;
use aspose\slides\ShapeType;
use aspose\slides\SaveFormat;

$pres = new Presentation();
try
{
    // Obtient la première diapositive
    $slide = $pres->getSlides()->get_Item(0);

    // Ajoute une forme auto de type ligne
    $slide->getShapes()->addAutoShape(ShapeType::Line, 50, 150, 300, 0);
    $pres->save("NewPresentation_out.pptx", SaveFormat::Pptx);
}
finally
{
    if (!java_is_null($pres)) $pres->dispose();
}
?>

Autres limitations d’Aspose.Slides pour PHP via l’API Java comparées à l’API Java d’Aspose.Slides

Les espaces de noms Aspose.Slides et les classes Java qu’ils utilisent sont des wrappers créés par PhpJavaBridge au-dessus des classes Java portant le même nom du package com.aspose.slides.

1. Encapsulation des paramètres et arguments Java

Les paramètres et arguments qu’ils renvoient et acceptent sont des wrappers au-dessus des classes Java portant les mêmes noms. Seules les chaînes et les types numériques sont convertis automatiquement. Les tableaux, collections, octets et booléens ne sont pas convertis.

Une erreur courante :

if ($node->isAssistant()) - wrong!
if (java_values($node->isAssistant())) - correct!

2. Hériter d’une classe Java et opérateur instanceof

Vous ne pouvez pas étendre une classe Java depuis une classe PHP. Comme solution de contournement, vous pouvez implémenter la composition si nécessaire.
L’opérateur instanceof ne fonctionne que pour une classe concrète. Il ne fonctionne pas pour l’interface ou la classe parente d’une classe.

workaround

3. Un tableau Java n’est PAS un tableau PHP

Création d’un tableau Java en PHP :

$Array = new JavaClass("java.lang.reflect.Array");
$Integer = new JavaClass("java.lang.Integer");
$IntegerArray = $Array->newInstance($Integer, 2);
$IntegerArray[0] = 1;
$IntegerArray[1] = 0;

4. Longueur d’un tableau Java

$data->length; - does NOT work

solution de contournement

$Array = new JavaClass("java.lang.reflect.Array");
$Array->getLength($data);

5. La méthode Java Files.readAllBytes

$htmlBytes = Files->readAllBytes(Paths->get("embedOle.html")); - does NOT work

solution de contournement

$file = new Java("java.io.File", "embedOle.html");
$Array = new JavaClass("java.lang.reflect.Array");
$Byte = new JavaClass("java.lang.Byte");
$htmlBytes = $Array->newInstance($Byte, $Array->getLength($file));
try {
    $dis = new Java("java.io.DataInputStream", new Java("java.io.FileInputStream", $file));
    $dis->readFully($htmlBytes);
} finally {
    if (!java_is_null($dis)) $dis->close();
}

6. La méthode Java Files.write

Files->write(new File($path)->toPath(), $fontData, StandardOpenOption::CREATE); - ne fonctionne pas

solution de contournement

$fstr = new Java("java.io.FileOutputStream", $path);
$Array = new java_class("java.lang.reflect.Array");
try {
    $fstr->write($fontData, 0, $Array->getLength($fontData));
} finally {
	$fstr->close();
}