PDA

View Full Version : چاپ نامه در فرم



fa_te64
پنج شنبه 25 مهر 1387, 18:19 عصر
سلام
فرمم داراي يه picBox و يه ريچ تكس باكسه كه ميخام تصوير به عنوان هدر نامه و متن هم در پايين اون بياد چطور با printDocument تنظيم كنم كه زير هم بيفتن وبا اندازه نامه و همچنين متن من داراي aligment مختلفي هست وقتي از drawString استفاده ميكنم و متن تكس باكس رو به اون نسبت ميدم متن رو بدون در نظر گرفتن aligment هر خط در گوشه چپ چاپ ميكنه چطور ميتونم طوري چاپ گنم كه متن به عنوان تصوير ديده شه و تنظيم bold ,alignو.. به هم نخوره؟

SMRAH1
پنج شنبه 25 مهر 1387, 18:27 عصر
برای چاپ یک متن به صورت وسط چین باید از StringFormat در تابع DrawString استفاده کنی،یه چیزی شبیه این:


StringFormat stringFormat = new StringFormat();
stringFormat.Alignment = StringAlignment.Center;
stringFormat.LineAlignment = StringAlignment.Center;

pe.Graphics.Clear(this.BackColor);
pe.Graphics.DrawString(Text,Font,new SolidBrush(ForeColor),
new RectangleF(0, 0, this.Width, this.Height), stringFormat);

fa_te64
پنج شنبه 25 مهر 1387, 18:35 عصر
برای چاپ یک متن به صورت وسط چین باید از StringFormat در تابع DrawString استفاده کنی،یه چیزی شبیه این:


StringFormat stringFormat = new StringFormat();
stringFormat.Alignment = StringAlignment.Center;
stringFormat.LineAlignment = StringAlignment.Center;

pe.Graphics.Clear(this.BackColor);
pe.Graphics.DrawString(Text,Font,new SolidBrush(ForeColor),
new RectangleF(0, 0, this.Width, this.Height), stringFormat);
aligment هر خط فرق داره ميشه اينو براي هر خطم استفاده كنم

