PDA

View Full Version : ذخیره صفحه به صفحه به صورت Pdf با استفاده از استیمول سافت و سی شارپ



managment-barnamenevis
چهارشنبه 25 مرداد 1402, 11:22 صبح
سلام و وقت بخیر دوستان عزیز

من می خوام توی کد پایین
ابتدا مسیر ذخیره سازی فایل های PDF را از کاربر بگیرم

و بعد هر صفحه از گزارشم با نامی که درون آیتم های یست باکس هست نامگذاری بشه

اما متاسفانه به جای ذخیره سازی صفحه به صفحه


کل صفحات هر بار به صورت پی دی اف ذخیره می شوند.



DataTable dataTable = new DataTable(); dataTable.Columns.Add("CodeMeli", typeof(string));
dataTable.Columns.Add("Name", typeof(string));
dataTable.Columns.Add("LastName", typeof(string));
dataTable.Columns.Add("FatherName", typeof(string));
dataTable.Columns.Add("Day", typeof(int));
dataTable.Columns.Add("Month", typeof(int));
dataTable.Columns.Add("Year", typeof(int));
dataTable.Columns.Add("Sex", typeof(string));
dataTable.Columns.Add("Exam", typeof(string));
dataTable.Columns.Add("Level", typeof(string));
dataTable.Columns.Add("Course", typeof(string));
dataTable.Columns.Add("Image", typeof(byte[]));
dataTable.Columns.Add("IdKarnameh", typeof(string));
dataTable.Columns.Add("RollCall", typeof(int));
dataTable.Columns.Add("ClassActivities", typeof(int));
dataTable.Columns.Add("Listening", typeof(int));
dataTable.Columns.Add("Speaking", typeof(int));
dataTable.Columns.Add("MidtermExam", typeof(int));
dataTable.Columns.Add("Final", typeof(int));
dataTable.Columns.Add("TotalScore", typeof(int));
dataTable.Columns.Add("Top", typeof(string));
dataTable.Columns.Add("Pass", typeof(string));
dataTable.Columns.Add("Fall", typeof(string));
dataTable.Columns.Add("AbsentFail", typeof(string));


foreach (var item in listBox1.Items)
{
string idkarnameh = item.ToString();


OleDbDataAdapter adp = new OleDbDataAdapter();
DataSet ds = new DataSet();
con.Open();
adp.SelectCommand = new OleDbCommand();
adp.SelectCommand.Connection = con;
adp.SelectCommand.CommandText = "select * from JadvalKolAsli WHERE IdKarnameh LIKE '" + idkarnameh + "' ";
adp.Fill(ds, "JadvalKolAsli");
con.Close();


if (ds.Tables["JadvalKolAsli"].Rows.Count > 0)
{
DataRow row = ds.Tables["JadvalKolAsli"].Rows[0];


// استخراج مقادیر از ردیف استخراج شده و اضافه کردن آنها به DataTable
dataTable.Rows.Add(
row["CodeMeli"],
row["Name"],
row["LastName"],
row["FatherName"],
row["Day"],
row["Month"],
row["Year"],
row["Sex"],
row["Exam"],
row["Level"],
row["Course"],
row["Image"],
row["IdKarnameh"],
row["RollCall"],
row["ClassActivities"],
row["Listening"],
row["Speaking"],
row["MidtermExam"],
row["Final"],
row["TotalScore"],
row["Top"],
row["Pass"],
row["Fall"],
row["AbsentFail"]


);


}
else
{
MessageBox.Show("اطلاعات دانشجو مورد نظر پیدا نشد", "خطا");
}


}
/////////بررسی آموزشگاه
string SEXXX = "";
string nameAmuzeshgah = "";
dataTable.Columns.Add("dayAsli", typeof(string));
dataTable.Columns.Add("monthAsli", typeof(string));
dataTable.Columns.Add("yearAsli", typeof(string));
dataTable.Columns.Add("Mohr", typeof(Image));////اضافه کردن ستون مهر
dataTable.Columns.Add("Signature", typeof(Image));////اضافه کردن ستون امضاء
foreach (DataRow row2 in dataTable.Rows)
{
SEXXX = row2["Sex"].ToString();
if (SEXXX == "Male")
{
nameAmuzeshgah = genderMale;


row2["Mohr"] = picMard.Image;
row2["Signature"] = picEmzaMale.Image;
}
else
{
nameAmuzeshgah = genderFemale;
row2["Mohr"] = picZan.Image;
row2["Signature"] = picEmzaFemale.Image;
}
row2["Sex"] = nameAmuzeshgah;//// مقدار دهی
row2["dayAsli"] = txtDayAsli.Text;
row2["monthAsli"] = txtMonthAsli.Text;
row2["yearAsli"] = txtYearAsli.Text;


}


