ورود

View Full Version : سوال: مشکل حروف فارسی در کتابخانه PHPWord



vahidmoghadam
پنج شنبه 02 مهر 1394, 15:17 عصر
سلام دوستان،
من به تازگی با کتابخانه PHPWord آشنا شدم و به راحتی با تمام پارامترها و تنظیماتش کار میکنم فقط دو تا مشکل اساسی باهاش دارم :
1- وقتی میخوام در فایل وردم از متون فارسی استفاده کنم در خروجی به مشکل برمیخورم
2- نمی دونم چه طور باید تنظیم کرد که کل فایل راست به چپ Right-to-Left باشه

مشکل اول خیلی برام مهمتر و اساسی تر هست، خروجی که بیرون میده به این شکل هست :
135464

و کد مورد استفاده بنده هم اینه :


<?php
require_once '../PHPWord.php';

// New Word Document
$PHPWord = new PHPWord();

// New portrait section
$section = $PHPWord->createSection();

// Add text elements
$section->addText('سلام دنیا');
$section->addTextBreak(2);
$section->addText('Hello World!');

// Save File
$objWriter = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007');
$objWriter->save('Text.docx');
?>



مجموعه این کتابخانه رو هم از لینک زیر میتونید دانلود کنید :
https://phpword.codeplex.com/downloads/get/138035

خیلی ممنون میشم اگه راهنمایی کنید

pejman_view
پنج شنبه 02 مهر 1394, 17:09 عصر
سلام


function farsikon ($str){
return html_entity_decode(iconv('UTF-8', mb_detect_encoding($str),$str));
}

این تابع رو بالای صفحه اضافه کن بعد به روش ذیل عمل کن:

$section->addText(farsikon('سلام دنیا'));

روش رو تست نکردم اما به نظرم جواب بده

vahidmoghadam
پنج شنبه 02 مهر 1394, 18:43 عصر
سلام


function farsikon ($str){
return html_entity_decode(iconv('UTF-8', mb_detect_encoding($str),$str));
}

این تابع رو بالای صفحه اضافه کن بعد به روش ذیل عمل کن:

$section->addText(farsikon('سلام دنیا'));

روش رو تست نکردم اما به نظرم جواب بده

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

مهرداد سیف زاده
پنج شنبه 02 مهر 1394, 19:27 عصر
مشکل شما شاید تا حد برطرف کردن باگ rtl این کلاس هم پیش بره. چون برای رعایت rtl در فایل‌های docx یک سری قوانین هست که باید رعایت بشه و شاید این کلاس صرفا به حروف انگلیسی اکتفا کرده. منم توی کلاس و سایتش چیزی از ساپورت کردن rtl ندیدم
ولی میتونید بجای درگیر شدن با این کلاس‌های و همچنین اگر فرمت فیل word براتون مهم نیست(اگر doc یا docx فرقی نمیکنه) میتونید از کد زیر استفاده کنید


$text = '
<!DOCTYPE html>
<html>
<head>
<title>sample page</title>
<meta charset="utf-8" />
</head>
<body>
<p>
سلام دنیا
</p>
</body>
</html>';


file_put_contents('sample_word.doc', $text);

vahidmoghadam
جمعه 03 مهر 1394, 05:57 صبح
مشکل شما شاید تا حد برطرف کردن باگ rtl این کلاس هم پیش بره. چون برای رعایت rtl در فایل‌های docx یک سری قوانین هست که باید رعایت بشه و شاید این کلاس صرفا به حروف انگلیسی اکتفا کرده. منم توی کلاس و سایتش چیزی از ساپورت کردن rtl ندیدم
ولی میتونید بجای درگیر شدن با این کلاس‌های و همچنین اگر فرمت فیل word براتون مهم نیست(اگر doc یا docx فرقی نمیکنه) میتونید از کد زیر استفاده کنید


$text = '
<!DOCTYPE html>
<html>
<head>
<title>sample page</title>
<meta charset="utf-8" />
</head>
<body>
<p>
سلام دنیا
</p>
</body>
</html>';


file_put_contents('sample_word.doc', $text);


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

