• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
ایجاد صفحه پرینت و ساخت pdf ساخت فایل اکسل از اطلاعات دیتا بیس
#1
با سلام
اولا از همه دوستانی که لطف دارن و در اولین زمان جواب سوالات بچه ها که شاید جواب خیلی دیگه از بچه ها باشه رو میدن تشکر می کنم
و اما سوال من
دارم با جوملا یه کامپوننت مینویسم که یه سری اطلاعات رو تو دیتا بیس ذخیره می کنه در یه قسمت بخشی از اطلاعات رو واکشی میکنه و نشون میده
می خوام از این اطلاعات پرینت بگیرم در قسمت کاربری خروجی اکسل بگیرم در قسمت مدیریت
و به صورت pdf درستش کنم چکار کنم در هر دو قسمت
  پاسخ
تشکر شده توسط :
#2
1. برای پرینت مطالب، کدش سمت کاربر هست و با جاوا اسکریپت. قسمتی از ایتم های صفحه رو هم که نمیخوای در پرینت مشاهده بشه با css کنترل کن.
نمونه کد:
کد:
<a href="javascript:window.print()">Click to Print This Page</a>

2. برای خروجی اکسل و pdf هم، کدش سمت سرور هست. فایل رو میسازی و تحویل کاربر میدی. میتونی از کلاس های آماده استفاده کنی، مثل این.
نمونه کد استفاده از کلاس phpexcel:
کد پی‌اچ‌پی:
set_include_path('Classes/');
require_once 
'PHPExcel/IOFactory.php';
require_once 
'PHPExcel.php';
$rendererName PHPExcel_Settings::PDF_RENDERER_DOMPDF;
$rendererLibrary 'domPDF0.6.0beta3';
$rendererLibraryPath dirname(__FILE__). 'libs/classes/dompdf' $rendererLibrary;
PHPExcel_Settings::setPdfRenderer($rendererName,$rendererLibraryPath);
$objPHPExcel = new PHPExcel();
$objReader = new PHPExcel_Reader_Excel5();
$objPHPExcel $objReader->load('document.xls');
$rowIterator $objPHPExcel->getActiveSheet()->getRowIterator();
$sheet $objPHPExcel->getActiveSheet();
$sheet->setCellValue('A1''A');
$sheet->setCellValue('B1''B');
$sheet->setCellValue('C1''C');
$objWriter PHPExcel_IOFactory::createWriter($objPHPExcel'PDF');
$objWriter->save('document.pdf'); 
به یـزدان که گر ما خرد داشتیم
کجـا این سر انجـام بد داشتیم؟
  پاسخ
تشکر شده توسط : hamed_ah
#3
ممنو از پاسخ تون
در مورد پرینت دو تا سوال
1- چطوری با css قسمت های رو کنترل کنم؟ اگه اشتباه نکنم باید یه فایل با نام print.css درست کنم ولی چطوری معرفی کنم که از اون استفاده بشه
یه نکته من دارم تو جوملا کامپوننت می نویسم
2-من دارم تو قالبم از یه سری فونت استفاده می کنم یه پرینت تستی گرفتم نوشته ها رو نشون نمیده

در مورد خروجی اکسل:
اگه بخوام یه سری ستون خاص رو فقط نشون بده باید چکار کنم؟
  پاسخ
تشکر شده توسط :
#4
در مورد پرینت:
1. شما استایلی که میخواهید صفحه وقتی پرینت میشه داشته باشه رو در کد زیر قرار بدین.
کد css:
کد:
@media print {
    p {
        font-family: georgia, serif;
        font-size: 14px;
        color: blue;
    }
}
حالا این کد باید در صفحه همیشه وجود داشته باشه تا اگر کاربر پرینت گرفت مرورگر از اون استفاده کنه، حالا میخوای توی فایل جدا بنویس یا فایل اصلی. برای توضیحات بیشتر، این لینک میتونه کمکت کنه.
جوملا رو نمیدونم. اگر در مورد جوملا سوال خاصی دارید، در انجمن مطرح کنید.
2. باید ببینم. احتمالا مربوط به کدهای css که برای پرینت گذاشتین میشه.

