PDA

View Full Version : سوال: رسم نمودار در php



asma69
یک شنبه 28 تیر 1394, 02:53 صبح
سلام..خسته نباشین...
من برای رسم نمودار در php میخوام از کتابخانه libchart استفاده کنم....چون راحت می تونم مقادیرش رو متناسب با مقادیر خودم تغییر بدم..

اما مشکل اینجاست که این کتابخانه زبان فارسی رو به شکل علامت نشون میده و فقط مقادیر انگلیسی رو بدرستی روی نمودار نمایش میده...
من این نسخش رو از اینترنت دانلود کردم....libchart-1.3

اگه کسی با این کتابخانه کار کرده، ممنون میشم اگه راهنماییم کنین و بگین که چکار کنم تا مقادیر فارسی رو هم روی نمودار نمایش بده...

Keramatifar
یک شنبه 28 تیر 1394, 04:18 صبح
دوست عزیز
مشکل عدم نمایش صحیح مقادیر فارسی (یا کلا یونیکد) بیشتر به Encoding فایل ذخیره شده شما، مقدار charset در المنت head صفحه و تنظیمات یونیکد در کوئری های دیتابیس مربوط می شود
در وب و بخصوص Open Source های Native دست برنامه نویس برای اینگونه تغییرات خیلی باز است
اگر شما با این مشکل در یک برنامه ویندوزی برخورد کنید که بعد از کامپایل تبدیل به DLL و EXE شده است، باز هم روش هایی برای افزودن ساپورت فارسی وجود دارد، دیگه چه رسد به کتابخانه های اپن سورس PHP
البته به زودی ابزارهای برنامه نویسی PHP که یکی از آنها همین نمودارها و چارت های مختلف می باشد، توسط مجموعه ParsPHP (http://www.parsphp.org) (زیرمجموعه تخصصی اپن سورس برنامه نویس) ارائه می شود و این مشکلات رو بصورت کامل برطرف خواهد نمود

asma69
یک شنبه 28 تیر 1394, 17:02 عصر
دوست عزیز
مشکل عدم نمایش صحیح مقادیر فارسی (یا کلا یونیکد) بیشتر به Encoding فایل ذخیره شده شما، مقدار charset در المنت head صفحه و تنظیمات یونیکد در کوئری های دیتابیس مربوط می شود
در وب و بخصوص Open Source های Native دست برنامه نویس برای اینگونه تغییرات خیلی باز است
اگر شما با این مشکل در یک برنامه ویندوزی برخورد کنید که بعد از کامپایل تبدیل به DLL و EXE شده است، باز هم روش هایی برای افزودن ساپورت فارسی وجود دارد، دیگه چه رسد به کتابخانه های اپن سورس PHP
البته به زودی ابزارهای برنامه نویسی PHP که یکی از آنها همین نمودارها و چارت های مختلف می باشد، توسط مجموعه ParsPHP (http://www.parsphp.org) (زیرمجموعه تخصصی اپن سورس برنامه نویس) ارائه می شود و این مشکلات رو بصورت کامل برطرف خواهد نمود



سلام..ممنون از راهنماییتون..
من utf8 رو به عنوان یونیکد به اول صفحه اضافه کرده بودم ولی دیگه نمودار رو نشون نمیداد....برای همون گفتم شاید نوع نمودار جوری باشه که زبان فارسی رو قبول نمی کنه..
حالا بازم دوباره امتحان می کنم..

در ضمن برای لینکی که قرار دادید ممنونم..
تشکر

us1234
یک شنبه 28 تیر 1394, 17:21 عصر
سلام..خسته نباشین...
من برای رسم نمودار در php میخوام از کتابخانه libchart استفاده کنم....چون راحت می تونم مقادیرش رو متناسب با مقادیر خودم تغییر بدم..

اما مشکل اینجاست که این کتابخانه زبان فارسی رو به شکل علامت نشون میده و فقط مقادیر انگلیسی رو بدرستی روی نمودار نمایش میده...
من این نسخش رو از اینترنت دانلود کردم....libchart-1.3

اگه کسی با این کتابخانه کار کرده، ممنون میشم اگه راهنماییم کنین و بگین که چکار کنم تا مقادیر فارسی رو هم روی نمودار نمایش بده...

دلیل خاصی دارید که از رسم نمودار سمت سرور استفاده می کنید ؟

مثلا با کتابخانه جاوا اسکریپت jqplot به سادگی میتوانید با کمک Jquery نمودار رسم کنید ...

asma69
یک شنبه 28 تیر 1394, 17:42 عصر
دلیل خاصی دارید که از رسم نمودار سمت سرور استفاده می کنید ؟

مثلا با کتابخانه جاوا اسکریپت jqplot به سادگی میتوانید با کمک Jquery نمودار رسم کنید ...

سلام...اره...من خیلی واسه نمودار سرچ کردم......خیلی نمونه نمودار هم دانلود کردم و کدهاش رو بررسی کردم.....این کتابخانه خیلی کار کردن باهاش راحت بود و به راحتی می تونم مقادیرش رو متناسب با مقادیر داخل دیتابیس تغییر و روی نمودار نمایش بدم..., و همچنین نمونه های نمودار خوبی داره...
ولی تنها مشکلش همین زبانش هست که فارسی رو نشون نمیده...


اره نمودارای کتابخانه jqplot که شما گفتین رو هم دانلود کردم و خیلی خوب و متنوع بود...اما کداش جاوا اسکریپت بود و نمی تونستم به راحتی بگم مقادیر دیتابیس رو روی نمودار نمایش بده..

اما کتابخانه libchart کداش php هست و خیلی راحت می تونم کدهاش رو با کدهای php خودم ترکیب و با دیتابیس ارتباط برقرار کنم......منتها زبان فارسی رو نشون نمیده..

اینم تصویر نموداره...


133388

این جا من پرداخت های موفق و ناموفق رو در یک بازه زمانی گفتم نمایش بده....تاریخام فارسی بوده و همونطور که می بینید به شکل مربع نمایش میده و چندجا دیگشم همینطوریه...

ممنون میشم اگه در این زمینه راهنماییم کنین.



راستی در زمان تغییر مقادیر لاتین به فارسی در بعضی صفحه های کتابخانه هم با پیغامی که در تصویر زیر میبینید مواجه شدم.

133392

تشگر

Master_Power
یک شنبه 28 تیر 1394, 18:50 عصر
دوست عزیز صفحه ای که توش نمودار نشون داده میشه را با فرمت utf-8 whit out BOOM ذخیره کنید مشکلتون حل میشه

asma69
یک شنبه 28 تیر 1394, 19:26 عصر
دوست عزیز صفحه ای که توش نمودار نشون داده میشه را با فرمت utf-8 whit out BOOM ذخیره کنید مشکلتون حل میشه

سلام..ممنون از راهنماییتون...
کاری که گفتین رو انجام دادم ولی دیگه نمودار رو نشون نمیده..

من یک فایل text.php تو کتابخانه پیدا کردم....بازش کردم و دیدم توش به دوتا فونت لاتین ارجاع داده شده......من تو همون مسیرش تو تا فونت فارسی جایگزین کردم و به اون فونت ارجاع دادم....
الان فارسی رو نشون میده اما به هم ریخته و حروف رو جدا جدا نشون میده و دیگه لاتین رو هم نشون نمیده .....و ممکنه گاهی بخوایم ترکیب فارسی و لاتین رو در نمودار نمایش بدیم که بازم مشکله....
وفکر می کنم این دوتا مشکل از طریق همین صفحه حل شه......اما خودم زیاد متوجه نمیشم ک چطوری کدهای این صفحه رو تغییر بدم...
کدها رو در انتها قرار میدم..ممنون میشم اگه کسی راهنماییم کنه...

الان در حالتی که فونت لاتین هست تصویر نمودار به شکل زیره..

133393
همان طور که در تصویر می بینید....فونت فارسی رو مربع و فونت لاتین رو به درستی نمایش میده....

اما وقتی نوع فونت رو در مسیرش عوض کردم و تو صفحه به فونت فارسی ارجاع دادم....تصویر نمودار به شکل زیر شد..

133394

الان فونت لاتین رو مربع نشون میده و فونت فارسی رو نشون میده اما به هم ریخته...

کد صفحه Text رو در زیر قرار میدم....





<?php class Text { public $HORIZONTAL_LEFT_ALIGN = 1; public $HORIZONTAL_CENTER_ALIGN = 2; public $HORIZONTAL_RIGHT_ALIGN = 4; public $VERTICAL_TOP_ALIGN = 8; public $VERTICAL_CENTER_ALIGN = 16; public $VERTICAL_BOTTOM_ALIGN = 32;
/** * Creates a new text drawing helper. */ public function Text() { $baseDir = dirname(__FILE__) . "/../../../"; // Free low-res fonts based on Bitstream Vera <http://dejavu.sourceforge.net/wiki/> $this->fontCondensed = $baseDir . "fonts/DejaVuSansCondensed.ttf"; $this->fontCondensedBold = $baseDir . "fonts/DejaVuSansCondensed-Bold.ttf"; }
/** * Print text. * * @param Image GD image * @param integer text coordinate (x) * @param integer text coordinate (y) * @param Color text color * @param string text value * @param string font file name * @param bitfield text alignment */ public function printText($img, $px, $py, $color, $text, $fontFileName, $align = 0) { if (!($align & $this->HORIZONTAL_CENTER_ALIGN) && !($align & $this->HORIZONTAL_RIGHT_ALIGN)) { $align |= $this->HORIZONTAL_LEFT_ALIGN; }
if (!($align & $this->VERTICAL_CENTER_ALIGN) && !($align & $this->VERTICAL_BOTTOM_ALIGN)) { $align |= $this->VERTICAL_TOP_ALIGN; }
$fontSize = 8; $lineSpacing = 1;
list ($llx, $lly, $lrx, $lry, $urx, $ury, $ulx, $uly) = imageftbbox($fontSize, 0, $fontFileName, $text, array("linespacing" => $lineSpacing));
$textWidth = $lrx - $llx; $textHeight = $lry - $ury;
$angle = 0;
if ($align & $this->HORIZONTAL_CENTER_ALIGN) { $px -= $textWidth / 2; }
if ($align & $this->HORIZONTAL_RIGHT_ALIGN) { $px -= $textWidth; }
if ($align & $this->VERTICAL_CENTER_ALIGN) { $py += $textHeight / 2; }
if ($align & $this->VERTICAL_TOP_ALIGN) { $py += $textHeight; }
imagettftext($img, $fontSize, $angle, $px, $py, $color->getColor($img), $fontFileName, $text); } /** * Print text centered horizontally on the image. * * @param Image GD image * @param integer text coordinate (y) * @param Color text color * @param string text value * @param string font file name */ public function printCentered($img, $py, $color, $text, $fontFileName) { $this->printText($img, imagesx($img) / 2, $py, $color, $text, $fontFileName, $this->HORIZONTAL_CENTER_ALIGN | $this->VERTICAL_CENTER_ALIGN); }
/** * Print text in diagonal. * * @param Image GD image * @param integer text coordinate (x) * @param integer text coordinate (y) * @param Color text color * @param string text value */ public function printDiagonal($img, $px, $py, $color, $text) { $fontSize = 8; $fontFileName = $this->fontCondensed;
$lineSpacing = 1;
list ($lx, $ly, $rx, $ry) = imageftbbox($fontSize, 0, $fontFileName, $text, array("linespacing" => $lineSpacing)); $textWidth = $rx - $lx;
$angle = -45;
imagettftext($img, $fontSize, $angle, $px, $py, $color->getColor($img), $fontFileName, $text); } }?>



البته کدها یکم به هم ریخته شده این جا..
به طور نمونه کد زیر هم کد همین نمودار دایره ای بالا هست.....





<?php include "../libchart/classes/libchart.php";
header("Content-type: image/png");
$chart = new PieChart(500, 300);
$dataSet = new XYDataSet(); $dataSet->addPoint(new Point(" ok پرداخت موفق", 50)); $dataSet->addPoint(new Point(" no پرداخت ناموفق", 75)); $chart->setDataSet($dataSet);
$chart->setTitle("وضعیت پرداخت"); $chart->render();?>




ممنون میشم راهنماییم کنید..

Master_Power
یک شنبه 28 تیر 1394, 19:31 عصر
اوه اوه از DejaVuSansCondensed استفاده میکنه

پس کار سخت شد

یه کار میگم بکن
تو نت جستجو کن تبدیل فونت فارسی برای کتابخانه های pdf و یا تبدیل فونت فارسی برای DejaVuSansCondensed

همینجوری نمیتونی بهش فونت بدی.
موفق باشی:خجالت:

asma69
یک شنبه 28 تیر 1394, 19:44 عصر
اوه اوه از DejaVuSansCondensed استفاده میکنه

پس کار سخت شد

یه کار میگم بکن
تو نت جستجو کن تبدیل فونت فارسی برای کتابخانه های pdf و یا تبدیل فونت فارسی برای DejaVuSansCondensed

همینجوری نمیتونی بهش فونت بدی.
موفق باشی:خجالت:


اها...ممنون از راهنماییتون....باشه سرچ می کنم ببینم چی پیدا می کنم.....
ممنون..

asma69
یک شنبه 28 تیر 1394, 22:52 عصر
اوه اوه از DejaVuSansCondensed استفاده میکنه

پس کار سخت شد

یه کار میگم بکن
تو نت جستجو کن تبدیل فونت فارسی برای کتابخانه های pdf و یا تبدیل فونت فارسی برای DejaVuSansCondensed

همینجوری نمیتونی بهش فونت بدی.
موفق باشی:خجالت:


سلام..ممنون از راهنماییتون..
من راجب مطلبی که گفتین سرچ کردم ولی نتیجه ای برام نشون نداد..
خب الان فونت فارسی رو داره میخونه....منتها به هم ریختس.....
به نظرم ترازبندی هایی که تو کدای صفحه text وجود داره مشکل داره که نمی تونه درست و مرتب نمایش بده....
ممنون میشم اگه بیشتر راهنماییم کنید.

Amir9891
دوشنبه 29 تیر 1394, 12:04 عصر
سلام

عزیز، کار سرور ساید رو بی خیال شو چون هم مشکل تره هم نتیجه میشه نمودار به صورت یک عکس... در واقع این توابعی که شما داری استفاده می کنی یک عکس رو به عنوان نمودار تولید می کنه... به نظر شخصی من این کار حتی اگر بازدید شما بالا باشه و نمودارها هم متغیر باشند و کش نشوند مشکل بالارفتن لود سرور رو هم به وجود میاره...

از تابع جاوا اسکریپت http://chartjs.org استفاده کن... رایگانه... استفاده ازش هم خیلی ساده است... تعدادی سمپل هم داره که نگاه کنی متوجه میشی برای هر نوع نمودار (که به نظر میاد مورد استفاده شما نمودار Line یا Bar ست) چطور اطلاعات رو باید وارد کنی... قسمت Doc. کاملی هم داره و توضیحات تکمیلی رو میتونی اونجا ببینی...

Amir9891
دوشنبه 29 تیر 1394, 12:13 عصر
این هم یک نمونه از چارتهایی که خودم با استفاده از همون chartjs.org توی پروژه هام تولید کردم...
مقدار دهی هم با استفاده از php انجام گرفته...

133410

yii2dev
دوشنبه 29 تیر 1394, 15:39 عصر
دوست عزیز
مشکل عدم نمایش صحیح مقادیر فارسی (یا کلا یونیکد) بیشتر به Encoding فایل ذخیره شده شما، مقدار charset در المنت head صفحه و تنظیمات یونیکد در کوئری های دیتابیس مربوط می شود
در وب و بخصوص Open Source های Native دست برنامه نویس برای اینگونه تغییرات خیلی باز است
اگر شما با این مشکل در یک برنامه ویندوزی برخورد کنید که بعد از کامپایل تبدیل به DLL و EXE شده است، باز هم روش هایی برای افزودن ساپورت فارسی وجود دارد، دیگه چه رسد به کتابخانه های اپن سورس PHP
البته به زودی ابزارهای برنامه نویسی PHP که یکی از آنها همین نمودارها و چارت های مختلف می باشد، توسط مجموعه ParsPHP (http://www.parsphp.org) (زیرمجموعه تخصصی اپن سورس برنامه نویس) ارائه می شود و این مشکلات رو بصورت کامل برطرف خواهد نمود

اینکه هیچ کدوم از لینکاش کار نمیکنه. همش # هست. درمورد سؤال استارتر هم بنظر منم بهتره با جاوا اسکریپت کار کنی چون فشار به سرور کمتر میشه. داده ها رو از دیتابیس بخون و کد جاوا اسکریپت نمودار رو با echo تولید کن و بفرست واسه کلاینت تا نشون بده. اینطوری چون اعداد و ارقام و اسامی ستونها و غیره بصورت متن توی سورس کد هستن، برای سئوی سایتتم بهتره

asma69
دوشنبه 29 تیر 1394, 21:40 عصر
اینکه هیچ کدوم از لینکاش کار نمیکنه. همش # هست. درمورد سؤال استارتر هم بنظر منم بهتره با جاوا اسکریپت کار کنی چون فشار به سرور کمتر میشه. داده ها رو از دیتابیس بخون و کد جاوا اسکریپت نمودار رو با echo تولید کن و بفرست واسه کلاینت تا نشون بده. اینطوری چون اعداد و ارقام و اسامی ستونها و غیره بصورت متن توی سورس کد هستن، برای سئوی سایتتم بهتره


سلام...اره منم رو لینکاش زدم ولی کار نمی کرد..
ممنون از راهنماییتون..
می تونید تو ی مثال ساده بیشتر راهنماییم کنید؟؟
ممنون.

asma69
دوشنبه 29 تیر 1394, 21:41 عصر
سلام

عزیز، کار سرور ساید رو بی خیال شو چون هم مشکل تره هم نتیجه میشه نمودار به صورت یک عکس... در واقع این توابعی که شما داری استفاده می کنی یک عکس رو به عنوان نمودار تولید می کنه... به نظر شخصی من این کار حتی اگر بازدید شما بالا باشه و نمودارها هم متغیر باشند و کش نشوند مشکل بالارفتن لود سرور رو هم به وجود میاره...

از تابع جاوا اسکریپت http://chartjs.org استفاده کن... رایگانه... استفاده ازش هم خیلی ساده است... تعدادی سمپل هم داره که نگاه کنی متوجه میشی برای هر نوع نمودار (که به نظر میاد مورد استفاده شما نمودار Line یا Bar ست) چطور اطلاعات رو باید وارد کنی... قسمت Doc. کاملی هم داره و توضیحات تکمیلی رو میتونی اونجا ببینی...


سلام...ممنون از راهنماییتون...نمونه های نموداری که گفتین رو دیدم....جالب بودن...قبلا هم چندتا کتابخانه که از توابع جاوا اسکریپت استفاده می کنن رو دیدم...خیلی نمودارای جالب و متنوعی داره.....اما مشکل من اینه که نمی تونم کدای جاوا اسکریپت رو با php ترکیب کنم و واسه مقادیرم از دیتابیس مقادیر رو به تابع جاوا پاس بدم.....

می تونین تو ی مثال ساده در این زمینه بیشتر راهنماییم کنین تا بتونم از همین توابع جاوا اسکریپت استفاده کنم؟؟

ممنون.

Amir9891
شنبه 03 مرداد 1394, 00:18 صبح
خوب بیشتر توضیح بدین مشکلتون چیه دقیقاً؟ خودتون همینی که من گفتم رو امتحان کنید و نمونه کد بنویسید و بذارید اینجا و بگید باهاش چه مشکلی دارید دوستان کمک می کنند...
موفق باشی

Master_Power
شنبه 03 مرداد 1394, 09:05 صبح
مشکل من اینه که نمی تونم کدای جاوا اسکریپت رو با php ترکیب کنم و واسه مقادیرم از دیتابیس مقادیر رو به تابع جاوا پاس بدم.....

می تونین تو ی مثال ساده در این زمینه بیشتر راهنماییم کنین تا بتونم از همین توابع جاوا اسکریپت استفاده کنم؟؟

ممنون.

این مشکلشونه

asma69
دوشنبه 05 مرداد 1394, 11:08 صبح
این مشکلشونه

سلام..مشکل اولم ی چی دیگه بود...که از اون گزشتم....یک کتابخونه دیگه پیدا کردم که مشکل نداشت..منتها طبق گفته ی دوستان چون php و سمت سرور بود، سرعت لود خیلی پایین بود....

اره در حال حاضر میخوام از کتابخونه های جاوا اسکریپت استفاده کنم که متنوع تر و سرعت بالاتری داره ولی نمیدونم چطوری با php تلفیق و مقادیر رو از دیتابیس فراخونی کنم...
ممنون میشم اگه راهنماییم کنین.....
تشکر....

phpdev
دوشنبه 05 مرداد 1394, 11:21 صبح
حالا مشکل اول چه جوری حل شد ؟ کدام کتابخانه ؟

asma69
دوشنبه 05 مرداد 1394, 12:05 عصر
حالا مشکل اول چه جوری حل شد ؟ کدام کتابخانه ؟



خب زبان اون کتابخونه رو نتونستم عوض کنم...یک کتابخونه به اسم koolchart پیدا کردم ک نمودارای خیلی خوبی داشت و متحرک بود اما سرعت لودش واسه مقادیر بالای یک میلیون تو بعضی مرورگرها خیلی کم بود و کلی طول می کشید و مرورگر هنگ میکرد.....

نمی دونم شاید به خاطر این بوده که از دیتابیس فراخونی می کرده ولی درهرصورت بقیه هم تو جواباشون گفتن که از کتابخونه های جاوا اسکریپت استفاده کنیم بهتره و سرعت لود بیشتری داره...

ممنون میشم اگه کسی در این زمینه راهنماییم کنه..