Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Frameworki _ [Symfony]wkhtmltopdf oraz twig

Napisany przez: PawelC 13.06.2018, 19:46:43

Witam,
Mam następujący problem. Posiadam w bazie danych tabele meeting, w niej id, guest,host, start_time,end_time oraz table_numer. Do generowania używam wkhtmltopdf oraz symfony 3, samo generowanie pdf to żaden problem, niestety Twig nie chce ze mną współpracować. Chciałbym zrobić tak, aby najpierw wygenerowało spotkania dla stolika 1, później dla 2 itd. Cały proces powinien wyglądać tak:
- Początek generowania pdf dla stolika 1
- Zmienia się stolik z 1 na 2, następuje page break i zaczyna generować nową stronę ze spotkaniami dla stolika 2 itd

Problem polega na tym, że generuje mi pdf dla stolika 1, po czym dorzuca 1 spotkanie dla stolika 2. Zaczyna generować pdf dla stolika 2, na koniec wrzuca mi 1 spotkanie ze stolika 3. Tak wygenerowany pdf wygląda tak: http://cyrklaf.eu/table.pdf
Nie mam pojęcia gdzie jest błąd, że zawsze pobiera jedno spotkanie z innego stolika. Mój kod Twig bo w nim leży problem:

  1. <!doctype html>
  2.  
  3. <http://december.com/html/4/element/html.html lang="pl">
  4. <http://december.com/html/4/element/head.html>
  5. <http://december.com/html/4/element/meta.html charset="utf-8">
  6. <http://december.com/html/4/element/style.html>
  7. body {
  8. background: #FFF;
  9. }
  10.  
  11. .page {
  12. page-break-after: always;
  13. }
  14. </http://december.com/html/4/element/style.html>
  15. </http://december.com/html/4/element/head.html>
  16. <http://december.com/html/4/element/body.html>
  17. {% set last_table = 1 %}
  18. {% for meeting in meetings %}
  19. <http://december.com/html/4/element/div.html class="page">
  20. {{ meeting.guest }} {{ meeting.host }} stolik obecny {{ meeting.tableNumber }} stolik poprzedni {{ last_table }}
  21.  
  22. {% if meeting.tableNumber != last_table %} // Jeżeli obecny stolik jest inny od ostatniego powinien zakończyć generowanie i rozpocząc dla kolejnego stolika
  23. {% set last_table = meeting.tableNumber %}
  24. </http://december.com/html/4/element/div.html>
  25. {% endif %}
  26.  
  27. {% endfor %}
  28. </http://december.com/html/4/element/body.html>
  29. </http://december.com/html/4/element/html.html>

Chciałbym aby po skończeniu generowania spotkań dla stolika 1, zaczął generować kolejną stronę ale dla stolika 2 itd

Napisany przez: Neutral 13.06.2018, 19:59:14

Musisz napisać w skrypcie, aby pętla jechała od iteracji drugiej (stolika drugiego), a nie od nowa od pierwszego (pierwszej iteracji).

Musisz chyba dodać warunek w tym for, przykład z doc.:

Kod
{% for user in users if user.active %}
// ...
{% endfor %}


Czy nie powinno być:
Kod
{% for meetings in meeting %}

?

Pokaż jakie masz wartości w tym meetings, meeting, itd.. (pokaż tylko 2-3 początkowe wartości).

A może po prostu tak napisz:

PSEUDO-CODE:
Kod
{% set last_table++ %}

Zinkrementuj zmienną, żeby liczyła od drugiego stolika, a nie od pierwszego.

Gdzie w poniższym kodzie masz break'a, czy coś:
Kod
{% if meeting.tableNumber != last_table %}

?

Napisany przez: PawelC 13.06.2018, 20:21:59

Jak zrobię tak jak napisałeś tzn

  1. for meetings in meeting
to dostaję Variable "meetings" does not exist.

Zrzut bazy danych z tą tabelą: cyrklaf.eu/Dump20180613.sql
Baza wygląda tak:


Napisany przez: Pyton_000 13.06.2018, 20:27:03

Kod
<div class="page">
{% for meeting in meetings %}
    {{ meeting.guest }} {{ meeting.host }} stolik obecny {{ meeting.tableNumber }} stolik poprzedni {{ last_table }}

    {% if meeting.tableNumber != last_table %} // Jeżeli obecny stolik jest inny od ostatniego powinien zakończyć generowanie i rozpocząc dla kolejnego stolika
        {% set last_table = meeting.tableNumber %}
        </div>
        <div class="page">
    {% endif %}

