generowanie pliku PDF za pomocą biblioteki mPDF - instalacja

0

Chcę wygenerować plik na podstawie danych z formularza. Jeżeli dobrze rozumiem, język sam z siebie (PHP ani JS) tego nie zrobi, konieczna jest dodatkowa biblioteka. A konkretnie mPDF z powodu polskich znaków. Czy dobrze rozumiem, że paczkę z poniższego linku:
https://php-download.com/package/mpdf/mpdf lub https://cmext.vn/download/mpdf-joomla-library
wystarczy po prostu umieścić w tym samym katalogu, w którym są pliki hmtl, a w kodzie użyć polecenia requre w celu dołączenia odpowiedniego pliku php?

A pytam, bo tutaj to tak klarowanie nie jest opisane:
https://mpdf.github.io/installation-setup/installation-v7-x.html

Dlaczego tutaj mamy kilka plików w ramach jednej biblioteki gdy tymczasem FPDF liczy tylko jeden plik php?

0

Zazwyczaj trzeba kilka kroków wykonać

  1. Podlinkowane pliku/plików (tak jak wymaga tego dokumentacja)
    To gdzie będą pliki nie ma znaczenia (mogąbyć np w jakimś katalogu), o ile wskażesz prawidłową ścieżkę.
  2. Stworzenie instancji klasy
  3. Ustawienie wartości podstawowych, przy wykorzystaniu dostarczonych metod
    tutaj też zależy od tego z jakim środowiskiem mamy o czynienia - ale np. Tytuł dokumentu, autor, orientacja dokumentu, ustawienia marginesów
  4. Wygenerowanie dokumentu lub jego zapis

Co do tworzenia PDF, od siebie mogę polecić TCPDF
https://tcpdf.org/examples/

0

Nie ogarniam o co chodzi z tym composerem.Jak to ma się to wrzucenia na serwer pliku php i jego podlinkowania w index.html/index.php?

1

Czego nie ogarniasz?

  1. Pobierasz archiwum
    https://php-download.com/package/mpdf/mpdf#all-versions

  2. Wypakowujesz i umieszczasz w katalogu z Twoimi plikami

  3. Tworzysz plik index.php , a w jego treści dodajesz:

<?php
require_once("vendor/autoload.php"); 
$mpdf = new \Mpdf\Mpdf();
$mpdf->WriteHTML('<h1>Hello world!</h1>');
$mpdf->Output();
?>

Tyle. Wynikiem jest takie coś
screenshot-20210105172844.png

0

To co wyżej napisałeś jest oczywiste. Ale co to jest ten composer? ;)

2

Composer to program do zarządzania pakietami (bibliotekami) dla PHP.

Kiedyś żeby zainstalować sobie jakąś bibliotekę, trzeba było robić to, co pokazał @NewUser2k13 - wejść na stronę WWW, pobrać archiwum, rozpakować do odpowiedniego katalogu a następnie dołączyć do naszego skryptu za pomocą require.

Composer drastycznie to upraszcza: zamiast bawić się w pobieranie, wchodzisz do konsoli i za pomocą jednej komendy np

composer require nazwa_pakietu "symbol_wersji"

I tyle, reszta załatwiona automatycznie. Sam pobierze bibliotekę - a jeśli wymaga ona innych, dodatkowych (czyli: ma zależności) - to je też pobierze i dołączy we właściwej kolejności.
Nie musisz przeglądać ręcznie bibliotek/pakietów, żeby je zaaktualizować - wystarczy jedno polecenie. To samo jeśli chcesz jakiś wyłączyć lub usunąć.
Jedyne, co musisz zrobić to zaimportować do swojego projektu (include() albo require()) plik autoload.php, który jest generowany przez Composera.

Warto się tego nauczyć, bo czasy ręcznego pobierania bibliotek dawno minęły. Nikt już tak nie robi. Nie trzeba już wrzucać na gita wszystkich plików i bibliotek - wystarczy samo źródło oraz composer.json. Dzięki temu stawianie cudzych projektów jest bajecznie proste - pobierasz minimum plików, resztę dociągasz komendą

