window.print() otwiera pusty obraz, ctrl + p otwiera zdjęcia

window.print() otwiera pusty obraz, ctrl + p otwiera zdjęcia
0

Witam,

Przez zapytanie ajax pobieram z serwera ścieżki do obrazków które chce wydrukować.
Ogólnie wszystko działało, ale po aktualizacji chrome w niektórych miejscach szwankuje.

Działa to w ten sposób, że otwierane jest okno ze zdjęciami a na tym oknie automatycznie okno drukowania.
Po wyłączeniu okna drukowania, okno ze zdjęciami zostaje również automatycznie wyłączone.
Czyli tak naprawdę to okno ze zdjęciami jest tylko po to, żeby do wydruku szło tylko to co wyślę do tego okna.

Problem w tym, że nie działa to tak jak powinno bo to okno pod oknem drukowania jest całe białe a w oknie drukowania jest pusta strona.

Jednakże jeżeli z kodu pominąć ten kawałek (czyli otwieranie okna drukowania z poziom javascript):

Kopiuj
popupWin.print();
popupWin.close();

To otwiera się nowe okno ze zdjęciami (i faktycznie zdjęcia tam są - czyli to co przesyła serwer do frontu działa poprawnie), klikam ctrl + p i zdjęcia trafiają do okna drukowania!

Kopiuj
function PrintSingleBadge(withPrinting, guestTypeId, guestId) {

    if (withPrinting == "True") {
        $.ajax({
            url: "/Guests/PrintSingleFrontBadgeTemplate",
            type: "post",
            data: { guestTypeId: guestTypeId, guestId: guestId },
            success: function (response) {
                var popupWin = window.open('', '_blank', 'width=' + response.width + ', height=' + response.height);
                popupWin.document.open();
                popupWin.document.write('<html><head></head><body style="margin: 0px;"><img style="width:99.5%" alt="Embedded Image" src="data:image/png;base64,' + response.frontBadgeTemplate + '" /></body></html>');
                popupWin.document.close();
                popupWin.print();
                popupWin.close();
            }
        });
    }
};

Dlaczego tak się dzieje, dlaczego jak otwieram z javascript nowe okienko ze zdjęciami i kliknę ctrl + p to zdjęcia lądują w oknie drukowania,
a dlaczego jak z javascript wywołuje okno drukowania to jest pusta strona?

Dzięki

wisensane
  • Rejestracja:około 8 lat
  • Ostatnio:ponad 3 lata
  • Postów:51
0

Spróbuj do znacznika body dodać:

Kopiuj
onload="window.print(); window.close();"

oraz usunąć dwie ostatnie linie:

Kopiuj
popupWin.print();
popupWin.close();
AD
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 11 godzin
  • Postów:481
0

Tak jak zasugerowano wyżej - za pewne jest to problem z kolejnością wykonywanych operacji i ich asynchronicznością. Po prostu obrazek załaduje się później niż JavaScript wykona metodę print() na oknie przez co masz pustą stronę do drukowania. Musisz pokombinować z eventami load obrazka albo pomyśleć nad wrzuceniem contentu do tego okienka w inny sposób.

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.