PDA

View Full Version : حرفه ای: نمایش Pdf در برنامه



behrooz69
شنبه 26 آبان 1397, 10:27 صبح
سلام دوستان گرامی

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

حالا چند سوال پیش میاد .

1 - بهترین روش استفاده از PDF چی هستش ؟؟ ( یعنی اینکه تبدیل به باینریش کنیم مثل عکس و ذخیره کنیم تو دیتابیس و موقع خوندن عکسشو انجام بدیم ؟؟ ( تو این روش اگه دیتابیس بپره فاتحهههههه ) یا اینکه یه فولدر توی برنامه یا هرجایی درست کنیم و فایل پی دی اف رزومه رو از اونجا بخونه ؟؟ ( تو این روش اگه فولدر پاک شه فاتحهههههههه )

2 - pdf اگه توی دیتابیس ذخیره شه ، و حجم پی دی اف ها بالا باشه به دیتابیس و سرعت برنامه فشار نمیاد ؟

3 - میدونیم که توی کامپاننت Dev Express کامپاننت PDF Reader وجود داره و میشه گذاشت و استفاده کرد ازش ، تلریک هم باید داشته باشه چک نکردم . بهتره از این روش استفاده کنیم یا از Pdf ریدر خود ویندوز ؟؟

4- کمک شما دوستان رو میطلبه ، تا جایی هم که من جستجو کردم همچین بحثی نشده بود تا الان .

5 - نمونه سورس ثبت فایل pdf در هنگام Insert در دیتابیس Sql و نمونه فراخوانی اون رو هم دوستان زحمت بکشند که استفاده کنیم ازش .

نمونه فرم ثبت : 3 TextBox ، یه OpenFileDialog ، یه Button

نام خانوادگی ، کد ملی ، شماره تماس ، رزومه

--

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

behrooz69
سه شنبه 29 آبان 1397, 07:35 صبح
یه مشکلی داری تو تالار vb.net اعلامش میکنی 1 ماهی طول میکشه تا آقا کسی جواب بده یا نه !

اخرشم که خود شخص مشکل رو پیدا میکنه ، و اونم نمیاد در اختیار دوستان قرار بده ، این میشه که تالار vb.net میشه این و تالار C# میشه 100 تا ادمین و 10000 تا پاسخگو .


گله از ادمین های محترم ، لطفا کسی که تو زمینه vb.net حرفه ایه رو چندتا ادمین بیارین و اضافش کنین به بخش .

که لااقل دوستان مشکلشون حل شه .

یا هم که بخش vb.net رو ببندید.


شرمنده که تند حرف زدم ولی اگه قراره تالار هم فکری تبدیل بشه به تالار سکوت نباشه بهتره

محمد آشتیانی
سه شنبه 29 آبان 1397, 09:03 صبح
سلام



یا هم که بخش vb.net رو ببندید.
چشم قربان ، اطاعت امر



1- به هر حال از هر روشی استفاده کنید ، اگر اتفاقی برای سخت افزارتون بیفته اطلاعاتتون از دست میره ، فرقی نمیکنه (شما باید با تهیه بک آپ مانع از بروز همچین اتفاقی بشید)

2- بالاخره حجم فایل های شما 100 مگابایت که نیست ، فایل رزومه حجم محدودی داره و اگر درست جداول طراحی و استفاده بشوند ، مشکلی پیش نمیاد

3- بنده از کامپوننت سایر شرکت ها تا حد امکان استفاده نمیکنم.

4- نتیجه که یقینا توی نت پیدا میشه ، لکن شما دقیقا کد نهایی مورد نیاز خودتون رو میخواید بدون هیچ تغییر و تلاشی

5- باشه ، در اسرع وقت انشاالله

behrooz69
سه شنبه 29 آبان 1397, 09:33 صبح
سلام


چشم قربان ، اطاعت امر



1- به هر حال از هر روشی استفاده کنید ، اگر اتفاقی برای سخت افزارتون بیفته اطلاعاتتون از دست میره ، فرقی نمیکنه (شما باید با تهیه بک آپ مانع از بروز همچین اتفاقی بشید)

( ممنونم ازتون ، اونو تو فکرش هستم ، ولی خوب برنامه تحت شبکس ، و وقتی که انتظار نداری شاید مشکل پیش بیاد ، پس این با آپدیت حل میشه و میشه به Sql server زمان داد که هر 1 ساعت یک بار یک بک آپ بگیره از دیتابیس درسته ؟؟ )

2- بالاخره حجم فایل های شما 100 مگابایت که نیست ، فایل رزومه حجم محدودی داره و اگر درست جداول طراحی و استفاده بشوند ، مشکلی پیش نمیاد

درسته حرفتون ، حجم هر فایل پی دی اف میانگین 500 کیلوبایت الا یک مگه و VarBainary تا 8000 بایت و Image تا 2,147,483,647 بایت رو پشتیبانی میکنه البته بازم بستگی به این داره تو چه سطی بخواید استفاده کنید که به سیستم و برنامه فشار نیاره.
3- بنده از کامپوننت سایر شرکت ها تا حد امکان استفاده نمیکنم.
کامپاننت تلریک رو که در جریانش هستید ، یکی از ایتم هاش Pdf Reader هست و به ساده ترین روش ممکن این کارو انجام میده و همش ویزاردی هست ، چون من تو برنامم از کامپاننت تلریک استفاده کردم ، واسه همین توی Dll هاش هست و از خاصیت Pdf Reader اون میتونم استفاده کنم.
4- نتیجه که یقینا توی نت پیدا میشه ، لکن شما دقیقا کد نهایی مورد نیاز خودتون رو میخواید بدون هیچ تغییر و تلاشی

باورت نمیشه مهندس جان خیلی دارم سرچ میکنم ، تو سایت های ایرانی هم نه تو سایت های خارجی پیدا کردم ، حتی کد هاشم نوشتم و درست شد ، به خدا هر بار قبل اینکه سوالی رو بپرسم اینجا نه اینجا بلکه تو سایت های خارجی سرچ میکنم ، و فقط جهت اطمینان و یا کمک بیشتر میپرسم .
(( واسه تیکتون هم ممنون ، کد مورد نیاز ... )):افسرده::ناراحت:

5- باشه ، در اسرع وقت انشاالله

تا جایی که من فهمیدم الان فایل ها رو باید به روش تبدیل بایت به بایت از طریق باینری و یا Image وارد دیتابیس Sql کرد .
من قبلا برنامش رو نوشته بودم ، برنامه عکاسی ، یادتونه ؟؟؟ تو همین تالار تو بخش vb.net هست ،
من فکر میکردم پی دی اف نوع اضافه و فراخوانیش مثل عکس هست .

فقط دو تا چیز واسم گنگه
1 - تو اکثر سایت ها ، فراخوانی پی دی اف رو توی PictureBox انجام دادن ، چرا ؟؟ مگه picturebox قابلیت نمایش pdf رو داره ؟؟؟
2 - تو یه سری سایت ها ، اومدن برای نمایش pdf از webBrowser استفاده کردن ؟؟ چرا و به چه دلیل ؟؟

behrooz69
سه شنبه 29 آبان 1397, 09:43 صبح
و یه چیز دیگه ، برای فراخوانی خود فایلی که فرستادیم تو دیتایس مشکل دارم ، یعنی گنگه واسم بحث مشکلش نیست

راه حل و همفکری که نگید کد آماده میخوام :چشمک::ناراحت:

فراخوانیش مثل عکسه درست !

توی فراخوانی عکس بهش PictureBox رو نسبت میدیم و عکس رو توش نشون میدیم .
ولی توی فراخوانی pdf ما میتونیم از طریق system بیایم فایل رو با Acrobat Reader سیستم بازش کنیم ، ولی خوب ما نمیخوایم چیزی رو نسبت بدیم چرا ؟؟ چون هر بار که سرچ میشه نیاز نیست فایل پی دی افش باز شه .

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

اینشه که واسم گنگه مهندس آشتیانی

میدونم سرت شلوغه ، میدونم کار داری زیاد ، ولی خوب vb.net رو دوش شماس و مجبوریم کچلتون کنیم . به بزرگواری خودت ببخش .

محمد آشتیانی
سه شنبه 29 آبان 1397, 09:43 صبح
این متد رو کپی کنید (کانکشن استرینگ و اسم تیبل و فیلد ها رو اصلاح کنید لطفا)


Private Sub SaveFileToDatabase(filePath As String)


Dim file As Byte()

Try


Using stream As New FileStream(filePath, FileMode.Open, FileAccess.Read)


Using reader = New BinaryReader(stream)


file = reader.ReadBytes(stream.Length)


End Using


End Using


Using sqlConnection As New SqlConnection(Configuration.ConfigurationManager.C onnectionStrings("ConnectionString").ConnectionString)


Using sqlCommand As New SqlCommand("INSERT INTO FileArchive (FileContent) VALUES (@File)", sqlConnection)


sqlCommand.Parameters.Add("@File", SqlDbType.VarBinary, file.Length).Value = file
sqlConnection.Open()
sqlCommand.ExecuteNonQuery()
sqlConnection.Close()


End Using


End Using


MsgBox("Selected File has been saved.")


Catch ex As Exception


MsgBox("An Error occured during file save operation" + vbCrLf + vbCrLf + ex.Message)


End Try

End Sub


این هم نحوه فراخوانیش هست

Dim openDialog As New OpenFileDialog()


If openDialog.ShowDialog() = DialogResult.OK Then


SaveFileToDatabase(openDialog.FileName)


End If


براش فرقی نداره ، هر نوع فایلی رو بدید سیو میکنه

* تایپ فیلد در Sql Server باید varbinary(MAX) باشه

behrooz69
سه شنبه 29 آبان 1397, 10:07 صبح
این متد رو کپی کنید (کانکشن استرینگ و اسم تیبل و فیلد ها رو اصلاح کنید لطفا)


Private Sub SaveFileToDatabase(filePath As String)


Dim file As Byte()

Try


Using stream As New FileStream(filePath, FileMode.Open, FileAccess.Read)


Using reader = New BinaryReader(stream)


file = reader.ReadBytes(stream.Length)


End Using


End Using


Using sqlConnection As New SqlConnection(Configuration.ConfigurationManager.C onnectionStrings("ConnectionString").ConnectionString)


Using sqlCommand As New SqlCommand("INSERT INTO FileArchive (FileContent) VALUES (@File)", sqlConnection)


sqlCommand.Parameters.Add("@File", SqlDbType.VarBinary, file.Length).Value = file
sqlConnection.Open()
sqlCommand.ExecuteNonQuery()
sqlConnection.Close()


End Using


End Using


MsgBox("Selected File has been saved.")


Catch ex As Exception


MsgBox("An Error occured during file save operation" + vbCrLf + vbCrLf + ex.Message)


End Try

End Sub


این هم نحوه فراخوانیش هست

Dim openDialog As New OpenFileDialog()


If openDialog.ShowDialog() = DialogResult.OK Then


SaveFileToDatabase(openDialog.FileName)


End If


براش فرقی نداره ، هر نوع فایلی رو بدید سیو میکنه

* تایپ فیلد در Sql Server باید varbinary(MAX) باشه

----

ممنونم ازتون ، این کد رو دارم ، این میشه Save کردن فایل دیتای مربوطه توی دیتابیس . مشکل اصلی برمیگرده به خوندنش ، این که فایل توی دتابیسه و از openfiledialog نباید استفاده شه چون فایل توی سیستم نیست که . درسته ؟؟

behrooz69
سه شنبه 29 آبان 1397, 10:23 صبح
بهتره با کد مثال بزنم براتون

Dim tt As Byte()


If T_Name.Text = Nothing Then


MsgBox("لطفا نام پرسنل را وارد کنید")


Else


Try


tt = IO.File.ReadAllBytes(str_7)
cmd = New SqlCommand
cmd.Connection = con
con.Open()


cmd.CommandText = "INSERT INTO TblKomiteEnzebati (Fname,Lname,CodePersoneli,Shobe,Mantaghe,TarikhEl am,ScanFile,Molahezat)
VALUES (@Fname,@Lname,@CodePersoneli,@Shobe,@Mantaghe,@Ta rikhElam,@ScanFile,@Molahezat)"


cmd.Parameters.AddWithValue("Fname", T_Name.Text)
cmd.Parameters.AddWithValue("Lname", T_LastName.Text)
cmd.Parameters.AddWithValue("CodePersoneli", T_Code_Personeli.Text)
cmd.Parameters.AddWithValue("Shobe", Cbo_ShobeHa.Text)
cmd.Parameters.AddWithValue("Mantaghe", Cbo_Mantaghe.Text)
cmd.Parameters.AddWithValue("TarikhElam", T_Tarikh_Shoro.Text)
cmd.Parameters.AddWithValue("ScanFile", tt)
cmd.Parameters.AddWithValue("Molahezat", T_Molahezat.Text)


If con.State = ConnectionState.Open Then


cmd.ExecuteNonQuery()
Timer1.Enabled = True
Progress_Bar_Main.Visible = True
Progress_Bar_Main.Enabled = True


End If


Catch ex As Exception
MsgBox("خطا در دریافت اطلاعات" & ex.Message)
Finally
con.Close()
End Try
Call Load_GridView()


End If

ما با این کد میایم اطلاعاتی رو ثبت میکنیم ، و همراش پی دی اف رزومش رو هم درج میکنیم تو دیتابیس

Hossis
چهارشنبه 30 آبان 1397, 15:51 عصر
به نظر و تجربه خودم، گذاشتن فایل ها بیرون از دیتابیس هم کار لود و سیو رو راحت تر می کنه و هم دیتابیس رو سبکتر و هم امکان ویرایش فایل پی دی اف و جایگزینی رو راحت تر
بکاپ گرفتن از فایلها و دیتابیس به صورت مستقل انجام میشه. نهایتش برای حفظ اطلاعات، از نرم افزارهای سینک استفاده کرده و اطلاعات رو روی یک هارد خارجی یا فضای ابری کپی میگیرید.

Hossis
چهارشنبه 30 آبان 1397, 15:54 عصر
به نظر و تجربه خودم، گذاشتن فایل ها بیرون از دیتابیس هم کار لود و سیو رو راحت تر می کنه و هم دیتابیس رو سبکتر و هم امکان ویرایش فایل پی دی اف و جایگزینی رو راحت تر
بکاپ گرفتن از فایلها و دیتابیس به صورت مستقل انجام میشه. نهایتش برای حفظ اطلاعات، از نرم افزارهای سینک استفاده کرده و اطلاعات رو روی یک هارد خارجی یا فضای ابری کپی میگیرید.
حتی خودم فایلهای پی دی اف رو در یک پوشه به نام pdf می ریزم و نام فایل رو مطابق با Id رکورد دیتابیس قرار می دم که نیاز به فیلد آدرس فایل نداشته باشه؛ این جوری با داشتن آی دی اون رکورد، پیدا کردن فایل مورد نظر از توی ویندوز خیلی راحت تر میشه

behrooz69
چهارشنبه 30 آبان 1397, 16:18 عصر
به نظر و تجربه خودم، گذاشتن فایل ها بیرون از دیتابیس هم کار لود و سیو رو راحت تر می کنه و هم دیتابیس رو سبکتر و هم امکان ویرایش فایل پی دی اف و جایگزینی رو راحت تر
بکاپ گرفتن از فایلها و دیتابیس به صورت مستقل انجام میشه. نهایتش برای حفظ اطلاعات، از نرم افزارهای سینک استفاده کرده و اطلاعات رو روی یک هارد خارجی یا فضای ابری کپی میگیرید.
حتی خودم فایلهای پی دی اف رو در یک پوشه به نام pdf می ریزم و نام فایل رو مطابق با Id رکورد دیتابیس قرار می دم که نیاز به فیلد آدرس فایل نداشته باشه؛ این جوری با داشتن آی دی اون رکورد، پیدا کردن فایل مورد نظر از توی ویندوز خیلی راحت تر میشه


ممنونم ازت