Witam...
Chciałbym wydrukować polecenie przelewu ze swojego programu i kompletnie niewiem jak mam to zrobic..Czy jest możliwość jakiegoś podstawienia obrazka w formacie png i wypełniania go..jeśli tak, to jak to mniej więcej wygląda i czego użyc??Dzieki za odpowiedź
lepiej xml + xstl na html i wydruk dokumnetu html
Niemam pojęcia jak to zrobić mozesz dac jakis przykladow jakies wskazówki??
Hmm. Właściwie to mogę (tak, wiem, to nie było do mnie) bo sam się kiedyś tym interesowałem ;)
Założyłem sobie nawet do zabawy tym małą stronkę. OK, linki:
-
http://msm-here.001webs.com/Peoples.xsl.xml - szablon (rozszerzenie xml na końcu bo darmowy host nie chciał przyjmować plików xsl ;) )
-
http://msm-here.001webs.com/Peoples.xml - plik XML z przypisanym szablonem. (Ctrl-U w firefoxie żeby zobaczyć czystego XMLa)
To był przykład efektu działania - renderowany przez przeglądarkę.
Teraz mój wygrzebany kod (uwaga - nazwy plików są na stałe wpisane do kodu, it's not a bug) za pomocą którego coś takiego można uzyskać 'softwarowo' - na szczęście nigdy niczego nie wyrzucam ;) (ach, te error-checki...):
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Xsl;
using System.Xml.XPath;
using System;
namespace Transform
{
class Program
{
static void Main(string[] args)
{
Program program = new Program();
Console.WriteLine("Uruchanianie programu...");
program.Transform();
}
private void Transform()
{
try
{
Console.WriteLine("Wczytywanie dokumentów...");
XmlWriter writer = new XmlTextWriter("Peoples.html", Encoding.UTF8);
XPathDocument document = new XPathDocument(new StreamReader("Peoples.xml", Encoding.GetEncoding(1250)));
XmlReader reader = new XmlTextReader(new StreamReader("Peoples.xsl", Encoding.GetEncoding(1250)));
Console.WriteLine("Ustawianie transformacji...");
XslCompiledTransform transform = new XslCompiledTransform();
transform.Load(reader);
Console.WriteLine("Transformacja...");
transform.Transform(document, writer);
Console.WriteLine("Zakończono transformacje sukcesem!");
}
catch (FileNotFoundException e)
{
Console.WriteLine("\nNie znaleziono pliku: " + e.FileName + "!");
}
catch (UnauthorizedAccessException)
{
Console.WriteLine("\nUżytkownik nie ma uprawnień do używania któregoś z plików!");
}
catch (XsltException)
{
Console.WriteLine("\nPlik stylu zawiera błąd!");
}
catch (XmlException)
{
Console.WriteLine("\nPlik xml zawiera błąd!");
}
catch (ArgumentException)
{
Console.WriteLine("\nKtóryś z plików ma nieprawidłowe kodowanie!");
}
Console.WriteLine("\nNaciśnij dowolny klawisz...");
Console.ReadKey();
}
}
}
edit:
Tak po chwili to doszedłem do wniosku że właściwie to z tego posta nic nie wynika ;)
No więc tak: przykład pokazuje transformację do tabeli w HTML, ale można zrobić dowolną transformacje. Np. tworzysz stronę "formularza", po czym sprytnie za pomocą XSL wstawiasz w odpowiednie miejsca dane z czego tam chcesz. Możliwa jest transformacja nie tylko do HTML, ale też np. do PDF.
Nadal nie bardzo rozumiem :( jak będę miał jakiś bardziej skomplikowany wydruk niż blankiet przelewu...niewiem nawet jakis Pit lub Nip to muszę rzeźbić cały formularz w html?? NIE MA jakiegoś sposobu żeby podstawić gotowy szablon jako tło pod raport i wypełniać pola tekstowe nałożone na niego? najlepiej jakby to było darmowe narzędzie. Męczę sie troche z Crystal Reports....
<_<...
IMHO sprawa jest prosta tak jak tylko możliwe - tworzysz stronę i w dowolne jej miejsce wstawiasz wartości z pliku XML. Prościej już się nie da. A przy okazji XSL to naprawdę potężne narzędzie, ma większe możliwości niż jakikolwiek wyimaginowany generator raportów.
CrystalReports to z tego co pamiętam biblioteka do zapytań do baz danych a nie wizualizacji (ale co ja tam wiem).
No, ale jak tam sobie chcesz, obrazek w tle po którym rysujesz:
Bitmap b = new Bitmap("D:\\obrazek.bmp");
Graphics g = Graphics.FromImage(b);
Font f = new Font(FontFamily.GenericMonospace, 20);
g.DrawString("tekst1", f, Brushes.Black, new PointF(50, 100));
g.DrawString("tekst2", f, Brushes.Black, new PointF(150, 100));
g.DrawString("tekst3", f, Brushes.Black, new PointF(120, 200));
g.DrawString("tekst4", f, Brushes.Black, new PointF(440, 300));
g.DrawString("tekst5", f, Brushes.Black, new PointF(120, 400));
g.DrawString("tekst6", f, Brushes.Black, new PointF(430, 700));
Prawda że piękne? :|
może i proste z tym xml + xsl ale nie rozumiem tego po prostu. Mam rozumieć ze idea jest taka ze np taki blankiet przelewu musze mieć wykonany w html i na to podstawiam xml? zrozumienie ulatwilby mi konkretny przyklad...gdzie mam taki np blankiet do wypelnienia...jesli masz cos takiego lub podobnego mozesz opisac dokladnie lub wyslij na maila. Bede ci bardzo wdzieczny.... [email protected] tak wielkie dzieki za to co do tej pory napisales....
wiedza tajemna zostala objawiona: http://w3schools.com/xsl/xsl_examples.asp
generalna idea: dane (xml) + transformacja, wizualizacja danych (xslt) = html
(oczywiscie nie tylko html musi byc wynikiem)
teraz już rozumiem...może i proste ale do wyświetlenia prostej tabelki (:( przynajmniej tak mi się wydaje)...bo nie wyobrażam sobie tworzyć pliku xslt w rodzaju np głupiego blankietu przelewu...chyba ze jest coś o czym niewiem i da sie to w prosty sposób wygenerować...</image>
znasz html i css? wiesz co mozna za ich pomoca zrobic?
wiec jaki problem napisac transfromacje tak, aby wygladalo jak chcesz?
nie twierdze ze xslt jest latwe, ale ma dosc duze mozliwosci
jesli chodzi o twoj problem, to oczywiscie mozesz miec obrazek "wzor blankietu przelewu" i wiedziec ze np. pole na tytul przelewu jest (X,Y,With,Height)=(200,150,350,200) (wystarczy paint to ustalenia tego) i w tym miejscu na obrazku wypisac jakis tekst, etc.
jakie to ma wady? ze jakis tekst moze nie zmiescic sie w dane miejsce, chyba ze przyjmiesz jakies ograniczenia dlugosci i walidacje
chyba jednak bede rysowal na jakims tle bo nie chodzi o blankiet przelewu (to tylko podalem przyklad)...nie mowiac juz o jakims bardziej skomplikowanym wydruku to raczej sobie z tym nie poradze....a masz moze jakis gotowy xslt cos w rodzaju takiego blankietu lub prostszego??...dzieki za odpowiedzi..