در مورد خروجی اکسل:
داکیومنت ها رو مطالعه کنید. شما اول از کلاس هاش استفاده کنید و توابعش رو بشناسید. بعد اگر به مشکلی برخوردین اینجا مطرح کنید.
به یـزدان که گر ما خرد داشتیم
کجـا این سر انجـام بد داشتیم؟
  پاسخ
تشکر شده توسط : hamed_ah
#5
نقل قول:
(۱۳۹۳ اسفند ۱۸, ۰۲:۴۰ ب.ظ)sara147 نوشته: در مورد پرینت:
1. شما استایلی که میخواهید صفحه وقتی پرینت میشه داشته باشه رو در کد زیر قرار بدین.
کد css:
کد:
@media print {
    p {
        font-family: georgia, serif;
        font-size: 14px;
        color: blue;
    }
}
حالا این کد باید در صفحه همیشه وجود داشته باشه تا اگر کاربر پرینت گرفت مرورگر از اون استفاده کنه، حالا میخوای توی فایل جدا بنویس یا فایل اصلی. برای توضیحات بیشتر، این لینک میتونه کمکت کنه.
جوملا رو نمیدونم. اگر در مورد جوملا سوال خاصی دارید، در انجمن مطرح کنید.
2. باید ببینم. احتمالا مربوط به کدهای css که برای پرینت گذاشتین میشه.

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

ممنونم در مورد پاسختون
خیلی جامع بود
این کد
کد:
<?php
function hamed($option,$db){
    
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
date_default_timezone_set('Europe/London');

if (PHP_SAPI == 'cli')
    die('This example should only be run from a Web Browser');

/** Include PHPExcel */
require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';


// Create new PHPExcel object
$objPHPExcel = new PHPExcel();

// Set document properties
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
                             ->setLastModifiedBy("Maarten Balliauw")
                             ->setTitle("Office 2007 XLSX Test Document")
                             ->setSubject("Office 2007 XLSX Test Document")
                             ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
                             ->setKeywords("office 2007 openxml php")
                             ->setCategory("Test result file");


// Add some data
$list = listview('cat', $db);
$i=1;
foreach($list as $fetch){
$t1= $fetch->cat_id;  $t2= $fetch->cat_name ;$t3 =$fetch->cat_price;                            
$objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A'.$i, $t1)
            ->setCellValue('B'.$i, $t2)
            ->setCellValue('C'.$i, $t3);
$i++;
}
// Rename worksheet
$objPHPExcel->getActiveSheet()->setTitle('Simple');


// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);


// Redirect output to a client’s web browser (Excel5)
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="01simple.xls"');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');

// If you're serving to IE over SSL, then the following may be needed
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public'); // HTTP/1.0

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;
}
?>
این دو تا مشکل داره
یکی اینکه توی فایل اکسل همه تو یه ستون A میاد و اطلاعات واسته شده در ستونهای B و C نمی باد
دواینکه فونت ها به هم ریخته میاد
  پاسخ
