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):

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!

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

0

Spróbuj do znacznika body dodać:

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

oraz usunąć dwie ostatnie linie:

popupWin.print();
popupWin.close();
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.

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