con.Close();
////////////////


using (var folderDialog = new FolderBrowserDialog())
{
DialogResult result = folderDialog.ShowDialog();


if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(folderDialog.SelectedPa th))
{
string selectedFolderPath = folderDialog.SelectedPath;


string reportFilePath = Application.StartupPath + "\\ReportKarnamehNew2.mrt";
stiReport1.Load(reportFilePath);


foreach (string itemName in listBox1.Items)
{
stiReport1.RegBusinessObject("Karnameh", dataTable); // تنظیم داده‌ها برای گزارش


stiReport1.Render();


string pdfFileName = Path.Combine(selectedFolderPath, itemName + ".pdf");


// تنظیم تنظیمات خروجی PDF برای گزارش



// انجام خروجی‌گیری به فرمت PDF با تنظیمات خروجی
stiReport1.ExportDocument(Stimulsoft.Report.StiExp ortFormat.Pdf, pdfFileName);
}
}
}




چه تغییری لازم هست توی کد بالا بدم تا به صورت صفحه به صفحه برام به صورت فایل PDF در مسیر مشخص شده ذخیره کنه

managment-barnamenevis
چهارشنبه 25 مرداد 1402, 15:18 عصر
سلام و وقت بخیر دوستان عزیز

من می خوام توی کد پایین
ابتدا مسیر ذخیره سازی فایل های PDF را از کاربر بگیرم

و بعد هر صفحه از گزارشم با نامی که درون آیتم های یست باکس هست نامگذاری بشه

اما متاسفانه به جای ذخیره سازی صفحه به صفحه


کل صفحات هر بار به صورت پی دی اف ذخیره می شوند.



DataTable dataTable = new DataTable(); dataTable.Columns.Add("CodeMeli", typeof(string));
dataTable.Columns.Add("Name", typeof(string));
dataTable.Columns.Add("LastName", typeof(string));
dataTable.Columns.Add("FatherName", typeof(string));
dataTable.Columns.Add("Day", typeof(int));
dataTable.Columns.Add("Month", typeof(int));
dataTable.Columns.Add("Year", typeof(int));
dataTable.Columns.Add("Sex", typeof(string));
dataTable.Columns.Add("Exam", typeof(string));
dataTable.Columns.Add("Level", typeof(string));
dataTable.Columns.Add("Course", typeof(string));
dataTable.Columns.Add("Image", typeof(byte[]));
dataTable.Columns.Add("IdKarnameh", typeof(string));
dataTable.Columns.Add("RollCall", typeof(int));
dataTable.Columns.Add("ClassActivities", typeof(int));
dataTable.Columns.Add("Listening", typeof(int));
dataTable.Columns.Add("Speaking", typeof(int));
dataTable.Columns.Add("MidtermExam", typeof(int));
dataTable.Columns.Add("Final", typeof(int));
dataTable.Columns.Add("TotalScore", typeof(int));
dataTable.Columns.Add("Top", typeof(string));
dataTable.Columns.Add("Pass", typeof(string));
dataTable.Columns.Add("Fall", typeof(string));
dataTable.Columns.Add("AbsentFail", typeof(string));


foreach (var item in listBox1.Items)
{
string idkarnameh = item.ToString();


OleDbDataAdapter adp = new OleDbDataAdapter();
DataSet ds = new DataSet();
con.Open();
adp.SelectCommand = new OleDbCommand();
adp.SelectCommand.Connection = con;
adp.SelectCommand.CommandText = "select * from JadvalKolAsli WHERE IdKarnameh LIKE '" + idkarnameh + "' ";
adp.Fill(ds, "JadvalKolAsli");
con.Close();


if (ds.Tables["JadvalKolAsli"].Rows.Count > 0)
{
DataRow row = ds.Tables["JadvalKolAsli"].Rows[0];


// استخراج مقادیر از ردیف استخراج شده و اضافه کردن آنها به DataTable
dataTable.Rows.Add(
row["CodeMeli"],
row["Name"],
row["LastName"],
row["FatherName"],
row["Day"],
row["Month"],
row["Year"],
row["Sex"],
row["Exam"],
row["Level"],
row["Course"],
row["Image"],
row["IdKarnameh"],
row["RollCall"],
row["ClassActivities"],
row["Listening"],
row["Speaking"],
row["MidtermExam"],
row["Final"],
row["TotalScore"],
row["Top"],
row["Pass"],
row["Fall"],
row["AbsentFail"]


);


}
else
{
MessageBox.Show("اطلاعات دانشجو مورد نظر پیدا نشد", "خطا");
}


}
/////////بررسی آموزشگاه
string SEXXX = "";
string nameAmuzeshgah = "";
dataTable.Columns.Add("dayAsli", typeof(string));
dataTable.Columns.Add("monthAsli", typeof(string));
dataTable.Columns.Add("yearAsli", typeof(string));
dataTable.Columns.Add("Mohr", typeof(Image));////اضافه کردن ستون مهر
dataTable.Columns.Add("Signature", typeof(Image));////اضافه کردن ستون امضاء
foreach (DataRow row2 in dataTable.Rows)
{
SEXXX = row2["Sex"].ToString();
if (SEXXX == "Male")
{
nameAmuzeshgah = genderMale;


row2["Mohr"] = picMard.Image;
row2["Signature"] = picEmzaMale.Image;
}
else
{
nameAmuzeshgah = genderFemale;
row2["Mohr"] = picZan.Image;
row2["Signature"] = picEmzaFemale.Image;
}
row2["Sex"] = nameAmuzeshgah;//// مقدار دهی
row2["dayAsli"] = txtDayAsli.Text;
row2["monthAsli"] = txtMonthAsli.Text;
row2["yearAsli"] = txtYearAsli.Text;


}


