![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 81 Pomógł: 2 Dołączył: 28.03.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cel: Drukowanie faktur
Problematyka: fragment strony (zwanej dalej blokiem) nie może zostać wydrukowany w połowie na jednej stronie, a w połowie na drugiej. Nie jestem w stanie przewidzieć ilości produktów oraz miejsca jakie zajmą (nazwa może być np. na tyle długa, że zajmie dwa wiersze itp.). W związku z tym jedynym logicznym wyjściem byłoby podzielenie faktury na bloki, które w przypadku gdy nie mieszczą się już na pierwszej stronie do druku zostają przeniesione w całości na drugą, a tam pozostanie puste miejsce. (Pisząc poniższe nie wiedziałem, że są takie problemy ze spacjami na tym forum... wyobraźcie sobie, że pomiędzy | a | są równe odstępy ![]() Zilustrowanie problemu: strona 1 ------------- | abc | | abc | | abc | | jakisele | -------------- strona 2 ------------- | ment | | abc | | | | | -------------- Powyższa sytuacja nie może mieć miejsca, zamiast tego musi zostać to wydrukowane tak: strona 1 ------------- | abc | | abc | | abc | | | -------------- strona 2 ------------- | jakisele | | ment | | abc | | | | | -------------- Czy istnieje jakaś technologia, która umożliwia taki podział na bloki? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 112 Pomógł: 20 Dołączył: 10.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Możesz spróbować wykorzystać CSS i atrybuty page-break-before, page-break-after i page-break-inside.
Szczegóły tu: http://www.w3.org/TR/CSS21/page.html#page-break-props Ale, różnie to działa w różnych przeglądarkach i może być troche zależne od kodu (tabele czy divy). Innym pomysłem może być robienie z tego PDFa i dopiero jego drukowanie. Wada - więcej roboty, chociaż znajdziesz niezłe biblioteki generujące pdf. Zaleta - masz gwarancję, że wydruk będzie wyglądał tak jak go przygotujesz. pozdr. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 81 Pomógł: 2 Dołączył: 28.03.2003 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli chodzi o pdfa sądzę, że to będzie wersja wyjściowa całości więc i tak będę musiał go wykonać. Tylko nie mam pojęcia jak takiego pdfa generować aby spełniał moje założenie
![]() |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 374 Pomógł: 23 Dołączył: 3.06.2006 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Kiedyś pisalem system do obslugi firmy zajmujacej sie sprzedaza... Wszystko w php i MySQL.
Problem drukowania faktur zlatwilem za pomoca CSS... Aby nie drukowalo adresu i innych dodatkow na fakturze, trzeba bylo usunac to w ustawieniach przegladarki... Jesli chodzi o pdfy... Byly tworzone, a nauczylem sie ich za pomoca topicu przyklejonego do tego forum. Pozatym jesli piszesz system faktur to dla konkretnej firmy, wykorzystanie to ma w jednej firmie, wiec nie musisz w tym momencie dostosowywac tego do kazdej przegladarki... Ten post edytował mokry 28.11.2006, 01:37:19 -------------------- Pomogłem? Podziękuj proszę klikając poniżej "POMÓGŁ" ;)
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 504 Pomógł: 2 Dołączył: 31.03.2006 Skąd: Londyn Ostrzeżenie: (0%) ![]() ![]() |
Ja generuje statystyki w podobny sposob, nie moge zlamac bloku wiec przenosze. Problem byl taki ze jak generuje statystyki 7 kazdego miesiaca to mam kupe miejsca i mi wykresy podnosilo do gory co mi sie nie podobalo. Rozwiazalem to drugujac za kazdym razem 31 divow jeden pod drugiem ale tylko do dnia bierzace mialy visibility: visible, reszta hidden.
Mozesz pokombinowac w ten sam sposob, ja bym jednak traktowal jedna fakture jak jedna strone, (nawet jesli zmiesciliby sie dwie) i wkladal do niej blok o stalej wysokosci (odpowiadajacej stronie A4 czy cos) wtedy bedzie w porzadku, co do generowania PDFa to sa do tego biblioteki, ja osobiscie korzystam z html_to_pdf() i DOMPDF. Jesli interesuje Cie jak to jest realizowane to daj znac, moge sie podzielic spostrzezeniami ![]() Ten post edytował thornag 28.11.2006, 14:04:14 -------------------- "Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"
![]() |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 81 Pomógł: 2 Dołączył: 28.03.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat ja bym jednak traktowal jedna fakture jak jedna strone, (nawet jesli zmiesciliby sie dwie) Nie jestem pewien czy dobrze zrozumiałeś problematykę. Chodzi o to, że jedna faktura może mieć tyle produktów, że może wyjść np. na dwie strony albo i więcej. I są pewne elementy takie jak np. notki pod spodem o artykułach prawnych oraz inne, które nie mogą znaleźć się w części na jednej stronie, a w części na drugiej. Każda faktura stanowi oddzielny pdf z niewiadomą ilością stron, nie da się przewidzieć wysokości wiersza ponieważ opis usługi może być na tyle długi, że znajdzie się w więcej niż jednym wierszu. Jeśli ktoś to rozwiązał i może mi przedstawić swoje rozwiązania będę bardzo wdzięczny ![]() Ten post edytował Kabraxis 29.11.2006, 02:58:33 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Ja załatiwłem to w poniższy sposób. Testowałem pod IE, FF i Operą.
Musisz metodą prób i błędów sprawdzić ile w Twom przypadku zmieści się danych na stronie i odpowiednio pozmieniać wartości w warunkach (34 i 38). Na pierwszej stronie drukowanych jest 34 (bo drukuje jeszcze tyutł nagłówka) wiersze a na każdej następnej 38. -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 81 Pomógł: 2 Dołączył: 28.03.2003 Ostrzeżenie: (0%) ![]() ![]() |
No tak ale jak wspomniałem nie jestem wstanie przewidzieć ile jeden produkt zajmie wierszy, więc to rozwiązanie odpada
![]() |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
No tak ale jak wspomniałem nie jestem wstanie przewidzieć ile jeden produkt zajmie wierszy, więc to rozwiązanie odpada ![]() To przy wywalaniu danych na stronie sprawdzaj długość wiersza. Sprawdź ile znaków mieści Ci się na stronie (uwzględnij szerokość liter: W zajmuje więcej niż N, etc) i sobie dostasuj page_break. -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 81 Pomógł: 2 Dołączył: 28.03.2003 Ostrzeżenie: (0%) ![]() ![]() |
Nie jestem w stanie obliczać szerokości znaków na podstawie ich literek
![]() ![]() Ponawiam pytanie z początku topicu ![]() |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Nie jestem w stanie obliczać szerokości znaków na podstawie ich literek ![]() ![]() Ponawiam pytanie z początku topicu ![]() Obawiam się, że pozostaje Ci tylko obliczanie. Napisz dokładnie jeszcze raz o co Ci chodzi z tym podziałem bo przykład, któy podałeś nie wyjaśnia tego zbyt jasno.. -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 81 Pomógł: 2 Dołączył: 28.03.2003 Ostrzeżenie: (0%) ![]() ![]() |
Jaśniej się nie da...
Wyobraź sobie, że drukujesz kwadraciki (w rzeczywistości to są powiedzmy akapity tekstu). Przy drukowaniu nie możesz dopuścić, żeby kwadracik został wydrukowany po części na jednej stronie, po części na drugiej. Musi być on na jednej stronie w całości. Jeśli na poprzedniej stronie zostało miejsce i mieści się 90% kwadracika nie może on być na niej wydrukowany i ma się wydrukować początku strony kolejnej. |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli na poprzedniej stronie zostało miejsce i mieści się 90% kwadracika nie może on być na niej wydrukowany i ma się wydrukować początku strony kolejnej. Więc moim sposobem to zrobisz.. -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 81 Pomógł: 2 Dołączył: 28.03.2003 Ostrzeżenie: (0%) ![]() ![]() |
Nie bo nie znam wysokości kwadracików...
Nie istnieje żadna metoda drukowania, w której można ustalić takie bloki? Ten post edytował Kabraxis 2.12.2006, 16:51:25 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 20:02 |