مهرداد سیف زاده
جمعه 03 مهر 1394, 07:30 صبح
مهرداد خان ممنونم از راهنماییت اما بنده نیاز دارم که حتما تو فایل ورد خروجی هدر، فوتر، حاشیه و خیلی چیزای دیگه تعریف کنم که البته مهمش اینایی که گفتم هستن ... فکر نکنم این کد به کارم بیاد ...
اتفاقا این کد انعطاف بیشتری داره و شما کارهای بیشتری میتونی باهاش انجام بدید
مثلا شما کل قالب رو میتونی با تگهای html بسازی و واسش header و footer درست کنید. ولی اون کد دسترسی شما محدوده و فقط از چند تا تابع میتونی استفاده کنی.

vahidmoghadam
جمعه 03 مهر 1394, 08:24 صبح
اتفاقا این کد انعطاف بیشتری داره و شما کارهای بیشتری میتونی باهاش انجام بدید
مثلا شما کل قالب رو میتونی با تگهای html بسازی و واسش header و footer درست کنید. ولی اون کد دسترسی شما محدوده و فقط از چند تا تابع میتونی استفاده کنی.

چه طور میشه ؟ مثلا در همین کتابخانه شما میتونی یک متن ثابت با یک استایل خاص در هدر و فوتر قرار بدی و برای هر صفحه تکرار بشه ... و یا جدول با استایلهای مختلف میشه ساخت و اگر اطلاعات هر ردیف در صفحه جاری جا نشد اتومات کل اون ردیف رو میبره روی جدول صفحه جدید ...
چه طور میشه با html این کار رو انجام داد ؟

مهرداد سیف زاده
جمعه 03 مهر 1394, 10:48 صبح
چه طور میشه ؟ مثلا در همین کتابخانه شما میتونی یک متن ثابت با یک استایل خاص در هدر و فوتر قرار بدی و برای هر صفحه تکرار بشه ... و یا جدول با استایلهای مختلف میشه ساخت و اگر اطلاعات هر ردیف در صفحه جاری جا نشد اتومات کل اون ردیف رو میبره روی جدول صفحه جدید ...
چه طور میشه با html این کار رو انجام داد ؟
برای این موارد باید کدنویسی html و css تسلط داشته باشید
اگر تسلط کافی ندارید از همون کلاس استفاده کنید
مثلا header رو در یک string میذارید و با محاسبات در ابتدای صفحه اون header رو میزارید. همون طور که گفتم باید از ۰ تا ۱۰۰ رو خودتون کدنویسی کنید ولی اون کلاس این کار رو برای شما آماده کرده.

vahidmoghadam
جمعه 03 مهر 1394, 11:26 صبح
برای این موارد باید کدنویسی html و css تسلط داشته باشید
اگر تسلط کافی ندارید از همون کلاس استفاده کنید
مثلا header رو در یک string میذارید و با محاسبات در ابتدای صفحه اون header رو میزارید. همون طور که گفتم باید از ۰ تا ۱۰۰ رو خودتون کدنویسی کنید ولی اون کلاس این کار رو برای شما آماده کرده.

تسلط کافی دارم ... حدود 12 یا 13 سال ... ولی این بخششو تسلط ندارم و نمی دونم که چه طور میشه برای هر صفحه ای که توی چاپ مشاهده میشه با سی اس اس هدر و فوتر تعریف کرد و داده ها رو در صورتی که همه سطر تو یک صفحه چاپی جا نمیشن به صفحه بعد منتقلش کرد ... ؟

sepehrazimi
جمعه 03 مهر 1394, 12:33 عصر
سلام دوست عزیز
من برای کار با اکسل از این روش استفاده میکنم که فکر کنم در ورد هم جواب بده . در حالت عادی اگر فایل اکسل را با نوت پد ویندوز باز کنی کاراکتر های عجیب می بینی ولی اگر با کتابخانه های php یک فایل اکسل ایجاد کنی سپس فایل اکسل رو با نت پد ببینی متوجه می شی که کد ها همه هست حالا شما می توانید اون فایل اکسل رو با نرم اکسل باز کنی و تغییرات خودتو بدی و قتی ذخیره بکنی متوجه میشی که آفیست آمده کد های مورد نظر رو ایجاد کرده و کاراکتر های عجیب نیست !!!! خوب حالا می تونی بدون استفاده از کتابخانه های آماده ورد و اکسل کتابخانه خود را ایجاد کنید !!! چگونه ؟ کد هایی که ایجاد شده رو با استفاده از php در یک فایل save کنید با پسوند doc یا xls . به همین راحتی یک کتابخانه درست کردی و میتوانی تمام ویژه گی های اکسل و ورد را داشته باشی .مشکل فارسی هم حل میشه .من برای اکسل از این روش استفاده کردم جواب میده عالی