con.Close();
////////////////


using (var folderDialog = new FolderBrowserDialog())
{
DialogResult result = folderDialog.ShowDialog();


if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(folderDialog.SelectedPa th))
{
string selectedFolderPath = folderDialog.SelectedPath;


string reportFilePath = Application.StartupPath + "\\ReportKarnamehNew2.mrt";
stiReport1.Load(reportFilePath);


foreach (string itemName in listBox1.Items)
{
stiReport1.RegBusinessObject("Karnameh", dataTable); // تنظیم داده‌ها برای گزارش


stiReport1.Render();


string pdfFileName = Path.Combine(selectedFolderPath, itemName + ".pdf");


// تنظیم تنظیمات خروجی PDF برای گزارش



// انجام خروجی‌گیری به فرمت PDF با تنظیمات خروجی
stiReport1.ExportDocument(Stimulsoft.Report.StiExp ortFormat.Pdf, pdfFileName);
}
}
}




چه تغییری لازم هست توی کد بالا بدم تا به صورت صفحه به صفحه برام به صورت فایل PDF در مسیر مشخص شده ذخیره کنه







یک قسمت از کد رو به این صورت ویرایش کردم



اما متاسفانه فقط سطر آخر برای چاپ ارسال میشه





foreach (DataRow row2 in dataTable.Rows)
// بارگذاری گزارش در هر مرحله از حلقه
{
//DataRow row2 = dataTable.Rows[rowIndex];


SEXXX = row2["Sex"].ToString();
// بقیه بخش‌های کد...
if (SEXXX == "Male")
{
nameAmuzeshgah = genderMale;


row2["Mohr"] = picMard.Image;
row2["Signature"] = picEmzaMale.Image;
}
else
{
nameAmuzeshgah = genderFemale;
row2["Mohr"] = picZan.Image;
row2["Signature"] = picEmzaFemale.Image;
}
row2["Sex"] = nameAmuzeshgah;//// مقدار دهی
row2["dayAsli"] = txtDayAsli.Text;
row2["monthAsli"] = txtMonthAsli.Text;
row2["yearAsli"] = txtYearAsli.Text;
stiReport1.Load(Application.StartupPath + "\\ReportKarnamehNew2.mrt");


// اختصاص داده‌ها به گزارش
stiReport1.RegBusinessObject("Karnameh", row2);


///////////
//////////
/////////////




// نمایش گزارش و خروجی‌گیری
stiReport1.Render(false);
stiReport1.Render();


// کدهای مربوط به خروجی‌گیری...
//////////////////////////


using (var folderDialog = new FolderBrowserDialog())
{
DialogResult result = folderDialog.ShowDialog();


if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(folderDialog.SelectedPa th))
{
string selectedFolderPath = folderDialog.SelectedPath;


// string reportFilePath = Application.StartupPath + "\\ReportKarnamehNew2.mrt";
// stiReport1.Load(reportFilePath);


foreach (string itemName in listBox1.Items)
{
// stiReport1.RegBusinessObject("Karnameh", dataTable); // تنظیم داده‌ها برای گزارش


// stiReport1.Render();


string pdfFileName = Path.Combine(selectedFolderPath, itemName + ".pdf");


// تنظیم تنظیمات خروجی PDF برای گزارش






// انجام خروجی‌گیری به فرمت PDF با تنظیمات خروجی
stiReport1.ExportDocument(Stimulsoft.Report.StiExp ortFormat.Pdf, pdfFileName);
}
}
}