composer install

i tyle.

0
jagoslau napisał(a):

Composer to program do zarządzania pakietami (bibliotekami) dla PHP.

Tylko jak się do niego dostać w takich sytuacjach:
a) korzystam z zewnętrznego serwera obsługującego php (wrzucam tam pliki i nic więcej)
b) mam serwer u siebie np PHPAdmin

2

Wtedy jeśli nie masz dostępu do jakiejś usługi typu SSH po prostu wrzucasz przygotowane lokalnie pliki.
Natomiast lokalnie korzystasz z dobrodziejstw composera w postaci instalacji czy aktualizacji pakietów.

0

Aaaaaaaaaaaaa czyli loguje się przez Putty w przypadku serwera zdalnego.

0

Jeśli masz dostęp.

1

Faktycznie, jakie to proste :)

Do głównego katalogu (tam, gdzie jest index.html i reszta) wrzuciłem za pomocą WinSCP katalog vendor i działa. Polskie znaki również.

0

Całość fajnie działa, niebawem pliki wrzucę na oficjalny serwer. Pytanie mam tylko odnośnie ścieżek do poszczególnych arkuszy CSS. Wszystko mam podzielone na katalogi: katalog na skrypty JS, skrypty PHP oraz CSS. Tylko pliki HTML siedzą w głównym katalogu.
PDF generowany przez bibliotekę mPDF korzysta z arkusza, do którego ścieżka jest taka:

$stylesheet = file_get_contents('../arkusze_CSS/arkusz.css');

Czy to "jest zgodne ze sztuką"? Bo arkusz CSS siedzi wyżej, w równoległym katalogu.

0

Miałem problem z uruchomieniem tego na serwerze, gdzie był PHP 5.6.40. Więc pobrałem starszą wersję mPDF tj. 6.1.4 (wersja > 7 nie zadziała na PHP w wersji 5) i tak zmodyfikowałem kod PHP:

$stylesheet = file_get_contents('arkusz.css');

$mpdf = new \mPDF();
$mpdf->WriteHTML($stylesheet, 1);
$mpdf->WriteHTML($html, 0);
$mpdf->Output('plik.pdf', 'I');

I działa :)

https://mpdf.github.io/css-stylesheets/introduction.html

0

Lepiej zobacz czy na tym serwerze nie dasz rady uruchomić nowszej wersji PHP. Coś od 7.3 wzwyż. 5.6.X jest już dawno temu End Of Life i nie zaleca się już używania go.

0

Na chwilę obecną nie ma takiej możliwości. Ale skrypty na wersję 7 przecież już mam sprawdzone. Także w razie czego kopiuj&wklej :)

0

Każdy projekt z czasem się rozrasta. Za moment będziesz potrzebował paczki X, potem Y i za pół roku będziesz wszystko przepisywał.

0

Na początku kodu mam instrukcję która sprawdza, czy krytyczne pole formularza jest wypełnione (isset()). Jeżeli nie, to wyświetlam komunikat, a potem wracam do formularza (echo, sleep, header). Całość jest w IFie:

If not OK
{komunikat + przekierowanie}

Dobrze myślę, że nawet jak powyższa instrukcja zadziała, to dopóki fragment kodu odpowiedzialny za generowanie kodu nie będzie w ELSE:

If not OK
{komunikat + przekierowanie}
else
{generuj}

To serwer tak czy inaczej na darmo będzie "mielił" ten formularz?
Chodzi mi po prostu o to, co się dzieje po instrukcji header. Skrypt dalej się wykonuje, czy stop?

0

Jak dobrze zrozumiałem, to po prostu po header dajesz exit i tyle.

if($isWrong)
{
    header();
    exit();
}
else
{
    doTheJob();
}

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