PDA

View Full Version : تعیین نوع کاغذ قبل از چاپ ریپورت rdlc



ar.mahdian
پنج شنبه 28 اردیبهشت 1391, 23:02 عصر
سلام
در یک برنامه سی شارپ که از ریپورت استفاده میشه نیاز هست که ریپورت در اندازه A5 چاپ بشه اما برای این کار نیاز هست که نوع کاغذ موجود در کاست پرینتر را در تنظیمات چاپگر در ویندوز تعیین کنیم یا به نحوی به چاپگر بگیم که الان کاغذ A5 داری یا به طور کلی تنظیمات مربوط به چاپگر را درست کنیم اما ما به سیستم مشتری دسترسی نداریم و فقط میتوانیم اندازه ریپورت را در هنگام طراحی مشخص کنیم به همین دلیل هنگام چاپ ریپورت در سیستمی که پرینترش رو ست نکردیم، برنامه این پیغام رو میده که نوع کاغذ موجود در کاست رو مشخص کن.
حالا به نظر دوستان راهی هست که بشه با کدنویسی تنظیمات مربوط به کاغذ خود چاپگر رو مشخص کرد؟

ممنون

arash ghafori
پنج شنبه 28 اردیبهشت 1391, 23:44 عصر
اگه اشتباه نکنم ، توی کد نویسی Crystal Report وقتی که از کلاس ReportDocument یه شئ میسازید ( مثلا rd) بزنید :

rd.printOptions.peaperSize

میتونید سایزشو مشخص کنید.

ar.mahdian
جمعه 29 اردیبهشت 1391, 11:11 صبح
اگه اشتباه نکنم ، توی کد نویسی Crystal Report وقتی که از کلاس ReportDocument یه شئ میسازید ( مثلا rd) بزنید :

rd.printOptions.peaperSize

میتونید سایزشو مشخص کنید.

ممنون ولی من از ریپورت خود دات نت یعنی از نوع rdlc استفاده میکنم
به نظرم یکی از این دو راه رو باید بریم
1- هنگام پرینت ریپورت از امکاناتش استفاده کنیم و نوع کاغذ چاپگر رو تغییر بدیم.
2- قبل از چاپ با متدهای جداگانه ای تنظیمات چاپگر رو تغییر بدیم.

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

arash ghafori
جمعه 29 اردیبهشت 1391, 12:06 عصر
به نظر من ، اگه شما بتونید پنجره ی Print Dialog رو بیارید ، کافیه .... . از این پنجره اگه کمه ی Property رو بزنید براتون میاره که ازچه نوع کاغذی Print بگیره (A4 , A5 , ...) .
اگه اشتباه نکرده باشم ، این پنجره توی خود ابزار Report Viewer هست.
احتیاجی به کد نویسی نیست.

ar.mahdian
جمعه 29 اردیبهشت 1391, 12:17 عصر
من دقیقا این کار رو میکردم اما:
بعد از تعیین نوع کاغذ و کلیک روی دکمه پرینت میگه:

out of paper
To feed paper from the Cassette
Load A5 paper in the cassette. If the specified paper is properly loaded in the cassette, change the paper size setting in [Options]-[Device Settings]-[Cassette Settings] to resume printing.

- To feed paper from the Manual Feed Slot
Load the paper in the Manual Feed Slot to resume printing.

ar.mahdian
جمعه 29 اردیبهشت 1391, 12:23 عصر
به نظر شما میشه یک شی از نوع printDocument رو کانفیگ کرد و به واسطه اون پرینت گرفت؟

arash ghafori
جمعه 29 اردیبهشت 1391, 12:35 عصر
این پیغام میگه" نوع کاغذی که برای پرینت گذاشتید درست نیست . یا با ید نوع کاغذ عوض بشه یا باید تنظیماتشو با برگه ی پرینتی تطابق بدی " !!!!:متعجب:
نوع کاغذو عوض کردید ؟

ar.mahdian
جمعه 29 اردیبهشت 1391, 12:48 عصر
بله
کاغذ داخل پرینتر از نوع A5 است ولی تنظیمات کاست پرینتر روی A4
من میخوام با کد بگم که همه چیز درسته و پرینت کن!
یعنی تنظیمات پرینتر رو برای یه لحظه تغییر بدم و پرینت کنم البته از طریق کد
وگرنه تنظیمات کاست رو داخل ویندوز میشه تغییر داد.
همین

ar.mahdian
جمعه 29 اردیبهشت 1391, 13:29 عصر
من موفق شدم حداقل ست کنم که چاپگر پیشفرض کدام چاپگر باشه!


object printerName = "Canon LBP5050";
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Printer");
ManagementObjectCollection collection = searcher.Get();
ManagementObject myprinter = null;
foreach (ManagementObject currentObject in collection)
{
if (currentObject["name"].ToString() == printerName.ToString())
{
myprinter = currentObject;
break;
}
}
if (myprinter != null)
{
myprinter.InvokeMethod("SetDefaultPrinter", new object[] { printerName });
}

اگه بشه متدهای دیگه مربوط به این روش رو پیدا کرد و بجای SetDefaultPrinter قرار داد مشکل حل میشه.
البته چندتا رو پیدا کردم اما اونی که میخوام پیدا نشد

AddPrinter – Adds or maps a specific printer to the client machine
DeletePrinter - Removes or unmaps a specific printer to the client machine
RenamePrinter – Renames the printer on the client machine
SetDefaultPrinter – Sets the printer as default on clients machine
GetPrinterInfo – Gets the Printer Information
IsPrinterInstalled – Checks whether the printer is installed