הדפסה של עמוד ב C#

תאו

משתמש פעיל
פיתוח / אפיון / עיצוב אתרים
אני צריכה להדפיס עמוד FROM שכתוב בשפת C# ,
כרגע זה נראה שהוא מדפיס הוא נותן אפשרות לבחירת תקיה ויוצר לי קובץ PDF אבל כשאני פותחת את הקובץ הוא ריק ...
אני דבגתי ואני רואה שהבעיה היא שהוא בכלל לא נכנס להדפיס את השורות כנראה יש לי בעיה בתנאי
צרפתי את הפונקציה הוא עובר את התנאי שבשורות המודגשות ומדפיס עמוד ריק :

ublic void pd_PrintPage(object sender, PrintPageEventArgs ev)
{
float linesPerPage = 0;
float yPos = 0;
int count = 0;
float leftMargin = ev.MarginBounds.Left;
float topMargin = ev.MarginBounds.Top;
string line = null;


linesPerPage = ev.MarginBounds.Height /
printFont.GetHeight(ev.Graphics);


// Print each line of the file.
while (count < linesPerPage &&
((line = streamToPrint.ReadLine()) != null))
{
yPos = topMargin + (count *
printFont.GetHeight(ev.Graphics));
ev.Graphics.DrawString(line, printFont, Brushes.Black,
leftMargin, yPos, new StringFormat());
count++;
}


// If more lines exist, print another page.
if (line != null)
ev.HasMorePages = true;
else
{ ev.HasMorePages = false;
 

תאו

משתמש פעיל
פיתוח / אפיון / עיצוב אתרים
לא נכנס בכלל ,
אני לא יודעת איפה הבעיה אבל חשבתי אולי בזה כי זה לא נכנס בכלל ללולאה
 

תאו

משתמש פעיל
פיתוח / אפיון / עיצוב אתרים
זה הקוד בשלמותו :

public void pd_PrintPage(object sender, PrintPageEventArgs ev)
{
float linesPerPage = 0;
float yPos = 0;
int count = 0;
float leftMargin = ev.MarginBounds.Left;
float topMargin = ev.MarginBounds.Top;
string line = null;

// Calculate the number of lines per page.
linesPerPage = ev.MarginBounds.Height /
printFont.GetHeight(ev.Graphics);

// Print each line of the file.
while (count < linesPerPage
&& ((line = streamToPrint.ReadLine()) != null))
{
yPos = topMargin + (count *
printFont.GetHeight(ev.Graphics));
ev.Graphics.DrawString(line, printFont, Brushes.Black,
leftMargin, yPos, new StringFormat());
count++;
}
// If more lines exist, print another page.
if (line != null)
ev.HasMorePages = true;
else
ev.HasMorePages = false;
}

public void printButton_Click(object sender, EventArgs e)
{
try
{
streamToPrint = new StreamReader
("C:\\Users\\user\\Desktop\\myfile.txt");
try
{
printFont = new Font("Arial", 10);
PrintDocument pd = new PrintDocument();
pd.PrintPage += new PrintPageEventHandler
(this.pd_PrintPage);
pd.Print();
}
finally
{
streamToPrint.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}


private void button1_Click(object sender, EventArgs e)
{


print p = new print();
try
{
streamToPrint = new StreamReader
("C:\\Users\\user\\Desktop\\myfile.txt");
try
{
printFont = new Font("Arial", 10);
PrintDocument pd = new PrintDocument();
pd.PrintPage += new PrintPageEventHandler
(this.pd_PrintPage);
pd.Print();
}
finally
{
streamToPrint.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
//p.InitializeComponent();
}
 

תאו

משתמש פעיל
פיתוח / אפיון / עיצוב אתרים
נכנס לפונקציות אבל הוא מדלג לי הלולאה בפונקציה של ההדפסה ,
אולי בגלל שיש בעיה בלולאה ,
הוא שומר לי עמודים ריקים ...
 

משחזר מידע

משתמש סופר מקצוען
נסו דיבאגינג עם MessageBox (או whatever)

1 מה הערך של linesPerPage לפני הכניסה ללולאה
2 line = streamToPrint.ReadLine()) != null
(אני לא בטוח שכחתי כבר) האם זה חוקי ?
 

תאו

משתמש פעיל
פיתוח / אפיון / עיצוב אתרים
זה הערך :
// Calculate the number of lines per page.
linesPerPage = ev.MarginBounds.Height /
printFont.GetHeight(ev.Graphics);

אולי יש קוד אחר שאני אוכל לכתוב במקום הלולאה בשביל שיקרא את מה שיש בדף וידפיס
אני צריכה להדפיס את המראה החיצוני של FORM1 ...
 

משחזר מידע

משתמש סופר מקצוען
גם לא עניתם אם line = streamToPrint.ReadLine() != null חוקי
(ונראה לי שline מחזיק כל הזמן string ריק ולכן מדפיס עמודים ריקים)
אם לא אז קודם להגדיר את line
קוד:
line = streamToPrint.ReadLine()
ורק אחרי זה התנאי
קוד:
line != null
 
נערך לאחרונה ב:

תאו

משתמש פעיל
פיתוח / אפיון / עיצוב אתרים
גם אחרי שאני מציבה
line = streamToPrint.ReadLine()
זה מציב ב line null
אולי באמת זה לא חוקי ??
 

משחזר מידע

משתמש סופר מקצוען
הו אה כמה זמן שלא התעסקתי בזה
אין לי אפילו מותקן תוכנה לבדוק את זה

אבל מכמה שהצלחתי לעבור על הקוד
וכמה שזכור לי
הבעיה היא בקוד

איפה המתכנתים דכאן ?

אגב המטרה להדפיס את זה כטקסט דווקא ?
או תמונה גם יהיה טוב ?
 

תאו

משתמש פעיל
פיתוח / אפיון / עיצוב אתרים
גם תמונה טוב
הרעיון להדפיס את הטופס שהוא מלא ...
 

מ.ש.

משתמש מקצוען
פיתוח / אפיון / עיצוב אתרים
יצירת הדפים לא נוצרת בלולאה??
 

משחזר מידע

משתמש סופר מקצוען
מתוך docs.microsoft.com
כמובן שלא בדקתי אפילו את הקוד (אין לי איך)

קוד:
using System;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Printing;

public class Form1 :
   Form
{
   private Button printButton = new Button();
   private PrintDocument printDocument1 = new PrintDocument();

   public Form1()
   {
       printButton.Text = "Print Form";
       printButton.Click += new EventHandler(printButton_Click);
       printDocument1.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage);
       this.Controls.Add(printButton);
   }

   void printButton_Click(object sender, EventArgs e)
   {
       CaptureScreen();
       printDocument1.Print();
   }


   Bitmap memoryImage;

   private void CaptureScreen()
   {
       Graphics myGraphics = this.CreateGraphics();
       Size s = this.Size;
       memoryImage = new Bitmap(s.Width, s.Height, myGraphics);
       Graphics memoryGraphics = Graphics.FromImage(memoryImage);
       memoryGraphics.CopyFromScreen(this.Location.X, this.Location.Y, 0, 0, s);
   }

   private void printDocument1_PrintPage(System.Object sender,
          System.Drawing.Printing.PrintPageEventArgs e)
   {
       e.Graphics.DrawImage(memoryImage, 0, 0);
   }

 

   public static void Main()
   {
       Application.Run(new Form1());
   }
}
 

תאו

משתמש פעיל
פיתוח / אפיון / עיצוב אתרים
לא נוצרת בלולאה כי הדיבג מראה שהוא בכלל לא נכנס ללולאה ...

הקוד שמשחזר מידע הוסיף כאן גם עושה לי את אותה פעולה יוצר דף ריק ...
 

rivkic

משתמש סופר מקצוען
צילום מקצועי
פיתוח / אפיון / עיצוב אתרים
אין לי עכשיו משהו זמין כדי לבדוק לך
אבל יש איזשהו אינדקס ב stream שיכול להיות שהוא נמצא בסוף ה stream ואת צריכה להגדיר אותו להתחלה, כדי שהוא יקרא את השורות מתחילת ה stream.
תגידי לי אם מצאת משהו כזה, אם לא - אני אחפש לך.
 

משחזר מידע

משתמש סופר מקצוען
יש לי דרך אחרת

WIN API

דרך מסורבל וכמובן לא נקי ולא מקצועי השאלה אם מתאים לכם
לשלוח בקשה לצילום מסך שרירותי (ALT+Print Screen)
לפתוח צייר
להדביק
לשלוח להדפסה

השאלה אם זה מתאים
כאמור מסורבל ולא נקי כמובן גם לא מקצועי
 

אאאב

משתמש חדש
אולי יתאים לך לעבוד עם קריסטל ריפורט, תלוי מה בדיוק הצורך...
 

מבחר הקורסים המקצועיים של פרוג!

פְּרוֹגְלַיין | לוח אירועים

למעלה