2017-03-13 30 views
5

Używam wkhtmltopdf przez snappy w moim projekcie. Na moim komputerze lokalnym wyjście jest poprawne: https://www.dropbox.com/s/ml9cp2pa6d8wja5/Zaznaczenie_100.png?dl=0wkhtmltopdf - ta sama konfiguracja różni się wyjściem

ale gdy wdrożyć projekt na serwerze pdf szuka bardzo różne, prawdopodobnie szerokość rzutni jest inna: https://www.dropbox.com/s/8g0c29bzaxltyb9/170311_123139_4775.jpg?dl=0

Oba systemy wykorzystują dokładnie taka sama konfiguracja do generowania pliku pdf.

Moje pytania są następujące:

  • w jaki sposób mogę sprawdzić, jaka jest domyślna konfiguracja wkhtmltopdf na konkretnej maszynie?
  • Jak zmienić rozmiar widocznego obszaru, aby moje wyniki były dokładnie takie same na różnych komputerach?

Ustaw ręcznie szerokość i wysokość strony wyjściowej (odpowiednio 21 cm i 50 cm). Próbowałem różnych kombinacji z parametrem DPI, ale wydaje się, że nie ma ono żadnego efektu.

Używam wrappera wkhtmltpdf PHP - snappy - ale sprawdziłem i otrzymałem takie same dane wyjściowe w konsoli, więc problem jest związany z wkhtmltopdf, nie jest on zgryźliwy.

+0

Twoje łącza Dropbox nie działają. Być może powinieneś ponownie załadować swoje obrazy za pomocą pola edycji, które hostowałoby Twój obraz na serwerze imgurowania Stack Overflow. –

+0

Dzięki, naprawiono! – Gacek

+0

Czy możesz potwierdzić, że dwie wersje na wkhtmltopdf są takie same? – Ruslan

Odpowiedz

0

Jedną z głównych rzeczy, która wydaje się różnić w wyjściach PDF, jest czcionka. wkhtmltopdf wymaga zainstalowania czcionek w systemie operacyjnym w taki sam sposób, w jaki przeglądarka tego wymaga. Możliwe, że różnice w odstępach i rozmiarach czcionek wpływają na układ strony. Najpierw sprawdź, jakich czcionek chcesz użyć w pliku źródłowym i zainstaluj je na swoim serwerze. Dobrym początkiem jest zainstalowanie podstawowych czcionek Microsoft z here lub z repozytoriów dystrybucji serwera.

Alternatywnym rozwiązaniem jest użycie @font-face dyrektyw w swoich arkuszach plik źródłowy do niej link do czcionek z adresu URL, bez konieczności instalowania ich na serwerze:

@font-face { 
    font-family: 'Roboto'; 
    font-style: normal; 
    font-weight: 400; 
    src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v15/CWB0XYA8bzo0kSThX0UTuA.woff2) format('woff2'); 
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; 
} 

W przypadku czcionek internetowych Google, masz może zamiast importować swoje arkusze stylów:

<link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet" /> 

Inną rzeczą jest sprawdzenie wersje wkhtmltopdf na stacji roboczej i serwera. Po uruchomieniu wkhtmltopdf --version dowiesz się o aktualnie zainstalowanej wersji. Może się zdarzyć, że na twoim serwerze działa nieaktualna wersja pliku wkhtmltopdf. Najłatwiejszym sposobem zainstalowania aktualnej wersji pliku wkhtmltopdf z potrzebnymi funkcjami jest here, gdzie można pobrać statyczne pliki binarne dla dowolnej dystrybucji.

Ostatnią rzeczą, którą należy wypróbować, jest użycie różnych argumentów: --margin-top, --margin-right, --margin-bottom i --margin-left. Istnieje również flaga o nazwie --viewport-size, która może pomóc w uzyskaniu lepszych wyników.

wkhtmltopdf --viewport-size 1024x768 page.html output.pdf 

Jeśli używasz tej samej wersji wkhtmltopdf zarówno na stacji roboczej i serwera, jednak te opcje konfiguracyjne nie powinna mieć znaczenie, jak podano używasz tej samej konfiguracji zarówno już.

+0

Czcionki nie są problemem. Próbowałem - flagę rozmiaru podglądu, ale wydaje się, że jest martwa - brak efektu. Marginesy są ustawione tak samo na obu komputerach. – Gacek

+0

@Gacek Jakie wersje pliku wkhtmltopdf znajdują się na twoim serwerze i stacji roboczej? I skąd je zainstalowałeś? –

0

Aby utworzyć kopię zapasową Candy Gumdrop, spróbowaliśmy marginesów, ale naszą odpowiedzią okazało się, że administrator ponownie wykorzystał 32-bitową kopię pliku wkhtmltopdf na serwerze produkcyjnym, a nie wersję 64-bitową, której użyłem. Wszystkie wyniki "wkhtmltopdf --version" muszą być zgodne, a nie tylko numer wersji.