PDA

View Full Version : کمک در چاپ سند در سی شارپ



fereshte_b
چهارشنبه 24 اردیبهشت 1393, 13:38 عصر
سلام دوستان
من در زمینه سی شارپ اطلاعات مختصری دارم که اونم به دو سال پیش برمیگرده

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

تو نت سرچ کردم رسیدم به اینکه باید دوتا خاصیت print و print document رو گویا اضافه کنم اما هیچی متوجه نشدم
لازم به ذکره که نمیخام با کریستال ریپورت کار کنم چون نیازی بهش ندارم. فقط میخام اطلاعات یه صفحه رو چاپ کنم. و هیچ بانک اطلاعاتی ندارم که کریستال نیاز باشه
در ضمن فک نکنم روی vs 2013 ساپورت شده باشه
لطفا کمکم کنید دوستان:ناراحت::ناراحت::نارا ت:

hamid_hr
چهارشنبه 24 اردیبهشت 1393, 13:43 عصر
راه ساده و راحت اینه که از کریستال یا stimul یا fast report یا ...... استفاده کنید

fereshte_b
چهارشنبه 24 اردیبهشت 1393, 13:45 عصر
چی هستش اینا
گفتم که کار نکردم :لبخند::لبخند:

h_m0zhdeh
چهارشنبه 24 اردیبهشت 1393, 13:47 عصر
سلام دوست عزیز، نمیدونم درست متوجه مشکلت شدم یا نه ولی شاید این کمکت کنه
:متفکر:

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

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

using System.Runtime.InteropServices;
using System.Drawing.Printing;



اینا رو داخل کلاس فرم تان همان ابتدایش اضافه کنید :

private const int WM_PRINT = 0x317;
private const int PRF_CHILDREN = 0x10;
private const int PRF_CLIENT = 0x4;
private const int PRF_NONCLIENT = 0x2;
private const int PRF_OWNED = 0x20;

[DllImport("user32.dll", EntryPoint = "SendMessageA")]
private static extern int SendMessage(int hwnd, int wMsg, int wParam, int lParam);

private Bitmap bmp;
private int y;

void doc_PrintPage(object sender, PrintPageEventArgs e)
{
e.Graphics.PageUnit = GraphicsUnit.Display;
e.Graphics.Clip = new Region(e.MarginBounds);
e.Graphics.PageUnit = GraphicsUnit.Pixel;
float factorSrc = e.Graphics.ClipBounds.Height / e.Graphics.ClipBounds.Width;
int height = (int)Math.Min((float)bmp.Width * factorSrc, bmp.Height - y);
float factor = (float)height / ((float)bmp.Width * factorSrc);
RectangleF src = new RectangleF(0, y, bmp.Width, height);
RectangleF dst = e.Graphics.ClipBounds;
dst.Height *= factor;
e.Graphics.DrawImage(bmp, dst, src, GraphicsUnit.Pixel);
y += height;
e.HasMorePages = (y < bmp.Height);
}


اینا رو هم هر جایی که می خواهید فرم چاپ بشه :

bmp = new Bitmap(panel1.Width, panel1.Height);
y = 0;
using (Graphics g = Graphics.FromImage(bmp))
{
IntPtr hDC = g.GetHdc();
SendMessage(panel1.Handle.ToInt32(), WM_PRINT, hDC.ToInt32(), PRF_CHILDREN | PRF_CLIENT | PRF_NONCLIENT | PRF_OWNED);
g.ReleaseHdc(hDC);
}
PrintDocument doc = new PrintDocument();
doc.PrintPage += new PrintPageEventHandler(doc_PrintPage);
doc.Print();

fereshte_b
چهارشنبه 24 اردیبهشت 1393, 14:05 عصر
اره عزیزم اوناشو حذف کردم
من چون تو محل کارم سیستما شبکس پرینتر ندارم الان هنو دارم تستش میکنم
نمیشه قبل پرینت گرفتن اول صفحه ی تنظیمات پرینتر باز بشه ؟؟
بازم ممنون خیلی ساده و راحته واقعا:تشویق::تشویق::تشویق::ت ویق:

danialafshari
چهارشنبه 24 اردیبهشت 1393, 14:13 عصر
اره عزیزم اوناشو حذف کردم
من چون تو محل کارم سیستما شبکس پرینتر ندارم الان هنو دارم تستش میکنم
نمیشه قبل پرینت گرفتن اول صفحه ی تنظیمات پرینتر باز بشه ؟؟
بازم ممنون خیلی ساده و راحته واقعا:تشویق::تشویق::تشویق::ت ویق:

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

fereshte_b
پنج شنبه 25 اردیبهشت 1393, 06:47 صبح
ممنون بابت راهنماییتون
برای این stimul report لینک دانلود معتبر دارید
درضمن همونجور که گفتمم من database dataset اینا ندارماا
فقط یه فرم سادس که اطلاعات پر میشه و میخام که بره به چاپگر
مرسی

danialafshari
پنج شنبه 25 اردیبهشت 1393, 06:53 صبح
سلام دوست عزیز


ممنون بابت راهنماییتون
برای این stimul report لینک دانلود معتبر دارید

لینک های زیادی برای stimul در نت وجود داره جستحو کنید راحت پیدا می کنید


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

برنامه ی محل کارمم به بانک وصل نیست، اطلاعات روی فرم و روی گرید قرار دارن و با زدن دکمه چاپ به دیتاست ریخته میشن و بعد به Stimul پاس داده میشه
متاسفانه روی سیستم stimul و vs ندارم و الا یک نمونه براتون میساختم
موفق باشید

fereshte_b
پنج شنبه 25 اردیبهشت 1393, 08:50 صبح
:افسرده::افسرده:
من stimulsoft رو نصبیدم
اما یه جوریه؟یه عالمه فایل تو استارتمه اما هیچی نمیفهمم. یه آموزش ابتدایی کسی نداره من ببینم چی به چیه؟
البته وسط نصب پیغام داد که ویژوال استادیوی تو نصبه و اینا. فقطم میشد کنسل کنم:گریه::گریه::گریه:
کنسل کردم اما فکنم نصبه
حالا چه جوری اضافش کنمممممم

hamid_hr
پنج شنبه 25 اردیبهشت 1393, 08:59 صبح
http://barnamenevis.org/showthread.php?375145-%DA%AF%D8%B2%D8%A7%D8%B1%D8%B4-%D9%BE%D9%88%DB%8C%D8%A7-%D8%A8%D8%A7-Stimul&highlight=stimul
http://barnamenevis.org/showthread.php?283638-%DA%A9%D8%AF%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A8%D8%A7-Stimul-Report-%D9%81%D8%B1%D8%A7%D8%AA%D8%B1-%D8%A7%D8%B2-%D8%A7%D9%86%DA%86%D9%87-%D8%AF%D8%B1-%D8%B3%D8%A7%DB%8C%D8%AA%D8%B4-%D8%AF%DB%8C%D8%AF%DB%8C%D8%AF&highlight=stimul
http://barnamenevis.org/showthread.php?301334-%D9%85%D8%B1%D8%ACu-%D9%88%DB%8C%D8%AF%DB%8C%D9%88%DB%8C%DB%8C-%D8%A2%D9%86%D9%84%D8%A7%DB%8C%D9%86-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%AF%D8%A7%D9%85-%D8%A8%D9%87-%DA%AF%D8%A7%D9%85-Stimule-soft-Report&highlight=stimul

anisara
چهارشنبه 22 مرداد 1393, 02:02 صبح
من این کدهارو وارد کردم ولی از Panel1 ها خطا مگیره چرا؟
کدهای آخر رو کجا باید بنویسم؟