HTML-PDF- dla linuxa i mac open source

HTML-PDF- dla linuxa i mac open source
K8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 69
0

Hejka,

Mógłby ktoś mi polecić jakiś dobry wrapper WKHTML? Nie potrzebuję jakiś wodotrysków, może oprócz paginacji. Ma działać pod linuxem oraz MacOS w .Net Core. Widziałem taki wynalazek jak DinkToPdf, ale trochę mnie martwi, że od siedmiu lat nie jest rozwijany...

pozdrawiam

WeiXiao
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5226
0

Z tego co pamiętam to używałem w 2019 tego DinkToPdf na Linuxie i działało - trzeba było tylko brakujące fonty doinstalować do tego linucha

Pytanie czy to ze nie jest rozwijany jest problemem, no bo pdfy chyba aż tak się mocno nie zmieniły, szczególnie że chcesz używać jakichś prostych rzeczy

W najgorszym wypadku mógłby mieć jakieś security vulnerability, ale to już pytanie do ciebie skąd się bierze input do tego pdfa.

AN
  • Rejestracja: dni
  • Ostatnio: dni
0

Z tego, co widzę, WKHTML to jest program konsolowy, wykonywany z linii poleceń. Najprościej to chyba utworzyć proces (obiekt typu Process, funkcja CreateProcess), uruchomić modalnie (w sensie, że program w C# będzie wstrzymany do zakończenia procesu). Nie znam tego programu, jeżeli wymaga pliku HTML i może tylko zapisać plik PDF, to można oczywiście utworzyć plik o losowej nazwie, wstawić HTML, uruchomić WKHTML, odczytać PDF i usunąć te pliki.

A jeżeli istnie możliwość, żeby HTML przekazać przez standardowe wejście zamiast z pliku, a PDF odebrać przez standardowe wyjście zamiast zapisywać do pliku, to sprawa jest jeszcze prostsza, robisz przekierowanie strumieni i do wejścia przekazujesz HTML tak, jak jest, a z wyjścia odbierasz PDF.

Prościej się chyba nie da i nie potrzeba wrappera do C#. A jak muszą być pliki, a będzie to odpalane tysiące razy dziennie, to dobrze jest skonfigurować ram-dysk, będzie to najszybszy możliwy nośnik i z możliwością częstego zapisywania bez ograniczeń (choć zapewne SSD zapewnia podobną wydajność w przeciwieństwie do HDD).

AN
  • Rejestracja: dni
  • Ostatnio: dni
0

Widzę, że WKHTML ma też bibliotekę do języka C, więc możesz zrobić prostą "oprawę", czyli napiszesz bardzo prosty program w C używający tą bibliotekę, który przyjmuje HTML z standardowego wejścia i oddaje PDF na standardowym wyjściu. Ten program uruchomisz poprzez tworzenie procesu w C#.

Jedyne utrudnienie jest takie, że będziesz musiał mieć trzy programy, osobno do Linuxa, osobno do MacOSa x86 i osobno do MacOSa ARM, w zależnosci od systemu, to raz taki, a raz taki prorgam uruchamiać.

Spine
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6964
0

Opisz dokładniej co chcesz zrobić, bo może nawet HTML nie potrzebujesz.
Np. do formularzy SVG się nada. Przygotowany szablon można łatwo uzupełniać danymi tekstowymi.
A do pdf taki dokument przerobisz z linii poleceń:
https://notesofaprogrammer.blogspot.com/2017/03/converting-svg-to-pdf-on-linux-command.html?m=1

Poza tym podobne rzeczy można robić w LaTeXu.

Znalazłem też info jak z Markdown zrobić PDF:
https://www.baeldung.com/linux/pdf-markdown-conversion

K8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 69
0
WeiXiao napisał(a):

Z tego co pamiętam to używałem w 2019 tego DinkToPdf na Linuxie i działało - trzeba było tylko brakujące fonty doinstalować do tego linucha

Pytanie czy to ze nie jest rozwijany jest problemem, no bo pdfy chyba aż tak się mocno nie zmieniły, szczególnie że chcesz używać jakichś prostych rzeczy

W najgorszym wypadku mógłby mieć jakieś security vulnerability, ale to już pytanie do ciebie skąd się bierze input do tego pdfa.

Udało mi się uruchomić DinkToPdf i jeżeli chodzi o samą konwersję to więcej mi nie potrzeba - ma wszystko. Natomiast mam problem techniczny. Jak zrobiłem aplikację konsolową stricte na bazie przykładowego kodu, który podają, to zachowuje się to tak, że jak ją uruchomię, to się wykonuje cała konwersja i proces stoi, aż wcisnę Enter. Myślałem, że to kwestia mojego środowiska - WKHTML jest jakoś portowany na maca, ale na linuxie zachowuje się to dokładnie tak samo. Pół biedy na konsoli, ale jak zintegrowałem konwerter z moją aplikacją jako serwis, to w momencie wywołania

Kopiuj
byte[] pdf = converter.Convert(doc);

Wszystko staje. Czy miałeś może podobne przygody?

pozdrawiam

Spine
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6964
0

Kiedyś w projekcie Django generowałem PDFy przy użyciu Pythonowej wersji FPDF.
Zobacz: https://github.com/reingart/pyfpdf

K8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 69
0
WeiXiao napisał(a):

Nie spotkałem się z tym, ale wpisałem dinktopdf hang

https://stackoverflow.com/questions/75534946/second-call-to-dinktopdf-pdf-library-fails

https://github.com/rdvojmoc/DinkToPdf/issues/62

https://stackoverflow.com/questions/55721600/dinktopdf-pdf-generation-only-works-once-on-azure-before-giving-502-errors

https://stackoverflow.com/questions/54809737/processing-of-converting-the-html-to-pdf-takes-a-lot-of-time-by-using-dinktopdf

No tutaj jest dziwna sytuacja. Ten sam kod jest w obu aplikacjach - ten sam framework, ten sam materiał wejściowy. Zrobiłem logowanie w callbacku postępu i w konsolowej idzie do końca, a w serwisie dochodzi do 10% i proces zawisa... Może to dlatego, że wywołuję ten serwis poprzez xunit i fixture.

K8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 69
0

Okazało się, że winien jest xunit. Jak wywołuję to samo, ale z innej aplikacji, to wszystko gra.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.