Hạn chế và khác biệt API

Khác biệt API công khai

Danh sách này, sử dụng các đoạn mã mẫu, minh họa một số khác biệt giữa Aspose.Slides for Java và Aspose.Slides for PHP thông qua API Java.

Nhập thư viện (So sánh gói)

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;

Khởi tạo một bản thuyết trình mới

Aspose.Slides for Java

Presentation presentation = new Presentation();

Aspose.Slides for PHP via Java

$presentation = new Presentation();

Enum hoặc Hằng số

Aspose.Slides for Java

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

Aspose.Slides for PHP via Java

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

Ví dụ

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
    {
        // Khởi tạo một đối tượng Presentation đại diện cho tệp trình chiếu
        Presentation pres = new Presentation();
        try
        {
            // Lấy slide đầu tiên
            ISlide slide = pres.getSlides().get_Item(0);

            // Thêm một hình tự động với loại được đặt thành đường thẳng
            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
{
    // Lấy slide đầu tiên
    $slide = $pres->getSlides()->get_Item(0);

    // Thêm một hình tự động với loại được đặt thành đường thẳng
    $slide->getShapes()->addAutoShape(ShapeType::Line, 50, 150, 300, 0);
    $pres->save("NewPresentation_out.pptx", SaveFormat::Pptx);
}
finally
{
    if (!java_is_null($pres)) $pres->dispose();
}
?>

Các hạn chế khác của Aspose.Slides for PHP thông qua API Java so với Aspose.Slides for Java API

Không gian tên Aspose.Slides và các lớp Java mà chúng sử dụng là các wrapper được tạo bởi PhpJavaBridge trên các lớp Java cùng tên trong gói com.aspose.slides.

1. Đóng gói Tham số và Đối số Java

Các tham số và đối số mà chúng trả về và nhận vào là các wrapper dựa trên các lớp Java có cùng tên. Chỉ các chuỗi và kiểu số được chuyển đổi tự động. Mảng, collection, byte và boolean không được chuyển đổi.

Một lỗi thường gặp:

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

2. Kế thừa Lớp Java và Toán tử instanceof

Bạn không thể kế thừa một lớp Java từ một lớp PHP. Để khắc phục, bạn có thể áp dụng composition khi cần.
Toán tử instanceof chỉ hoạt động với một lớp cụ thể. Nó không hoạt động với interface hoặc lớp cha của một lớp.

workaround

3. Mảng Java KHÔNG phải là Mảng PHP

Tạo mảng Java trong 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. Độ dài của Mảng Java

$data->length; - không hoạt động

cách khắc phục

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

5. Phương thức Java Files.readAllBytes

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

cách khắc phục

$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. Phương thức Java Files.write

Files->write(new File($path)->toPath(), $fontData, StandardOpenOption::CREATE); - does NOT work

cách khắc phục

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