Program nie może znaleźć zewnętrznych fontów, kiedy jest uruchamiany na Linuksie; uruchamiany na Windowsie je widzi (iText BaseFont)

Odpowiedz Nowy wątek
2018-12-03 12:20
0

Zbudowałem swoją pierwszą apkę okienkową i jedną z jej funkcji jest generowanie PDFów. Aby generować za pomocą biblioteki iText polskie znaki, zassałem do programu zewnętrzne czcionki z polskimi znakami za pomocą konstrukcji:

BaseFont fontCourier= BaseFont.createFont("assets" + File.separator + "fonts" + File.separator + "courier.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

Po zbudowaniu paczki .jar wrzucam do jej katalogu folder ./assets/fonts.Na Windowsie to działa bez problemu, na Linuksie jednak przy generowaniu PDFa otrzymuję błąd:

java.io.IOException: assets/fonts/courier.ttf not found as file or resource.

Ustawienie uprawnień wszystkich plików i katalogów projektu na maksymalne nie pomogło. Może ktoś bardziej doświadczony podpowie mi dlaczego tak się dzieje i jak temu zaradzić? A może mogę jakoś umieścić te czcionki wewnątrz JARa i zrobić do nich odniesienie w BaseFont?

Pozostało 580 znaków

2018-12-03 13:43
0

Szczęśliwie udało mi się rozwiązać problem :) Ewidentnie przyczyną było jakieś zamieszanie ze ścieżkami. Pobrałem więc ścieżkę do katalogu, w którym znajduje się projekt w następujący sposób

        String path = MojaKlasa.class.getProtectionDomain().getCodeSource().getLocation().getPath();
        String decodedPath = URLDecoder.decode(path, "UTF-8");
        decodedPath = decodedPath.substring(0, decodedPath.lastIndexOf(File.separator));

I poprzedziłem nią ścieżkę assets/fonts w BaseFont.

BaseFont fontCourier= BaseFont.createFont(decodedPath + File.separator + "assets" + File.separator + "fonts" + File.separator + "courier.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

Hula aż miło :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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