Ustawienie tekstu w tabelki (do druku)

0

Witam. Mam problem z tabelkami do wydruku w C# .net i mam kilka pytań, na które na razie nie udało mi się znaleźć odpowiedzi:

  1. Czy w C# jest możliwość programowego utworzenia tabelek w dowolnym miejscu (na kartce do wydruku) i wypełnienie ich danymi?
  2. Jeśli nie ma takiej możliwości, to czy mogę zamienić tekst na obrazek bmp (pewnie, że mogę, nawet wiem jak) i umieścić go w określonym miejscu na obrazku (kartka a5 do wydruku) tak, aby mieścił się on w tabeli ze wzoru?

Oto kod, dzięki któremu mogę z ciągu znaków zrobić obrazek o danym rozmiarze:

 
        public static Bitmap CreateBitmapImage(string sImageText)
        {
            Bitmap objBmpImage = new Bitmap(2478, 3507);

            // Create the Font object for the image text drawing.
            Font objFont = new Font("Arial", 20, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Pixel);

            // Create a graphics object to measure the text's width and height.
            Graphics objGraphics = Graphics.FromImage(objBmpImage);

            // Set Background color
            objGraphics.Clear(Color.White);
            objGraphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
            objGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
            objGraphics.DrawString(sImageText, objFont, new SolidBrush(Color.FromArgb(102, 102, 102)), 0, 0);
            objGraphics.Flush();
            
            return (objBmpImage);
        }

Mój problem dokładnie definiuje obrazek w załączniku. Czy wykonanie takiego zabiegu jest stosunkowo proste i automatyczne, czy muszę wszystkie odległości dobierać ręcznie?

Dziękuję za pomoc. Pozdrawiam

0

Oczywiście przeczytałeś mojego posta?
Potrafię drukować dokumenty w C#, potrafię drukować obrazki z kontrolek w C#, jednak nie potrafię programowo stworzyć tabelki, którą wypełnię danymi.

0

jak dla mnie tabela = linie pionowe + linie poziome + tekst. Gdzie tu problem?
BTW po Twoim kodzie średnio widzę to Twoje potrafię drukować

0

Nie wiem co to za sztuka użyć PrintDocument.. bardziej mi zależy na odpowiedzi na pytanie:
Czy mogę stworzyć programowo tabelki (równe, jak w wordzie), które będę wypełniał tekstem, który ma różną długość (samorozszerzalne tabelki), czy muszę wszystko rysować ręcznie lub używać gotowych szablonów, typu - do programu załaduje obrazek (ramki, tabele), na którym będę pisał tekst?

BTW po Twoim kodzie średnio widzę to Twoje potrafię drukować

Jakbyś nie zauważył, kod który wstawiłem służy do pisania tekstu na obrazku. Szukam pomocy a nie marudzenia. Nie chcesz mi pomagać to nie pisz wcale.

pozdrawiam

0

Rozwiązania są dwa:

  1. Samemu oblicz długość tekstu i na jego podstawie dopasuj rozmiar tabelek.
  2. Znajdź w necie bibliotekę, która potrafi to zrobić. (Pewno komercyjne systemy raportujące to potrafią, ale może i coś darmowego się znajdzie.)
0
Przunk napisał(a):

Nie wiem co to za sztuka użyć PrintDocument.. bardziej mi zależy na odpowiedzi na pytanie:
Czy mogę stworzyć programowo tabelki (równe, jak w wordzie), które będę wypełniał tekstem, który ma różną długość (samorozszerzalne tabelki), czy muszę wszystko rysować ręcznie lub używać gotowych szablonów, typu - do programu załaduje obrazek (ramki, tabele), na którym będę pisał tekst?

ale ja delj nie wiem o co Ci chodzi i z czym masz problem. Chcesz wydrukować tabelkę czy pokazać ją w programie do wypełnienia jak w wordzie? Najprościej to użyć DataGridView i zrobić np. tak. Możesz też użyć jakiegoś sytemu do raportów np. CrystalReport no chyba, że chcesz rysować wszystko ręcznie to pozostaje to co już pisałem - kilka linii pionowych + kilka poziomych + tekst

0

ale ja dalej nie wiem o co Ci chodzi i z czym masz problem.

Ogólnie chodzi mi o to, że posiadając pewne dane (przykładowo imię i opis człowieka - zajmujący nieokreśloną ilość tekstu), program stworzy tabelkę, która będzie je zawierać.

Przykładowo, mogłoby to wyglądać tak:

|******************|
|        IMIE      |
|******************|
|   OPIS OPIS OPIS |
| OPIS OPIS OPIS   |
|__________________|

Zdaję sobie sprawę, że mogę to narysować 'ręcznie' - znakami, tworząc takie dziwne tabelki jak ta powyżej.
Interesowało mnie jednak, czy jest jakieś lepsze, prostsze rozwiązanie.

Wpadłem na jeden pomysł, który działa, ale tylko dla konkretnych wzorów tabelek.
Mając obraz.jpg, na którym są narysowane tabelki, mogę wprowadzić go do programu i za pomocą metody utworzonej w poprzednim poście mogę na niego nałożyć tekst. Wiadomo, tekst będzie jedną linijką, dlatego potrzeba metody, która będzie kroić tekst w odpowiednim miejscu dodając nową linię. To jednak nie problem. Wadą tego rozwiązania jest to, że potrzeba wzorów z dokładnym rozmieszczeniem tabelek i ręczne wpisywanie w nie tekstu.

DataGridView, z tego co wcześniej zaobserwowałem, nie może zwierać danych wieloliniowych, co w tym przypadku jest nie do przyjęcia.
Będę musiał sprawdzić jeszcze dokładnie ten CrystalReport.

1

no ale nie da się aby program SAM narysował to co byś chciał. Musisz mu powiedzieć co ma narysować. Jeśli tekst ma być wielolinijkowy to TY musisz wiedzieć albo ile tych linii będzie albo jaką maksymalną długość może mieć pojedyncza linia. Nie da się tego przeskoczyć. Jak wiesz ile maksymalnie długości może mieć pojedyncza linia to musisz odpowiednio tekst pociąć i wszystko - dostaniesz ilość linii a co za tym idzie i wysokość pola. Jak masz już tekst podzielony (wiesz ile linii ma tekst) to sprawdzasz ile każda linia ma długości i rysujesz to pole takie szerokie jak najdłuższa linia. Raport może to zrobić za Ciebie ale i tak musisz mu "powiedzieć" jaką szerokość ma mieć pole. To coś jak z Labelem z ustawionym AutoSize na False - wpisz sobie do niego długi tekst i zmieniaj rozmiar - zobaczysz jak to działa

1 użytkowników online, w tym zalogowanych: 0, gości: 1