///////////////////
// حذف داده‌ها از گزارش
stiReport1.Dictionary.Databases.Clear();










}



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

پرستو پارسایی
چهارشنبه 25 مرداد 1402, 21:45 عصر
برای چاپ سطرها یکی یکی، شما باید دستورات چاپ را داخل حلقه foreach قرار دهید. در این حالت، هر سطر به تنظیمات گزارش اختصاص داده می‌شود و سپس گزارش خروجی‌گیری می‌شود.

foreach (DataRow row2 in dataTable.Rows){
SEXXX = row2["Sex"].ToString();
if (SEXXX == "Male")
{
nameAmuzeshgah = genderMale;
row2["Mohr"] = picMard.Image;
row2["Signature"] = picEmzaMale.Image;
}
else
{
nameAmuzeshgah = genderFemale;
row2["Mohr"] = picZan.Image;
row2["Signature"] = picEmzaFemale.Image;
}
row2["Sex"] = nameAmuzeshgah;
row2["dayAsli"] = txtDayAsli.Text;
row2["monthAsli"] = txtMonthAsli.Text;
row2["yearAsli"] = txtYearAsli.Text;


stiReport1.Load(Application.StartupPath + "\\ReportKarnamehNew2.mrt");
stiReport1.RegBusinessObject("Karnameh", row2);


stiReport1.Render(false);
stiReport1.Render();


using (var folderDialog = new FolderBrowserDialog())
{
DialogResult result = folderDialog.ShowDialog();
if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(folderDialog.SelectedPa th))
{
string selectedFolderPath = folderDialog.SelectedPath;
foreach (string itemName in listBox1.Items)
{
string pdfFileName = Path.Combine(selectedFolderPath, itemName + ".pdf");
stiReport1.ExportDocument(Stimulsoft.Report.StiExp ortFormat.Pdf, pdfFileName);
}
}
}


stiReport1.Dictionary.Databases.Clear();
}

managment-barnamenevis
چهارشنبه 25 مرداد 1402, 23:13 عصر
برای چاپ سطرها یکی یکی، شما باید دستورات چاپ را داخل حلقه foreach قرار دهید. در این حالت، هر سطر به تنظیمات گزارش اختصاص داده می‌شود و سپس گزارش خروجی‌گیری می‌شود.

foreach (DataRow row2 in dataTable.Rows){
SEXXX = row2["Sex"].ToString();
if (SEXXX == "Male")
{
nameAmuzeshgah = genderMale;
row2["Mohr"] = picMard.Image;
row2["Signature"] = picEmzaMale.Image;
}
else
{
nameAmuzeshgah = genderFemale;
row2["Mohr"] = picZan.Image;
row2["Signature"] = picEmzaFemale.Image;
}
row2["Sex"] = nameAmuzeshgah;
row2["dayAsli"] = txtDayAsli.Text;
row2["monthAsli"] = txtMonthAsli.Text;
row2["yearAsli"] = txtYearAsli.Text;


stiReport1.Load(Application.StartupPath + "\\ReportKarnamehNew2.mrt");
stiReport1.RegBusinessObject("Karnameh", row2);


stiReport1.Render(false);
stiReport1.Render();


using (var folderDialog = new FolderBrowserDialog())
{
DialogResult result = folderDialog.ShowDialog();
if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(folderDialog.SelectedPa th))
{
string selectedFolderPath = folderDialog.SelectedPath;
foreach (string itemName in listBox1.Items)
{
string pdfFileName = Path.Combine(selectedFolderPath, itemName + ".pdf");
stiReport1.ExportDocument(Stimulsoft.Report.StiExp ortFormat.Pdf, pdfFileName);
}
}
}


stiReport1.Dictionary.Databases.Clear();
}


سلام و عرض ادب دوست عزیز

متاسفانه بازهم سطر آخر را برای چاپ فرستاد

مثلا اگر من سه تا مقدار داخل لیست باکسم باشه

سه تا پی دی اف بهم میده اما همه سطر آخر را برای چاپ می فرستد

پرستو پارسایی
پنج شنبه 26 مرداد 1402, 09:39 صبح
لطفا اینگونه بررسی تست کنید :

