PDA

View Full Version : سوال: تهیه فرم گزارش گیری (هدر، فوتر، بک گراند و ...)



vahidmoghadam
جمعه 20 شهریور 1394, 17:21 عصر
دوستان عزیز سلام؛

بنده سیستمی با php آماده کردم که یک سری اطلاعات رو از کاربر میگیره و در دیتابیس mysql ذخیره میکنه ... حالا کاربر قصد داره از این اطلاعات پرینت تهیه کنه ... روی این برگه هایی که پرینت میشه باید سربرگ و لوگو و کادر و غیره هم حتما باشه ... حالا با توجه به اینکه شاید سطرهای اطلاعات ما برای چاپ زیاد باشن و بیشتر از یک صفحه باشن چه طور میشه سربرگ و لوگو و کادر و ... (کلا هدر) رو توی هز صفحه A4 تکرار کرد ؟ ...

و اینکه اگر دقت کرده باشید به طور مثال یک سطر از اطلاعات (row) وقتی بیشتر از یک خط باشه و به انتهای کاغذ A4 رسیده باشه موقع پرینت یک خط در همون صفحه چاپ میشه و خط بعد تو صفحه جدید (صفحه بعد) ... چه طور میشه جلوی این رو گرفت ؟ یعنی کل اطلاعات یه سطر اطلاعات (row) در یک صفحه باشه و در انتهای کاغذ A4 فضای خالی که مونده بیخیال بشه و کل اطلاعات سطر بعد رو توی صفحه جدید چاپ کنه ؟

خیلی خیلی ممنونم

مهرداد سیف زاده
جمعه 20 شهریور 1394, 19:20 عصر
من این مشکل رو با css,jquery حل کردم
در واقع کد نمونه‌ای که این کار رو انجام بده نیست و همچنین انجام این کار در سمت ui بهتر و راحت‌تر هست که شما روی سرور و با pp بخواید این کار رو انجام بدید
در ابتدا باید اندازه صفحه کاغذ a4 و a5 رو روی یک page رسم کنید و برای خودتون معیار معادلی داشته باشید که وقتی میره روی پرینتر با اون چیزی که نشون داده شده فرق نکنه. از لینک زیر استفاده کنید
http://stackoverflow.com/questions/3341485/how-to-make-a-html-page-in-a4-paper-size-pages
بعد باید بین صفحات و بسته به طول و عرض، یک break بزارید که مثلا کل یک صفحه a4 در یک div هست و بعد از پر شدن داده در اون خود به خود بره یه div‌دیگه. که از تگ break-page-after باید استفاده کنید. لینک زیر
http://www.w3schools.com/cssref/pr_print_pageba.asp
خب تا این جا شما سایز صفحه همراه با صفحات جدای هر کدام از a4 ها رو دارید. باید سر صفحه و پا صفحه و چیزهای دیگه رو بسازید و بعد بریم سراغ این که چطور اگر سطها زیاده بره صفحه بعد.
مشکل آخر یکم محاسباتی هست. ببینید شما بعد از گذاشتن سر صفحه و پاصفحه دستتون میاد که برای content هر کدام از a4ها چقدر with و height خالی دارید. بعدش برای هر پاراگراف یک معیاری در نظر میگیرد و یک مختصات صفحه پیش خودتون ترسیم میکنید. هر پاراگراف یا خطی رو همون طوری برای content ها نفرستید بلکه به یک function جاوااسکریپتی بدید و اون طبق مختصات و اندازه height باقی‌مونده براتون در بیاره که آیا این متن میتونه در content جا بشه یا این که باید ارسال بشه به صفحه بعد و خلاصه تمام متنی رو که قراره در گزارش چاپی بیاد رو به این function میدید و اونم هی متن رو به درون contentها تزریق میکنه تا متن تموم بشه.
یه نمونه از function که قرار متن رو به درون contentها اضافه کنه به این صورت هست:



var base_with = 482; //base with after create page
var base_height = 890; //base height after create page
var last_row_id=0; // last row for insert to content
var chid = 1; //current height id
function addToContent(row_text)
{
var before_current_height_size = $('.current_height'+chid).height();
var rowid = last_row_id+1;
var add_new_to_content = '<span id="rid_'+rowid+'">'+row_text+'</span>';
var after_current_height_size = $('.current_height'+chid).height();
$('.current_height'+chid).append(add_new_to_conten t);
if(after_current_height_size > before_current_height_size)
{
$('#'+rowid).remove();
createNewPage(row_text);
}
}


function createNewPage(row_text)
{
chid = chid+1;
rowid = last_row_id+1;
$('#page').append('<div class="current_height'+chid+'"></div>');
$('.current_height'+chid).append('<span id="rid_'+rowid+'">'+row_text+'</span>');
}