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

  • הוסף לסימניות
  • #1
אני צריכה להדפיס עמוד 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;
 
  • הוסף לסימניות
  • #2
הוא נכנס לקוד ב-WHILE?
 
  • הוסף לסימניות
  • #3
לא נכנס בכלל ,
אני לא יודעת איפה הבעיה אבל חשבתי אולי בזה כי זה לא נכנס בכלל ללולאה
 
  • הוסף לסימניות
  • #5
זה הקוד בשלמותו :

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();
}
 
  • הוסף לסימניות
  • #7
נכנס לפונקציות אבל הוא מדלג לי הלולאה בפונקציה של ההדפסה ,
אולי בגלל שיש בעיה בלולאה ,
הוא שומר לי עמודים ריקים ...
 
  • הוסף לסימניות
  • #8
נסו דיבאגינג עם MessageBox (או whatever)

1 מה הערך של linesPerPage לפני הכניסה ללולאה
2 line = streamToPrint.ReadLine()) != null
(אני לא בטוח שכחתי כבר) האם זה חוקי ?
 
  • הוסף לסימניות
  • #9
זה הערך :
// Calculate the number of lines per page.
linesPerPage = ev.MarginBounds.Height /
printFont.GetHeight(ev.Graphics);

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

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

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

אגב המטרה להדפיס את זה כטקסט דווקא ?
או תמונה גם יהיה טוב ?
 
  • הוסף לסימניות
  • #14
גם תמונה טוב
הרעיון להדפיס את הטופס שהוא מלא ...
 
  • הוסף לסימניות
  • #15
יצירת הדפים לא נוצרת בלולאה??
 
  • הוסף לסימניות
  • #16
מתוך 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());
   }
}
 
  • הוסף לסימניות
  • #17
לא נוצרת בלולאה כי הדיבג מראה שהוא בכלל לא נכנס ללולאה ...

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

WIN API

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

השאלה אם זה מתאים
כאמור מסורבל ולא נקי כמובן גם לא מקצועי
 
  • הוסף לסימניות
  • #20
אולי יתאים לך לעבוד עם קריסטל ריפורט, תלוי מה בדיוק הצורך...
 

פרוגבוט

תוכן שיווקי
פרסומת

פוסטים חדשים שאולי לא קראת....

הצטרפות לניוזלטר

איזה כיף שהצטרפתם לניוזלטר שלנו!

מעכשיו, תהיו הראשונים לקבל את כל העדכונים, החדשות, ההפתעות בלעדיות, והתכנים הכי חמים שלנו בפרוג!

לוח מודעות

הפרק היומי

הפרק היומי! כל ערב פרק תהילים חדש. הצטרפו אלינו לקריאת תהילים משותפת!


תהילים פרק כה

אלְדָוִד אֵלֶיךָ יי נַפְשִׁי אֶשָּׂא:באֱלֹהַי בְּךָ בָטַחְתִּי אַל אֵבוֹשָׁה אַל יַעַלְצוּ אֹיְבַי לִי:גגַּם כָּל קוֶֹיךָ לֹא יֵבֹשׁוּ יֵבֹשׁוּ הַבּוֹגְדִים רֵיקָם:דדְּרָכֶיךָ יי הוֹדִיעֵנִי אֹרְחוֹתֶיךָ לַמְּדֵנִי:ההַדְרִיכֵנִי בַאֲמִתֶּךָ וְלַמְּדֵנִי כִּי אַתָּה אֱלֹהֵי יִשְׁעִי אוֹתְךָ קִוִּיתִי כָּל הַיּוֹם:וזְכֹר רַחֲמֶיךָ יי וַחֲסָדֶיךָ כִּי מֵעוֹלָם הֵמָּה:זחַטֹּאות נְעוּרַי וּפְשָׁעַי אַל תִּזְכֹּר כְּחַסְדְּךָ זְכָר לִי אַתָּה לְמַעַן טוּבְךָ יי:חטוֹב וְיָשָׁר יי עַל כֵּן יוֹרֶה חַטָּאִים בַּדָּרֶךְ:טיַדְרֵךְ עֲנָוִים בַּמִּשְׁפָּט וִילַמֵּד עֲנָוִים דַּרְכּוֹ:יכָּל אָרְחוֹת יי חֶסֶד וֶאֱמֶת לְנֹצְרֵי בְרִיתוֹ וְעֵדֹתָיו:יאלְמַעַן שִׁמְךָ יי וְסָלַחְתָּ לַעֲוֹנִי כִּי רַב הוּא:יבמִי זֶה הָאִישׁ יְרֵא יי יוֹרֶנּוּ בְּדֶרֶךְ יִבְחָר:יגנַפְשׁוֹ בְּטוֹב תָּלִין וְזַרְעוֹ יִירַשׁ אָרֶץ:ידסוֹד יי לִירֵאָיו וּבְרִיתוֹ לְהוֹדִיעָם:טועֵינַי תָּמִיד אֶל יי כִּי הוּא יוֹצִיא מֵרֶשֶׁת רַגְלָי:טזפְּנֵה אֵלַי וְחָנֵּנִי כִּי יָחִיד וְעָנִי אָנִי:יזצָרוֹת לְבָבִי הִרְחִיבוּ מִמְּצוּקוֹתַי הוֹצִיאֵנִי:יחרְאֵה עָנְיִי וַעֲמָלִי וְשָׂא לְכָל חַטֹּאותָי:יטרְאֵה אוֹיְבַי כִּי רָבּוּ וְשִׂנְאַת חָמָס שְׂנֵאוּנִי:כשָׁמְרָה נַפְשִׁי וְהַצִּילֵנִי אַל אֵבוֹשׁ כִּי חָסִיתִי בָךְ:כאתֹּם וָיֹשֶׁר יִצְּרוּנִי כִּי קִוִּיתִיךָ:כבפְּדֵה אֱלֹהִים אֶת יִשְׂרָאֵל מִכֹּל צָרוֹתָיו:
נקרא  2  פעמים
למעלה