SMRAH1
پنج شنبه 25 مهر 1387, 18:59 عصر
در این صورت باید داده ها رو خط به خط چاپ کنی.
بهتره این (http://msdn.microsoft.com/en-us/magazine/cc188767.aspx)رو با نمونه کدش ببینی.

fa_te64
جمعه 26 مهر 1387, 02:08 صبح
در این صورت باید داده ها رو خط به خط چاپ کنی.
بهتره این (http://msdn.microsoft.com/en-us/magazine/cc188767.aspx)رو با نمونه کدش ببینی.
ممنون كد مشكلمو تا حدودي حل كرد،حالا اگه بخوام با open كردن محتواي متن به تكس باكس منتقل شه چه بايد كرد؟

SMRAH1
جمعه 26 مهر 1387, 05:43 صبح
سلام


ممنون كد مشكلمو تا حدودي حل كرد،حالا اگه بخوام با open كردن محتواي متن به تكس باكس منتقل شه چه بايد كرد؟

Open کردن چی؟چه ربطی به TextBox داره؟ اصلا یعنی چی!!!!

fa_te64
جمعه 26 مهر 1387, 09:55 صبح
سلام



Open کردن چی؟چه ربطی به TextBox داره؟ اصلا یعنی چی!!!!
كدي كه شما دادين فايل رو با open dlg باز كرديم رو چاپ ميكنه،حالا ميخوام محتواي فايل رو در يه تكس باكس نمايش بدم بعد چاپش كنم،چطور بايد بعد از انتخاب فايل با open dlg محتواي اون رو در تكس باكس نمايش بدم؟؟

fa_te64
جمعه 26 مهر 1387, 21:47 عصر
در این صورت باید داده ها رو خط به خط چاپ کنی.
بهتره این (http://msdn.microsoft.com/en-us/magazine/cc188767.aspx)رو با نمونه کدش ببینی.
كد داده هارو از فايل ميخونه براي برنامه من كه متن نامه همونجا تايپ ميشه بايد محتواي تكس باكس رو خط به خط چاپ كنه،چطور بايد اين كارو انجام بدم؟؟؟كلا براي چاپ متني كه داخل تكس باكس تايپ ميشه از چه كدي استفاده ميشه؟مثل برنامه ورد كه متن ورودي كاربر رو با فرمت خاص هر خط چاپ ميكنه

SMRAH1
شنبه 27 مهر 1387, 08:51 صبح
در این حالت یا باید فرمت بندی رو خودتون موقع چاپ انجام بدید (در مثالی که دیدی،اگر اشتباه نکنم،یک قسمت رو با سایز دیگه ای چاپ می کنه) یا باید از همون نرم افزارهای مثل Word بخواهید این کار روبکنه.

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

اما در مورد اینکه چگونه به جای فایل از متن درون TextBox استفاده کنه.اگر حوصله دست بردن توی برنامه رو ندارید،می تونید متن رو در یک فایل ذخیره کنید (مثلا پوشه Temp کاربر) و بعد به برنامه چاپ بگید اون فایل رو چاپ کنه.در غیر این صورت کمی در برنامه دست ببرید تا هم بیشتر با ساختار چاپ اسناد در سی شارپ آشنا بشید هم اینکه برنامه به جای اینکه یک رشته رو از فایل بخونه از رشته آماده شما استفاده کنه (کاری نداره فقط به جای باز کردن فایل و خوندن خط به خط اون باید یه متد از کلاس اصلی رو فراخونی کنه و به اون بگه که خط بعدی TextBox چیه و اون متد هم که در فرم شما قرار داره خط بعدی رو از TextBox می خونه و برای چاپ ارسال میکنه).

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

موفق باشید

fa_te64
شنبه 27 مهر 1387, 14:19 عصر
در این حالت یا باید فرمت بندی رو خودتون موقع چاپ انجام بدید (در مثالی که دیدی،اگر اشتباه نکنم،یک قسمت رو با سایز دیگه ای چاپ می کنه) یا باید از همون نرم افزارهای مثل Word بخواهید این کار روبکنه.

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

اما در مورد اینکه چگونه به جای فایل از متن درون TextBox استفاده کنه.اگر حوصله دست بردن توی برنامه رو ندارید،می تونید متن رو در یک فایل ذخیره کنید (مثلا پوشه Temp کاربر) و بعد به برنامه چاپ بگید اون فایل رو چاپ کنه.در غیر این صورت کمی در برنامه دست ببرید تا هم بیشتر با ساختار چاپ اسناد در سی شارپ آشنا بشید هم اینکه برنامه به جای اینکه یک رشته رو از فایل بخونه از رشته آماده شما استفاده کنه (کاری نداره فقط به جای باز کردن فایل و خوندن خط به خط اون باید یه متد از کلاس اصلی رو فراخونی کنه و به اون بگه که خط بعدی TextBox چیه و اون متد هم که در فرم شما قرار داره خط بعدی رو از TextBox می خونه و برای چاپ ارسال میکنه).

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


برنامه من براي فاكتوره كه با كريستال كار كردم فقط با چاپ نامه ها مشكل دارم بايد از همون برنامه آماده ورد استفاده كنم در نمونه برنامه هاي آماده اون رو پيدا كردم ولي اجرا نشد ،2باره كه خواستم دانلود كنم لينكشو پيدا نكردم!!!:گریه:اگه از دوستان كسي لينكشو بزاره ممنون ميشم

SMRAH1
شنبه 27 مهر 1387, 18:16 عصر
سلام

لینک دقیقش اینه (http://barnamenevis.org/forum/showpost.php?p=606799&postcount=151).
من دانلود کردم و تست کردم.در ضمن برای تست باید حداقل word2003 داشته باشی.

موفق باشی

fa_te64
یک شنبه 28 مهر 1387, 00:42 صبح
سلام

لینک دقیقش اینه (http://barnamenevis.org/forum/showpost.php?p=606799&postcount=151).
من دانلود کردم و تست کردم.در ضمن برای تست باید حداقل word2003 داشته باشی.

موفق باشی
اجرا كردم كار ميكنه برنامه من بايد امكان گزارش گيري هم داشته باشه،به نظر شما من چطور بايد آدرسي كه ورد فايلم رو ذخيره ميكنه بدست بيارم و بعدا در گزارش گيري چطور بايد با داشتن مسير فايل اون رو با ورد باز كنم؟؟
و يه سوال ديگه اينكه من مسير فايل رو در پايگاه چه نوعي تعريف كنم چون در پايگاه وقتي مسير طولاني ميشه گاهي خطا ميده

SMRAH1
یک شنبه 28 مهر 1387, 07:57 صبح
سلام

1) اگرمنظورتون از امکان گزارش گیری،چاپ است،توی شی Document که در برنامه ساخته میشه،متدهیی برای چاپ یا Print وجود داره فقطباید پیداشون کنید (بهترین راه هم استفاد از MSDN یا راهنمای VBA همراه خوده آفیس است).

2) برای دخیره فایل هم شی Document متد های save و Saveas رو داره.

3) برای ذخیره مسیر یک فایل در پایگاه داده،باید اون رو از نوع nchar ،البته با طولهایی بالاتر از 200 کاراکتر،معرفی کنی.در ضمن دقیقا باید پیدا کنی کخ چه وقت خطا می ده تا بهتر بشه کمک کرد.

موفق باشید

a1053r
یک شنبه 28 مهر 1387, 11:32 صبح
دوست عزیز شما می تونید هر دو رو در دیتاگرید ذخیرو و چاپ کنید اگه مایل باشید کد چاپ دیتا گرید رو به شما میدم به من ایمیل بزنید براتون می فرستم
a1053r@gmail.com

fa_te64
یک شنبه 28 مهر 1387, 17:20 عصر
من كد زير رو نوشتم كه ظاهرا نبايد مشكلي داشته باشه ولي خطا ميده ،اون رو روي مسيرهاي مختلف امتحان كردم ولي براي باز كردن فايلم خطا ميده



public partial class Form2 : Form
{
static object missing = Missing.Value;
static object missing2 = Missing.Value;
static object missing3 = Missing.Value;
static object missing4 = Missing.Value;
static object missing5 = Missing.Value;
static object missing6 = Missing.Value;
static object missing7 = Missing.Value;
static object missing8 = Missing.Value;
static object missing9 = Missing.Value;
static object missing10 = Missing.Value;
static object missing11 = Missing.Value;
static object missing12 = Missing.Value;
static object missing13 = Missing.Value;
string strfname;
public Form2()//string strFileName)
{
InitializeComponent();
//Create an object for missing values. This will be passed when ever we don’t want to pass value
Object missing = System.Reflection.Missing.Value;
//Objects for true and false to be used in the word document for passing true or false.
Object truei = true;
Object falsei = false;
//Creating objects of word and document
Microsoft.Office.Interop.Word.Application oWord = new Microsoft.Office.Interop.Word.Application();
Microsoft.Office.Interop.Word.Document oWordDoc = new Microsoft.Office.Interop.Word.Document();

//Adding a new document to the application
oWordDoc = oWord.Documents.Add(ref missing, ref missing, ref missing, ref missing);
// To open an existing word document we need to pass the path of the existing document with some // other parameters. Here is the code snippet opening an existing word document
object fileName = "p:\\txt.doc";
// You can keep it true if you want to open the file in readonly mode
object readOnly = falsei;
// we can keep it false if you want to open the file but not make it invisible
object isVisible = truei;

oWordDoc = oWord.Documents.Open(ref fileName, ref missing,
ref readOnly,ref missing, ref missing, ref missing,
ref missing,ref missing, ref missing, ref missing,
ref missing,ref isVisible, ref missing, ref missing,
ref missing,ref missing);

}
private void Form2_Load(object sender, EventArgs e)
{
}




اين خطا رو ميده:
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
همچنين وقتي برنامه ورد اجرا شدو سند رو با اون ذخيره كرديم راهي هست كه بتونيم مسير ذخيره فايل رو از ورد بگيريم؟مسير بايد در پايگاه داده ذخيره شه.