دریافت حدود پاراگراف از ارائهها در PHP
بررسی کلی
این مقاله نحوه دریافت حدود، اندازه و مختصات پاراگرافها و بخشهای متنی در Aspose.Slides را توضیح میدهد. نشان میدهد چگونه با استفاده از getRect() مستطیل یک پاراگراف را در یک TextFrame دریافت کنید، چگونه مختصات پاراگراف و بخش را در چارچوب متنی سلول جدول دریافت کنید، و جزئیات مهمی مانند واحدهای اندازهگیری، تأثیر شکست متن بر حدود، تبدیل پیکسل و مقادیر قالببندی مؤثر پاراگراف را برجسته میکند.
دریافت مختصات پاراگراف و بخش در یک TextFrame
با استفاده از Aspose.Slides برای PHP از طریق Java، توسعهدهندگان اکنون میتوانند مختصات مستطیلی پاراگراف را در مجموعه پاراگرافهای یک TextFrame دریافت کنند. همچنین امکان دریافت مختصات بخش در مجموعه بخشهای یک پاراگراف را فراهم میکند. در این بخش، با کمک یک مثال نشان خواهیم داد چگونه مختصات مستطیلی پاراگراف را همراه با موقعیت بخش داخل پاراگراف به دست آوریم.
$shape = $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0);
$textFrame = $shape->getTextFrame();
foreach($textFrame->getParagraphs() as $paragraph) {
foreach($paragraph->getPortions() as $portion) {
$point = $portion->getCoordinates();
}
}
دریافت مختصات مستطیلی یک پاراگراف
با استفاده از روش getRect() توسعهدهندگان میتوانند مستطیل حدود پاراگراف را دریافت کنند.
$pres = new Presentation("HelloWorld.pptx");
try {
$shape = $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0);
$textFrame = $shape->getTextFrame();
$rect = $textFrame->getParagraphs()->get_Item(0)->getRect();
echo("X: " . $rect->$x . " Y: " . $rect->$y . " Width: " . $rect->$width . " Height: " . $rect->$height);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
دریافت اندازه پاراگراف و بخش داخل TextFrame سلول جدول
برای دریافت اندازه و مختصات Portion یا Paragraph در یک TextFrame سلول جدول، میتوانید از روشهای Portion::getRect و Paragraph::getRect استفاده کنید.
این کد نمونه عملیات توصیف شده را نشان میدهد:
$pres = new Presentation("source.pptx");
try {
$tbl = $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0);
$cell = $tbl->getRows()->get_Item(1)->get_Item(1);
$x = $tbl->getX() + $tbl->getRows()->get_Item(1)->get_Item(1)->getOffsetX();
$y = $tbl->getY() + $tbl->getRows()->get_Item(1)->get_Item(1)->getOffsetY();
foreach($cell->getTextFrame()->getParagraphs() as $para) {
if ($para->getText()->equals("")) {
continue;
}
$rect = $para->getRect();
$shape = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, $rect->getX() + $x, $rect->getY() + $y, $rect->getWidth(), $rect->getHeight());
$shape->getFillFormat()->setFillType(FillType::NoFill);
$shape->getLineFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->YELLOW);
$shape->getLineFormat()->getFillFormat()->setFillType(FillType::Solid);
foreach($para->getPortions() as $portion) {
if ($portion->getText()->contains("0")) {
$rect = $portion->getRect();
$shape = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, $rect->getX() + $x, $rect->getY() + $y, $rect->getWidth(), $rect->getHeight());
$shape->getFillFormat()->setFillType(FillType::NoFill);
}
}
}
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
سوالات متداول
مختصات برگشتگرفتهشده برای پاراگراف و بخشهای متنی بر حسب چه واحدی اندازهگیری میشوند؟
در واحد نقطه (points) است، به طوری که 1 اینچ = 72 نقطه. این برای تمام مختصات و ابعاد روی اسلاید اعمال میشود.
آیا شکسته شدن متن (wrapping) بر حدود پاراگراف تاثیر میگذارد؟
بله. اگر wrapping در TextFrame فعال باشد، متن برای متناسب شدن با عرض ناحیه شکسته میشود که باعث تغییر حدود واقعی پاراگراف میشود.
آیا میتوان مختصات پاراگراف را بهطور قابل اعتماد به پیکسلها در تصویر خروجی نگاشت؟
بله. برای تبدیل نقطه به پیکسل از فرمول استفاده کنید: pixels = points × (DPI / 72). نتیجه بسته به DPI انتخابشده برای رندر/خروجی متفاوت است.
چگونه میتوان پارامترهای قالببندی «موثر» پاراگراف را با در نظر گرفتن وراثت سبک دریافت کرد؟
از ساختار داده قالببندی مؤثر پاراگراف استفاده کنید؛ این ساختار مقادیر نهایی یکپارچه برای تورفتگیها، فاصلهها، بسته شدن متن، RTL و موارد دیگر را بر میگرداند.