foreach (DataRow row2 in dataTable.Rows){
SEXXX = row2["Sex"].ToString();
if (SEXXX == "Male")
{
nameAmuzeshgah = genderMale;
row2["Mohr"] = picMard.Image;
row2["Signature"] = picEmzaMale.Image;
}
else
{
nameAmuzeshgah = genderFemale;
row2["Mohr"] = picZan.Image;
row2["Signature"] = picEmzaFemale.Image;
}
row2["Sex"] = nameAmuzeshgah;
row2["dayAsli"] = txtDayAsli.Text;
row2["monthAsli"] = txtMonthAsli.Text;
row2["yearAsli"] = txtYearAsli.Text;


stiReport1.Load(Application.StartupPath + "\\ReportKarnamehNew2.mrt");
stiReport1.RegBusinessObject("Karnameh", row2);
stiReport1.Render(false);
stiReport1.Render();


using (var folderDialog = new FolderBrowserDialog())
{
DialogResult result = folderDialog.ShowDialog();
if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(folderDialog.SelectedPa th))
{
string selectedFolderPath = folderDialog.SelectedPath;
foreach (string itemName in listBox1.Items)
{
string pdfFileName = Path.Combine(selectedFolderPath, itemName + ".pdf");
stiReport1.ExportDocument(Stimulsoft.Report.StiExp ortFormat.Pdf, pdfFileName);
}
}
}


stiReport1.Dictionary.Databases.Clear();
}


// چاپ سطرها
using (var folderDialog = new FolderBrowserDialog())
{
DialogResult result = folderDialog.ShowDialog();
if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(folderDialog.SelectedPa th))
{
string selectedFolderPath = folderDialog.SelectedPath;
foreach (DataRow row2 in dataTable.Rows)
{
stiReport1.Load(Application.StartupPath + "\\ReportKarnamehNew2.mrt");
stiReport1.RegBusinessObject("Karnameh", row2);
stiReport1.Render(false);
stiReport1.Render();


foreach (string itemName in listBox1.Items)
{
string pdfFileName = Path.Combine(selectedFolderPath, itemName + ".pdf");
stiReport1.ExportDocument(Stimulsoft.Report.StiExp ortFormat.Pdf, pdfFileName);
}


stiReport1.Dictionary.Databases.Clear();
}
}
}

managment-barnamenevis
پنج شنبه 26 مرداد 1402, 11:41 صبح
لطفا اینگونه بررسی تست کنید :

foreach (DataRow row2 in dataTable.Rows){
SEXXX = row2["Sex"].ToString();
if (SEXXX == "Male")
{
nameAmuzeshgah = genderMale;
row2["Mohr"] = picMard.Image;
row2["Signature"] = picEmzaMale.Image;
}
else
{
nameAmuzeshgah = genderFemale;
row2["Mohr"] = picZan.Image;
row2["Signature"] = picEmzaFemale.Image;
}
row2["Sex"] = nameAmuzeshgah;
row2["dayAsli"] = txtDayAsli.Text;
row2["monthAsli"] = txtMonthAsli.Text;
row2["yearAsli"] = txtYearAsli.Text;


stiReport1.Load(Application.StartupPath + "\\ReportKarnamehNew2.mrt");
stiReport1.RegBusinessObject("Karnameh", row2);
stiReport1.Render(false);
stiReport1.Render();


using (var folderDialog = new FolderBrowserDialog())
{
DialogResult result = folderDialog.ShowDialog();
if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(folderDialog.SelectedPa th))
{
string selectedFolderPath = folderDialog.SelectedPath;
foreach (string itemName in listBox1.Items)
{
string pdfFileName = Path.Combine(selectedFolderPath, itemName + ".pdf");
stiReport1.ExportDocument(Stimulsoft.Report.StiExp ortFormat.Pdf, pdfFileName);
}
}
}


stiReport1.Dictionary.Databases.Clear();
}


// چاپ سطرها
using (var folderDialog = new FolderBrowserDialog())
{
DialogResult result = folderDialog.ShowDialog();
if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(folderDialog.SelectedPa th))
{
string selectedFolderPath = folderDialog.SelectedPath;
foreach (DataRow row2 in dataTable.Rows)
{
stiReport1.Load(Application.StartupPath + "\\ReportKarnamehNew2.mrt");
stiReport1.RegBusinessObject("Karnameh", row2);
stiReport1.Render(false);
stiReport1.Render();


foreach (string itemName in listBox1.Items)
{
string pdfFileName = Path.Combine(selectedFolderPath, itemName + ".pdf");
stiReport1.ExportDocument(Stimulsoft.Report.StiExp ortFormat.Pdf, pdfFileName);
}


stiReport1.Dictionary.Databases.Clear();
}
}
}

سلام مجدد

طبق راهنمایی که کردین

کد چاپمو تو یک حقه Foreach گذاشتم و
این حلقه رو
foreach
(string
itemName in
listBox1.Items)
{
کلاً حذف کردم

ممنون از راهنماییتون . سپاس