تشکر شده توسط :
#6
اول مطمئن بشین کانکشن که به دیتابیس متصل هست از اینکودینگ utf8 استفاده میکنه، بعد این کد رو امتحان کنید.
کد پی‌اچ‌پی:
function hamed($option,$db){
 
if(
PHP_SAPI == 'cli')
    die(
'This example should only be run from a Web Browser');

require_once 
dirname(__FILE__) . '/../Classes/PHPExcel.php';
require_once 
dirname(__FILE__) . '/../Classes/IOFactory.php';

$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
$list listview('cat'$db);
foreach(
$list as $key=>$fetch){                          
        
$objPHPExcel->getActiveSheet()    ->setCellValue('A'.($key++), $fetch->cat_id )
                        ->
setCellValue('B'.$key$fetch->cat_name)
                        ->
setCellValue('C'.$key$fetch->cat_price);
}

$objPHPExcel->getActiveSheet()->setTitle('Simple');

header('Content-Type: application/vnd.ms-excel; charset=utf-8"');
header('Content-Disposition: attachment;filename="simple.xls"');
header('Expires: 0');
header('Pragma: public');
$objWriter PHPExcel_IOFactory::createWriter($objPHPExcel'Excel5');
$objWriter->save('php://output');

به یـزدان که گر ما خرد داشتیم
کجـا این سر انجـام بد داشتیم؟
  پاسخ
تشکر شده توسط : hamed_ah
#7
ممنون از پاسختون چک کردم حتی از اون متغیر $list هم دستور print_r گرفتم مقادیر رو نشون میده
ولی توی فایل اکسل خروجی به نوعی سایت رو نشون میده
این هم خروجی که میده
http://uplod.ir/wtldqlughkjn/simple.xls.htm
  پاسخ
تشکر شده توسط :
#8
کد مشکلی نداره، به جای listview یک آرایه دوبعدی بدین و تست کنید.
به یـزدان که گر ما خرد داشتیم
کجـا این سر انجـام بد داشتیم؟
  پاسخ
تشکر شده توسط : hamed_ah
#9
ممنونم
ولی چطوری بریزم تو آرایه
نمی تونم
Blush
اخه تازه دارم یاد می گیرم
میشه توضیح بدید
اگه لازمه تابع listview رو هم بزارم
کد پی‌اچ‌پی:
function listview($tablename,$id$db){
    
$query "SELECT * FROM #__" $tablename " ORDER by " $id " DESC ";
    
$db -> setQuery($query);
    
$result $db -> query();
    
$row $db->loadObjectList();
    if (
$result) {
        return 
$row;
    } else {
        
$err $db->stderr();
        return die(
$err);
    }

  پاسخ
تشکر شده توسط :
#10
برای اینکه مطمئن بشیم کد ایجاد فایل مشکلی نداره، یک تابع جدید میسازیم( که همون ساختار لیست رو به ما برگردونه) و جای تابع listview استفاده میکنیم، اگر نتیجه داد، مشخص میشه که مشکل از تابع listview هست.
کد:
کد پی‌اچ‌پی:
function listview_array(){
    
$arr = array(array('avf','dlld','dkkd'),
                array(
'avf','dlld','dkkd'),
                array(
'avf','dlld','dkkd'),
                array(
'avf','dlld','dkkd')
                );
    return 
$arr;
}
function 
hamed(){
    if(
PHP_SAPI == 'cli')
        die(
'This example should only be run from a Web Browser');
    
    require_once 
dirname(__FILE__) . '/../Classes/PHPExcel.php';
    require_once 
dirname(__FILE__) . '/../Classes/IOFactory.php';
    
    
$objPHPExcel = new PHPExcel();
    
$objPHPExcel->setActiveSheetIndex(0);
    
$list listview_array();
    foreach(
$list as $key=>$fetch){                          
            
$objPHPExcel->getActiveSheet()    ->setCellValue('A'.($key++), $fetch[0] )
                            ->
setCellValue('B'.$key$fetch[1])
                            ->
setCellValue('C'.$key$fetch[2]);
    }
    
    
$objPHPExcel->getActiveSheet()->setTitle('Simple');
    
    
header('Content-Type: application/vnd.ms-excel; charset=utf-8"');
    
header('Content-Disposition: attachment;filename="simple.xls"');
    
header('Expires: 0');
    
header('Pragma: public');
    
$objWriter PHPExcel_IOFactory::createWriter($objPHPExcel'Excel5');
    
$objWriter->save('php://output');
    exit();

به یـزدان که گر ما خرد داشتیم
کجـا این سر انجـام بد داشتیم؟
  پاسخ
تشکر شده توسط : hamed_ah


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان