View Full Version : چاپ عکس پرسنلی در کریستال ریپورت
hosseinarefi
چهارشنبه 07 دی 1390, 23:22 عصر
سلام بر همگی
لطفا راهنمایی بفرمایید
یه برنامه میخوام بنویسیم به زبان وی بی دات نت 2008 که تو کریستال رپپورتش عکس پرسنلی کارمندان رو چاپ کنم
توضیح:
بانکی که استفاده می کنم اکسس هستش بانک رو قبلا نوشتن من فقط می خوام از اون بانک استفاده کنم.کد ملی کلید اصلیشه
زبان وی بی دات نت 2008
کلیه عکس ها در مسیر برنامه در پوشه امیج و داخل پوشه امیج 1024 فولدر هستند که براساس 2 رقم اول کد ملی افراد درست شده اند.
کد ملی هر نفر داخل پوشه هستش که 2رقم اول کد ملی آن با نام پوشه یکی باشه
مثال:
داخل پوسه 19 عکس نفر با کد ملی1931083839 و یا 1935658569و1952652252
داخل پوشه 58 عکس افراد با کد ملی مثلا 5896584585 و 5865256325 است.
این نرم افزار رو من ننوشتم فقط می خوام از بانک اون و عکساش استفاده کنم.
اگه لطف کنین سورس این که عکس هر نفر رو چطور داخل کریستال ریپورت چاپ کنم .
عکس ها داخل کریستال مانند پیکچر باکس ببایدباشند مانند زیر
PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
ممنون
hosseinarefi
پنج شنبه 08 دی 1390, 15:21 عصر
تکرار واضع تر سوال:
دارم با یه بانک از قبل درست شده کار می کنم که اطلاعات حدود 100 هزار نفر داخلش هست . برنامه نویس قبلی اومده اطلاعات
رو در یه بانک اکسس ذخیره کرده و عکس اونا رو در مسیر برنامه بنام کد ملی نفر داخل یه پوشه بنام image ذخیره کرده.
نحوه دخیره عکس در پوشه image:
عکس هر نفر با کد ملی آن فرد ذخیره شده و براساس 2 حرف اول کد ملی فرد اگه پوشه وجود نداشت پوشه با نام 2 رقم اول کد ملی
درست می کند اگر پوشه وجود داشت آن عکس را در آن پوشه ذخیره می کند.
یعنی پوشه 19 هر چی عکس که دو رقم اول کد ملی انها 19 باشد هست در پوشه 58 تما عکس های با کد ملی که دو رقم انها 58 باشد و ....
با این ترفند میشه 1024 تا پوشه ساخت که برای جستجو عکس مورد نظر در تعداد زیاد که به ملیون برسد خیلی سریع عمل می کند.
اطاعات من هم بعد از چند سال به میلیون می رسد.
مشکل کار:
برنامه که من میخوام بنویسم فقط از اطلاعات اون بانک و عکس ها استفاده میکنه به سورس اون برنامه هم دسرسی ندارم.وتاکید میکنم
هیچ هیچ گونه مسیر یا عکس ذخیره شده ای در بانک نیست.
و فقط عکی به اسم کد ملی فرد در پوشه image ذخیره میشه.
سوال: میخوام با وارد کردن کد ملی نفر در یک textbox و زدن دکمه اطلاعات آن نفر (چاپ ملیه مشخصات )
همراه با عکس پرسنلی آن در کریستال ریپورت چاپ کنم.
فرم رو طراحی کردم فقط با آوردن عکس داخل کریستال ریپورت مشکل دارم.
سوال دوم:
و مشکل دیگه اینکه وقتی کد ملی نفر رو وارد میکنم به جای اینکه فقط اطلاعات اون نفر رو نشون بده تمام افراد بانک رو نشون میده.
کد جستجو من:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim con As New OleDbConnection
Dim cmd As New OleDbCommand
Dim dt As New DataTable
Dim ds As New DataSet
Dim rpt As New CrystalReport1
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\mydb.mdb"
cmd.Connection = con
cmd.CommandText = "select *from tbl_master where sh_mel='" + TextBox1.Text + "'"
con.Open()
cmd.ExecuteNonQuery()
da.SelectCommand = cmd
dt.Clear()
da.Fill(dt)
rpt.SetDataSource(dt)
Form2.CrystalReportViewer1.ReportSource = rpt
Form2.Show()
con.Close()
End Sub
اگه لطف کنین یه نمونه برنامه با زبان کوچکvb.net و بانک اکسس که فقط یه text box و یه دکمه داشته باشه و وقتی کد ملی فرد مورد نظر
رو وارد کردی نام و عکس اون رو نمایش بده براساس توضیحات بالا
خیلی خیلی ممنون.
macsharp
چهارشنبه 21 دی 1390, 01:35 صبح
سلام دوست عزیز
من با سی شارپ کار میکنم
شما باید یه دیتا ست + دییتا تیبل به برنامه اضافه کنی و یه فیلد از نوع byte[] ایجاد کنی و فیلدهای دیگه که اطلاعات رو نگه داره
حالا باید با استفاده از io فایل عکسو به صورت بایت بخونی و به این دیتا تیبل اضافه کنی
شما فقط داری با این کار مسیر عکسو میفرستی به کریستال ریپورت
خواندن تصویر
byte[] pic;
FileInfo file1 = new FileInfo("مسیر تصویر");
byte[] buffer1 = new byte[file1.OpenRead().Length];
file1.OpenRead().Read(buffer1, 0, (int)file1.OpenRead().Length);
pic= buffer1;
مسیر تصویر رو شما از بانک میخونی
خب اول باید از یه حلقه foreach استفاده کنی و به ازای هر رکورد از بانک دیتا تیبل رو پر کنی که شامل اطلاعات و مسیر عکس هست
وقتی به فیلد مسیر عکس رسیدی با استفاده از کدهای بالا به جای مسیر عکس بایت های عکس رو میفرستی به دیتا تیبل
حالا گزارش رو بر اساس این دیتاست آماده کن
موفق باشی
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.