{% endfor %}
</div>

l
Teraz musisz tylko sobie dodać warunek żeby nie generowało Ci ostatniej pustej strony.

Napisany przez: PawelC 13.06.2018, 20:37:39

Niestety efekt jest ten sam http://cyrklaf.eu/table2.pdf sad.gif

Napisany przez: Pyton_000 13.06.2018, 20:40:34

Wypluj to co twig generuje do HTML i pokaż

Napisany przez: PawelC 13.06.2018, 20:44:56

  1. """
  2. <!doctype html>\n
  3. \n
  4. <http://december.com/html/4/element/html.html lang="pl">\n
  5. <http://december.com/html/4/element/head.html>\n
  6. <http://december.com/html/4/element/meta.html charset="utf-8">\n
  7. <http://december.com/html/4/element/style.html>\n
  8. body {\n
  9. background: #FFF;\n
  10. }\n
  11. \n
  12. .page {\n
  13. page-break-after: always;\n
  14. }\n
  15. </http://december.com/html/4/element/style.html>\n
  16. </http://december.com/html/4/element/head.html>\n
  17. <http://december.com/html/4/element/body.html>\n
  18. <http://december.com/html/4/element/div.html class="page">\n
  19. ipsum lorem stolik obecny 1 stolik poprzedni 1\n
  20. <http://december.com/html/4/element/br.html/>\n
  21. \n
  22. dolor sit stolik obecny 1 stolik poprzedni 1\n
  23. <http://december.com/html/4/element/br.html/>\n
  24. \n
  25. lorem puszek stolik obecny 1 stolik poprzedni 1\n
  26. <http://december.com/html/4/element/br.html/>\n
  27. \n
  28. laura karolina stolik obecny 1 stolik poprzedni 1\n
  29. <http://december.com/html/4/element/br.html/>\n
  30. \n
  31. sit laura stolik obecny 2 stolik poprzedni 1\n
  32. <http://december.com/html/4/element/br.html/>\n
  33. \n
  34. \n
  35. </http://december.com/html/4/element/div.html>\n
  36. <http://december.com/html/4/element/div.html class="page">\n
  37. dolor reverse stolik obecny 2 stolik poprzedni 2\n
  38. <http://december.com/html/4/element/br.html/>\n
  39. \n
  40. reverse pawel stolik obecny 2 stolik poprzedni 2\n
  41. <http://december.com/html/4/element/br.html/>\n
  42. \n
  43. puszek lorem stolik obecny 2 stolik poprzedni 2\n
  44. <http://december.com/html/4/element/br.html/>\n
  45. \n
  46. pawel pysia stolik obecny 3 stolik poprzedni 2\n
  47. <http://december.com/html/4/element/br.html/>\n
  48. \n
  49. \n
  50. </http://december.com/html/4/element/div.html>\n
  51. <http://december.com/html/4/element/div.html class="page">\n
  52. pysia laura stolik obecny 3 stolik poprzedni 3\n
  53. <http://december.com/html/4/element/br.html/>\n
  54. \n
  55. </http://december.com/html/4/element/div.html>\n
  56. </http://december.com/html/4/element/body.html>\n
  57. </http://december.com/html/4/element/html.html>
  58. """

Napisany przez: Pyton_000 13.06.2018, 21:07:19

No to już powinieneś widzieć rozwiązanie. Najpierw wyświetlasz a potem wstawiasz separator strony wink.gif

Napisany przez: PawelC 13.06.2018, 21:10:40

Przyznam szczerze,  że nie widzę rozwiązania ;/ długo się już z tym bawię i nadal nic

Napisany przez: Pyton_000 13.06.2018, 21:15:55

No przecież ci napisałem gdzie masz błąd.

Napisany przez: LowiczakPL 19.06.2018, 17:58:38

Ja używam w Symfony i w Laravelu TCPDF-a zainstaluj sobie paczkę i będziesz miał po problemie.

TCPDF pozwala generować PDF-y z kodu HTMLa, więc masz pole do popisu.

https://tcpdf.org/examples/example_006/

https://tcpdf.org/examples/example_061/

https://github.com/tecnickcom/TCPDF


Napisany przez: Pyton_000 21.06.2018, 07:34:00

@LowiczakPL naucz się czytać w końcu i albo odpowiadaj na pytanie które zostało zadane albo nie odpowiadaj wcale bo twoja odpowiedź NIC nie wniosła do tematu. BA nawet nie rozwiąże problemu bo nie jest on związany z programem którego używa a z KODEM HTML.

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