Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Печать бланков и C#


Автор: WolfAlone 29.1.2010, 22:29
Доброго всем времени суток! Подскажите пожалуйста, есть ли какая-нибудь возможность/компонент/решение для "изготовления" и их последующей печати из C#?

Поясню суть задачи:
Когда-то давно, мне встречалалась очень полезная вещь, состоящая из двух ключевых компонентов:
1) Некий бланко-paint который позволял чертить на миллиметровке формата А4 линии и "лэйблы" (текстовые метки), и вставлять текстовые поля. В последствии всё сохранялось в некий спец. формат
2) В среду разработки встраивался компонент, который позволял открывать файл созданный в п.1  заполнить его текстовые поля данными из массива и отправить всё это на печать, получая на выходе готовый (и заполненный в необходимых местах) бланк.

Помимо прочего вышеуказанный комплекс, был к тому же ещё и бесплатен.

Подскажите пожалуйста, есть ли нечто подобное для Visual Studio express 2005/2008/2010 (любой версии) [C#]?

P.S. Благодарю за внимание!

Автор: Sfate 29.1.2010, 22:54
WolfAlone, то что Вам встречалось, это случаем не MS Visio?

Автор: WolfAlone 29.1.2010, 22:55
Нарыл в интернете нечто под названием "Генератор отчётов", суть их похожа на мою задачу, только мне не нужны независимые сервере и мега-навороченные многостраничные печатальщики из базы данных, не зависимые от приложения и пр. Меня интересует только: рисовалка бланка на листе с помощью какой-то программы, метка блоков которые будут заполняться текстовыми данными из программы и печататься на принтере. Собственно всё.

Автор: thomas 29.1.2010, 23:27
WolfAlone, 
Приветствую.
Читаем соответствующие разделы http://msdn.microsoft.com/ru-ru/library/system.drawing.printing.aspx и http://msdn.microsoft.com/ru-ru/library/system.printing.aspx и используем в своем приложении.
Успехов.  smile 

Автор: WolfAlone 29.1.2010, 23:48
Уважаемый Sfate! То, что мне встречалось - было компонетом для Borland'овской среды, коию последний раз я открывал года 4 назад smile Позабыл с тех пор уже всё...

Уважаемый thomas, благодарю Вас, очень полезная информация, но... не совсем то, что я хотел!

Есть такая очень полезная (некоторым*) программа, называется "Бизнес пак". В комплекте с ней поставляются некоторые файл, которые называются так же, как бланки которые она печатает (платежное поручение, приходный/расходный ордер и др.).

По моим разумениям, данная программа открывает заранее заготовленный бланк (шаблон), заполняет его данными которые вводит пользователь, а затем печатает готовый бланк на принтере.

Вопрос стоит в том, где бы найти нечто аналогичное для C#, что бы можно было заготовить некоторые бланки, для их последующего заполнения пользователем и печети.

Автор: thomas 30.1.2010, 18:33
Цитата

Вопрос стоит в том, где бы найти нечто аналогичное для C#, что бы можно было заготовить некоторые бланки, для их последующего заполнения пользователем и печети.
WolfAlone, вопрос поставлен не правильно. Правильная постановка вопроса при создании своего приложения - как написать компонент для вывода на печать необходимого бланка, заполненного пользователем при использовании программы?
Например, нам помогла http://ondotnet.com/pub/a/dotnet/2002/06/24/printing.html статья написать следующий класс.
Код

using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;
using System.IO;




//info over printen te vinden op
//
//http://www.ondotnet.com/pub/a/dotnet/2002/06/24/printing.html
//
//


namespace Boekenverkoop
{
    class Printverkoop
    {
      private Klant klant;

      private double totaal = 0;//om het totaal van de faktuur in op te tellen
      private double krediet = 0;// om het bekomen krediet van binnengebrachte boeken in op te tellen

        private string sql;
        private SqlDB m_boeken;
        private string[,] tbl = new string[500, 2];

        private string verkdat = "";
        private string verkkort = "";
        private string verkrekID = "";
        private string verkklant = "";
      private bool iscredit = false;

        public Printverkoop()
        { }
    
      /// <summary>
      /// hier worden fakturen en creditnota's afgedrukt
      /// </summary>
      /// <param name="VerkRekeningId">faktuurnummer</param>
      /// <param name="leerl">bool geeft aan of het een leerling (true) of een leeraar is (false)</param>
      public void printverkoop(Int64 VerkRekeningId, bool leerl)
      {        
        totaal = 0;

        #region ophalen gegevens


        sql = " select VerkDatum, VerkKorting, VerkRekeningId, VerkKlant, VerkCreditnota ";
            sql += " from tblVerkoop ";
            sql += "where VerkRekeningId = " + VerkRekeningId + " ;";

            m_boeken = new SqlDB();
            m_boeken.fillDataset("verkoop", sql, true);

            foreach (DataRow dr in m_boeken.DS.Tables["verkoop"].Rows)
            {
              verkdat =  dr["VerkDatum"].ToString().Trim();
              verkkort = dr["VerkKorting"].ToString().Trim();
              verkrekID = dr["VerkRekeningId"].ToString().Trim();
              verkklant = dr["VerkKlant"].ToString().Trim();
              iscredit = Convert.ToBoolean(dr["VerkCreditnota"]);
            }

            klant = new Klant(Convert.ToInt64(verkklant), leerl);

            sql = "select tblVerkoopDetails.DetAantal , tblVerkoopDetails.DetPrijs , ";
            sql += "tblVerkoopDetails.DetArtId , tblVerkoopDetails.DetMaat , tblVerkoopDetails.TweedeHands, ";
            sql += "TblArtikel.artNaam ";
            sql += "from tblVerkoopDetails inner join TblArtikel on TblArtikel.artId=tblVerkoopDetails.DetArtId ";
            sql += "where tblVerkoopDetails.DetRekeningId = " + VerkRekeningId + " ; ";


            m_boeken = new SqlDB();
            m_boeken.fillDataset("verkdetail", sql, true);




            #endregion ophalen gegevens

        #region  Print settings
            //druk af; maar niet bewaren!


            PrintObject.CRelialblePrintObject myPrinter = new PrintObject.CRelialblePrintObject();
            //myPrinter.PrintDoc.PrintPage += new PrintPageEventHandler(printDoc_PrintPage);
            //myPrinter.PrintFaktuur(true, lling, VerkRekeningId, Convert.ToInt64(dtRow1["VerkRekeningId"]));  //false is geen credietnota!


            myPrinter.PrintDoc.DocumentName = "Boekenverkoop Faktuur " + VerkRekeningId;
            string Font = "Arial";
            float FontSize = 12;
            float PenWidth = 100;
            float spatie = 0;
            float PaginaBreedte;

            try
            {
              PaginaBreedte = myPrinter.PrintDoc.DefaultPageSettings.PaperSize.Width;
            }
            catch
            {
              MessageBox.Show("De printer is niet juist geconfigureerd!");
              return;
            }
            myPrinter.PrintDoc.DefaultPageSettings.Margins.Top = 00;
            myPrinter.PrintDoc.DefaultPageSettings.Margins.Bottom = 50;

            float kantlijn = 70;
            float kantlijn2 = PaginaBreedte * 60 / 100;
            float currRegel = 0;

            #endregion Print settings

        #region  Print heading

            // Print the heading

            myPrinter.AddObjectToList(Font, FontSize, kantlijn, currRegel, "dit is een test", 1000, 1000, false, false, false, "TEXT", PenWidth, "black");
            myPrinter.AddObjectToList(Font, 14, kantlijn, currRegel, "VRIJ TECHNISCH INSTITUUT", 0, 0, false, false, false, "TEXT", PenWidth, "black");
            myPrinter.AddObjectToList(Font, 10, kantlijn2, currRegel, "Schooljaar " + DateTime.Today.Year.ToString() + "-" + Convert.ToString(DateTime.Today.Year + 1), 0, 0, true, false, false, "TEXT", PenWidth, "black");
            currRegel = Convert.ToUInt64(myPrinter.CurrentY);

            FontSize = 10;
            kantlijn2 = PaginaBreedte * 30 / 100;

            myPrinter.AddObjectToList(Font, FontSize, kantlijn, currRegel, "Boeveriestraat 73", 0, 0, false, false, false, "TEXT", PenWidth, "black");
            myPrinter.AddObjectToList(Font, FontSize, kantlijn2, currRegel, "Zandstraat 138", 0, 0, false, false, false, "TEXT", PenWidth, "black");
            currRegel = Convert.ToUInt64(myPrinter.CurrentY) - 10;

            myPrinter.AddObjectToList(Font, FontSize, kantlijn, currRegel, "8000 Brugge", 0, 0, false, false, false, "TEXT", PenWidth, "black");
            myPrinter.AddObjectToList(Font, FontSize, kantlijn2, currRegel, "8200 Sint-Andries", 0, 0, false, false, false, "TEXT", PenWidth, "black");
            currRegel = Convert.ToUInt64(myPrinter.CurrentY) - 10;

            myPrinter.AddObjectToList(Font, FontSize, kantlijn, currRegel, "(050) 33 35 02", 0, 0, false, false, false, "TEXT", PenWidth, "black");
            myPrinter.AddObjectToList(Font, FontSize, kantlijn2, currRegel, "(050) 31 66 12", 0, 0, false, false, false, "TEXT", PenWidth, "black");

            currRegel = Convert.ToUInt64(myPrinter.CurrentY);

            myPrinter.AddObjectToList(Font, FontSize, kantlijn, currRegel, "", 0, PaginaBreedte - kantlijn, false, false, false, "LINE", 1, "black");
    



            // Klant invullen
            currRegel = Convert.ToUInt64(myPrinter.CurrentY) + 10;

            FontSize = 10;

            myPrinter.AddObjectToList(Font, FontSize, kantlijn, currRegel, klant.Naam.Trim() + " " + klant.Voornaam.Trim(), 0, 0, true, false, false, "TEXT", PenWidth, "black");
            currRegel = Convert.ToUInt64(myPrinter.CurrentY) - 10;
            myPrinter.AddObjectToList(Font, FontSize, kantlijn, currRegel, klant.Straat, 0, 0, true, false, false, "TEXT", PenWidth, "black");
            currRegel = Convert.ToUInt64(myPrinter.CurrentY) - 10;
            myPrinter.AddObjectToList(Font, FontSize, kantlijn, currRegel, klant.PostCode + " " + klant.Gemeente, 0, 0, true, false, false, "TEXT", PenWidth, "black");
            currRegel = Convert.ToUInt64(myPrinter.CurrentY) - 10;
            myPrinter.AddObjectToList(Font, FontSize, kantlijn, currRegel, klant.KlasId, 0, 0, true, false, false, "TEXT", PenWidth, "black");
            if (iscredit)
            {
              myPrinter.AddObjectToList(Font, FontSize, PaginaBreedte * 6 / 10, currRegel, (VerkRekeningId).ToString("Creditnota 70000"), 0, 0, false, false, false, "TEXT", PenWidth, "black");
            }
            else
            {
              myPrinter.AddObjectToList(Font, FontSize, PaginaBreedte * 6 / 10, currRegel, (VerkRekeningId).ToString("Faktuur 70000"), 0, 0, false, false, false, "TEXT", PenWidth, "black");
            }
            currRegel = Convert.ToUInt64(myPrinter.CurrentY);

            myPrinter.AddObjectToList(Font, FontSize, kantlijn, currRegel, "", 0, PaginaBreedte - kantlijn, false, false, false, "LINE", 1, "black");



            #endregion Print heading

        #region Print Artikels


            float Kolom1 = kantlijn;
            float Kolom2 = kantlijn + 40;// (kantlijn / 3);
            float Kolom3 = kantlijn + 100;// *2;
            float Kolom4 = kantlijn + 200;
            float Kolom5 = PaginaBreedte - (kantlijn * 3);
            bool hoofd = true;// moet de hoofding van de paragrafe gedrukt worden?


        // creditnota afdukken

            if (iscredit)
            {
              #region creditnota afdrukken

              FontSize = 10;
              currRegel = Convert.ToUInt64(myPrinter.CurrentY);// +spatie;
              myPrinter.AddObjectToList(Font, FontSize, kantlijn, currRegel, "Onderstaande artikels werden teruggegeven en terug betaald.", 0, 0, true, false, false, "TEXT", PenWidth, "black");
              currRegel = Convert.ToUInt64(myPrinter.CurrentY);// + spatie;
              FontSize = 9;

              foreach (DataRow dr in m_boeken.DS.Tables["verkdetail"].Rows)
              {
                myPrinter.AddObjectToList(Font, FontSize, Kolom1, currRegel, Math.Abs(Convert.ToInt16( dr["DetAantal"])).ToString().Trim() + " st.", 0, 0, false, false, false, "TEXT", PenWidth, "black");
                myPrinter.AddObjectToList(Font, FontSize, Kolom2, currRegel, "Ђ " + (Math.Abs(Convert.ToDouble(dr["DetPrijs"]))).ToString("##0.00").PadLeft(7, ' '), 0, 0, false, false, false, "TEXT", PenWidth, "black");//
                myPrinter.AddObjectToList(Font, FontSize, Kolom3, currRegel, dr["DetArtId"].ToString().Trim(), 0, 0, false, false, false, "TEXT", PenWidth, "black");
                myPrinter.AddObjectToList(Font, FontSize, Kolom4, currRegel, dr["artNaam"].ToString().Trim(), 0, 0, false, false, false, "TEXT", PenWidth, "black");


                totaal += Convert.ToDouble(dr["DetPrijs"]) * (Math.Abs(Convert.ToDouble(dr["DetAantal"])));
                currRegel = Convert.ToUInt64(myPrinter.CurrentY) - 8;
                dr.Delete();
              }
              #endregion creditnota afdrukken
            }
            else
            {
              #region faktuur afdrukken

              // Artikels die werden betaald en meegenomen

              foreach (DataRow dr in m_boeken.DS.Tables["verkdetail"].Rows)
              {

                if (Convert.ToBoolean(dr["TweedeHands"]) == false && (Convert.ToDouble(dr["DetPrijs"]) >= 0))
                {
                    //MessageBox.Show(dr["DetAantal"].ToString());
                    if (Convert.ToInt16(dr["DetAantal"]) > 0)
                    {
                      if (hoofd)
                      {
                        FontSize = 10;
                        currRegel = Convert.ToUInt64(myPrinter.CurrentY);// +spatie;
                        myPrinter.AddObjectToList(Font, FontSize, kantlijn, currRegel, "Onderstaande artikels werden betaald en door u meegenomen.", 0, 0, true, false, false, "TEXT", PenWidth, "black");
                        currRegel = Convert.ToUInt64(myPrinter.CurrentY);// + spatie;
                        FontSize = 9;
                        hoofd = false;
                      }
                      myPrinter.AddObjectToList(Font, FontSize, Kolom1, currRegel, dr["DetAantal"].ToString().Trim() + "st.", 0, 0, false, false, false, "TEXT", PenWidth, "black");
                      myPrinter.AddObjectToList(Font, FontSize, Kolom2, currRegel, "Ђ " + (Convert.ToDouble(dr["DetPrijs"])).ToString("##0.00").PadLeft(7, ' '), 0, 0, false, false, false, "TEXT", PenWidth, "black");//
                      myPrinter.AddObjectToList(Font, FontSize, Kolom3, currRegel, dr["DetArtId"].ToString().Trim(), 0, 0, false, false, false, "TEXT", PenWidth, "black");
                      myPrinter.AddObjectToList(Font, FontSize, Kolom4, currRegel, dr["artNaam"].ToString().Trim(), 0, 0, false, false, false, "TEXT", PenWidth, "black");


                      totaal += Convert.ToDouble(dr["DetPrijs"]) * Convert.ToDouble(dr["DetAantal"]);
                      currRegel = Convert.ToUInt64(myPrinter.CurrentY) - 8;
                      dr.Delete();

                    }
                }
              }
              m_boeken.DS.Tables["verkdetail"].AcceptChanges();

            
              // artikels die besteld en betaald werden

              hoofd = true;

              foreach (DataRow dr in m_boeken.DS.Tables["verkdetail"].Rows)
              {
                if (Convert.ToBoolean(dr["TweedeHands"]) == false)
                {

                    if (Convert.ToInt16(dr["DetAantal"]) < 0)
                    {
                      if (hoofd)
                      {
                        FontSize = 10;
                        currRegel = Convert.ToUInt64(myPrinter.CurrentY) + spatie;
                        
                            myPrinter.AddObjectToList(Font, FontSize, kantlijn, currRegel, "Onderstaande artikels werden besteld en betaald.", 0, 0, true, false, false, "TEXT", PenWidth, "black");
                            currRegel = Convert.ToUInt64(myPrinter.CurrentY) - 5;
                            myPrinter.AddObjectToList(Font, FontSize, kantlijn, currRegel, "Zodra ze bij ons in voorraad komen wordt u door ons verwittigd.", 0, 0, true, false, false, "TEXT", PenWidth, "black");
                        
                        currRegel = Convert.ToUInt64(myPrinter.CurrentY);
                        FontSize = 9;
                        hoofd = false;
                      }
                      myPrinter.AddObjectToList(Font, FontSize, Kolom1, currRegel, (Math.Abs(Convert.ToInt16(dr["DetAantal"]))).ToString().Trim() + "st.", 0, 0, false, false, false, "TEXT", PenWidth, "black");
                      myPrinter.AddObjectToList(Font, FontSize, Kolom2, currRegel, "Ђ " + (Convert.ToDouble(dr["DetPrijs"])).ToString("##0.00").PadLeft(7, ' '), 0, 0, false, false, false, "TEXT", PenWidth, "black");
                      myPrinter.AddObjectToList(Font, FontSize, Kolom3, currRegel, dr["DetArtId"].ToString().Trim(), 0, 0, false, false, false, "TEXT", PenWidth, "black");
                      myPrinter.AddObjectToList(Font, FontSize, Kolom4, currRegel, dr["artNaam"].ToString().Trim(), 0, 0, false, false, false, "TEXT", PenWidth, "black");

                      totaal += Convert.ToDouble(dr["DetPrijs"]) * Math.Abs(Convert.ToDouble(dr["DetAantal"]));
                      
                      currRegel = Convert.ToUInt64(myPrinter.CurrentY) - 8;
                      dr.Delete();

                    }
                }
              }
              m_boeken.DS.Tables["verkdetail"].AcceptChanges();



              hoofd = true;

              foreach (DataRow dr in m_boeken.DS.Tables["verkdetail"].Rows)
              {
                if (Convert.ToBoolean(dr["TweedeHands"]) == true)
                {
                    if (hoofd)
                    {
                      FontSize = 10;
                      currRegel = Convert.ToUInt64(myPrinter.CurrentY) + spatie;

                      myPrinter.AddObjectToList(Font, FontSize, kantlijn, currRegel, "U kocht ook tweedehandse boeken.", 0, 0, true, false, false, "TEXT", PenWidth, "black");

                      currRegel = Convert.ToUInt64(myPrinter.CurrentY) + spatie;

                      FontSize = 9;
                      hoofd = false;
                    }

                    myPrinter.AddObjectToList(Font, FontSize, Kolom1, currRegel, dr["DetAantal"].ToString().Trim() + "st.", 0, 0, false, false, false, "TEXT", PenWidth, "black");
                    myPrinter.AddObjectToList(Font, FontSize, Kolom2, currRegel, "Ђ " + (Convert.ToDouble(dr["DetPrijs"])).ToString("##0.00").PadLeft(7, ' '), 0, 0, false, false, false, "TEXT", PenWidth, "black");
                    myPrinter.AddObjectToList(Font, FontSize, Kolom3, currRegel, dr["DetArtId"].ToString().Trim(), 0, 0, false, false, false, "TEXT", PenWidth, "black");
                    myPrinter.AddObjectToList(Font, FontSize, Kolom4, currRegel, dr["artNaam"].ToString().Trim(), 0, 0, false, false, false, "TEXT", PenWidth, "black");

                    totaal += Convert.ToDouble(dr["DetPrijs"]) * Convert.ToDouble(dr["DetAantal"]);
                    currRegel = Convert.ToUInt64(myPrinter.CurrentY) - 8;
                    dr.Delete();

                }
              }
              m_boeken.DS.Tables["verkdetail"].AcceptChanges();

              // tweedehandsboeken binnengebracht voor verkoop

              hoofd = true;



              foreach (DataRow dr in m_boeken.DS.Tables["verkdetail"].Rows)
              {
                if (Convert.ToDouble(dr["DetPrijs"]) < 0)
                {
                    if (hoofd)
                    {
                      FontSize = 10;
                      currRegel = Convert.ToUInt64(myPrinter.CurrentY) + spatie;
                      
                    myPrinter.AddObjectToList(Font, FontSize, kantlijn, currRegel, "U verkocht tweedehandse boeken.", 0, 0, true, false, false, "TEXT", PenWidth, "black");
                      
                      currRegel = Convert.ToUInt64(myPrinter.CurrentY) + spatie;

                      FontSize = 9;
                      hoofd = false;
                    }

                    myPrinter.AddObjectToList(Font, FontSize, Kolom1, currRegel, dr["DetAantal"].ToString().Trim() + "st.", 0, 0, false, false, false, "TEXT", PenWidth, "black");
                    myPrinter.AddObjectToList(Font, FontSize, Kolom2, currRegel, "Ђ " + Math.Abs((Convert.ToDouble(dr["DetPrijs"]))).ToString("##0.00").PadLeft(7, ' '), 0, 0, false, false, false, "TEXT", PenWidth, "black");
                    myPrinter.AddObjectToList(Font, FontSize, Kolom3, currRegel, dr["DetArtId"].ToString().Trim(), 0, 0, false, false, false, "TEXT", PenWidth, "black");
                    myPrinter.AddObjectToList(Font, FontSize, Kolom4, currRegel, dr["artNaam"].ToString().Trim(), 0, 0, false, false, false, "TEXT", PenWidth, "black");

                    krediet += Convert.ToDouble(dr["DetPrijs"]) * Convert.ToDouble(dr["DetAantal"]);
                    currRegel = Convert.ToUInt64(myPrinter.CurrentY) - 8;
                    dr.Delete();
                }
              }

              m_boeken.DS.Tables["verkdetail"].AcceptChanges();
              #endregion faktuur afdrukken
            }
        #endregion Print Artikels

        #region Print Afrekening

            // Afrekening
            FontSize = 10;
            currRegel = Convert.ToUInt64(myPrinter.CurrentY) + spatie;
            myPrinter.AddObjectToList(Font, FontSize, kantlijn, currRegel, "Afrekening.", 0, 0, true, false, false, "TEXT", PenWidth, "black");


            currRegel = Convert.ToUInt64(myPrinter.CurrentY) - 5;

            //    FontSize = 8;


                myPrinter.AddObjectToList(Font, FontSize, kantlijn, currRegel, " Het totaal voor de bovenstaande artikelen :", 0, 0, true, false, false, "TEXT", PenWidth, "black");
                myPrinter.AddObjectToList(Font, FontSize, PaginaBreedte * 6 / 10, currRegel, "Ђ " + Math.Abs(totaal).ToString(" ##0.00").PadLeft(7, ' '), 0, 0, true, false, false, "TEXT", PenWidth, "black");
                currRegel = Convert.ToUInt64(myPrinter.CurrentY) - 8 + spatie;
            
            if (krediet < 0)
            {             
                myPrinter.AddObjectToList(Font, FontSize, kantlijn, currRegel, "  Tegoed uit Tweedehandseboekenverkoop : ", 0, 0, true, false, false, "TEXT", PenWidth, "black");
                myPrinter.AddObjectToList(Font, FontSize, PaginaBreedte * 6 / 10, currRegel, "Ђ " + Math.Abs(krediet).ToString(" ##0.00").PadLeft(7, ' '), 0, 0, true, false, false, "TEXT", PenWidth, "black");
                totaal += krediet;
            }
            else
            {
              currRegel = Convert.ToUInt64(myPrinter.CurrentY) + spatie;
            }
            currRegel = Convert.ToUInt64(myPrinter.CurrentY);

            sql = "select betbetaalwijzeId ";
            sql += " from tblBetaling ";
            sql += "where BetRekeningId = " + VerkRekeningId + " ; ";

            m_boeken = new SqlDB();
            m_boeken.fillDataset("betaalwijze", sql, true);

            double korting = totaal * (Convert.ToDouble(verkkort)) / 100;
           

            totaal -= korting;
            if (korting != 0)
            {
              if (iscredit)
              {
                myPrinter.AddObjectToList(Font, FontSize, kantlijn, currRegel, "  U ontving bij ons een korting :", 0, 0, true, false, false, "TEXT", PenWidth, "black");
                myPrinter.AddObjectToList(Font, FontSize, PaginaBreedte * 6 / 10, currRegel, "Ђ " + korting.ToString("###0.00").PadLeft(7, ' '), 0, 0, true, false, false, "TEXT", PenWidth, "black");
                currRegel = Convert.ToUInt64(myPrinter.CurrentY) + spatie;
              }
              else
              {
                myPrinter.AddObjectToList(Font, FontSize, kantlijn, currRegel, "  U ontvangt bij ons een korting :", 0, 0, true, false, false, "TEXT", PenWidth, "black");
                myPrinter.AddObjectToList(Font, FontSize, PaginaBreedte * 6 / 10, currRegel, "Ђ " + korting.ToString("###0.00").PadLeft(7, ' '), 0, 0, true, false, false, "TEXT", PenWidth, "black");
              }
            }
            else
            {
              currRegel = Convert.ToUInt64(myPrinter.CurrentY) + spatie;
            }
            currRegel = Convert.ToUInt64(myPrinter.CurrentY) + 10;

            //double betBedrag = som - korting;
            currRegel = Convert.ToUInt64(myPrinter.CurrentY) - 8;
            if (iscredit)
            {
              myPrinter.AddObjectToList(Font, FontSize, kantlijn, currRegel, " Voor deze Creditnota krijgt U terug : ", 0, 0, true, false, false, "TEXT", PenWidth, "black");
              myPrinter.AddObjectToList(Font, FontSize, PaginaBreedte * 6 / 10, currRegel, "Ђ " + Math.Abs(totaal).ToString("###0.00").PadLeft(7, ' '), 0, 0, true, false, false, "TEXT", PenWidth, "black");

            }
            else
            {
              myPrinter.AddObjectToList(Font, FontSize, kantlijn, currRegel, "  U betaalde voor deze rekening : ", 0, 0, true, false, false, "TEXT", PenWidth, "black");
                myPrinter.AddObjectToList(Font, FontSize, PaginaBreedte * 6 / 10, currRegel, "Ђ " + totaal.ToString("###0.00").PadLeft(7, ' ') + " Ђ via " + m_boeken.DS.Tables["betaalwijze"].Rows[0][0], 0, 0, true, false, false, "TEXT", PenWidth, "black");
            }

            currRegel = Convert.ToUInt64(myPrinter.CurrentY);
            string voettekst = "";


            #region voettekst

            //Extra voettekst
            voettekst = "Aangekochte goederen worden NIET teruggenomen.";
            FontSize = 8;
            myPrinter.AddObjectToList(Font, FontSize, Kolom1, currRegel, voettekst, 0, 0, false, false, false, "TEXT", PenWidth, "black");
            currRegel = Convert.ToUInt64(myPrinter.CurrentY) - 8;
            voettekst = "Aa.";
            myPrinter.AddObjectToList(Font, FontSize, Kolom1, currRegel, voettekst, 0, 0, false, false, false, "TEXT", PenWidth, "black");
            currRegel = Convert.ToUInt64(myPrinter.CurrentY) - 8;
            voettekst = "Aa.";
            myPrinter.AddObjectToList(Font, FontSize, Kolom1, currRegel, voettekst, 0, 0, false, false, false, "TEXT", PenWidth, "black");
            currRegel = Convert.ToUInt64(myPrinter.CurrentY) - 8;

            #endregion voettekst

        #endregion Print Afrekening

            myPrinter.Print();

            krediet = 0;
            totaal = 0;

      }        
    }
}


Этот класс используется для вывода на печать счёта-фактуры. Естественно на экране пользователь видит форму для заполнения данными. А принтер печатает счёт-фактуру.

Автор: WolfAlone 31.1.2010, 01:41
Уважаемый thomas! Теперь вопрос стот только в том, нет ли уже готового какого-нибудь универсального класса/компонента/модуля или ещё чего-нибудь + программы для рисования этих самых документов (шаблонов документов)?

P.S. Если писать свой класс, как по вашему это сделать лучше? Как я понимаю, лучше всего это сделать в виде DLL'ки (на С++)? И тогда эту DLL можно будет использовать и в других языках/средах, в т.ч. в C#?

Автор: Zakonnic 1.2.2010, 12:18
Универсальное встроенное решение - локальные отчеты для ReportViewer-а. Гугл помог найти это:
http://msdn.microsoft.com/en-us/library/ms251784(VS.80).aspx

Хммм... Все-таки это не то. Вам же нужны редактируемые поля прямо в отчете.

Автор: WolfAlone 5.2.2010, 16:43
Сейчас в раздумьях о том, что лучше использовать... Формат XML для Word/Excel (Writer/Calc) или написать для этих целей свою библиотеку с входным форматом XML? Будьте любезны, подскажите кто знает, если на голом C/++ на ваять библиотеку в виде DLL'ки, для её использования в винде (C/C++/C#), можно ли потом будет её перекомпилить для *nix, без правки исходников?

Автор: jonie 6.2.2010, 10:40
Цитата

Будьте любезны, подскажите кто знает, если на голом C/++ на ваять библиотеку в виде DLL'ки, для её использования в винде (C/C++/C#), можно ли потом будет её перекомпилить для *nix, без правки исходников? 
при должном умении вполне себе да, можно. Только в nix уже mono же есть, лучше все же писать на c#, если задаетесь такими вопросами - я так понимаю что у вас нет опыта подобных вещей....

Автор: WolfAlone 6.2.2010, 14:17
Уважаемый jonie, Вы совершенно правы! Опыта в написании кроссплатформенных библиотеке у меня очень мало, впрочем как и опыта написания библиотек вообще, а так же опыта написания кроссплатформенных приложений. Ставил Mono под OpenSuSE... Впечатления честно говоря были весьма противоречивые. Вроде как и работает, а чего-то всё-таки не хватает!

Готовую программу портировать под *nix честно говоря не собирался, а вот библиотке в *nix'aх я думаю пригодилась бы, ибо ничего подобного ещё не встречал ни под win ни под *nix. Поэтому изначально в голову пришла мысль сделать всё это именно на C/++, без использования win32 API и прочих платформо-зависимых вещей. Но так как опыт написания библиотек (в т.ч. кроссплатформенных) = около 0-я - решил поинтересоваться, можно ли потом голый C/++ код будет портировать под другую ОСь. Как выяснилось - можно.

Думаю, вопрос исчерпал себя.

P.S. Может быть у кого-то будут ещё некоторые замечания, предложения, пожелания?

Автор: jonie 6.2.2010, 18:53
Есть такая штука, зовется Microsoft Office Info Path.... с ним можно наверно поработать, но это жесткая привязка на офис, конечно же

Автор: dazy 6.2.2010, 21:25
WolfAlone,
Как мне кажется, для Вашего случая, лучше всего использовать связку с MS Word. 

.net хорошо работает с офисом, да и есть спец библиотека для работы офисными програмками. В общем все просто.
В Ворде делаете шаблон (tempalte) в котором определяете внешний вид документа. В те места куда нужно вставлять данные пользователя - ставите закладки, или поля для ввода. 
В программе на основе шаблона создаете новый файл, перемещаетесь по закладкам в документе и заполняете его данными пользователя.

+ Не сложно в плане реализации и на выходе качественный результат. 
-  Ну да, привязка к Ворду.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)