Печать в PDF шаблона Django с помощью интерфейса Google Chrome Remote

У меня есть сервер Django (Django==1.11.7)

Этот сервер Django работает на виртуальной машине ( myvm), и я обращаюсь к его содержимому с хост-компьютера (не очень актуально, просто чтобы дать некоторый контент тому, что означает myvm)

Этот сервер Django обслуживает шаблон.

Внутри этого шаблона я ссылаюсь на некоторые статические файлы. Например:

<link rel="stylesheet" href="http://myvm:8080/static/css/mycss.css">
<img src="http://myvm:8080/static/images/myimage.png">

Если я curl или запросите эти файлы у python например, он работает, как с моей хост-машины, так и с виртуальной машины.

requests.get("http://myvm:8080/static/css/mycss.css").text

Это, например, возвращает ожидаемый контент.

В браузере HTML отображается правильно.

Доступ к моему серверу Django как с хоста, так и с виртуальной машины приводит к совершенно хорошей странице.

Более того, копирование исходного кода страницы и доступ к файлу также отображаются правильно. Например, если я буквально скопирую, вставьте источник из браузера в mysite.html и посмотри на это, file:///some/local/path/mysite.html это также делает правильно.

Просматривая логи Django, я вижу такие сообщения:

[15/Dec/2017 00:00:00 - 1513349355] INFO [django.server:124] "GET /static/images/myimage.png HTTP/1.1" 200 68

То же самое для CSS или сценариев. Статический файл mysite.html видит ссылки на файлы на этом сервере, запрашивает их и успешно принимает их.

То же самое происходит, если я выключаю сервер Django и просто python -m SimpleHTTPServer в каталоге, где у меня есть мой статический каталог.

Если я заменю myvm:8080 с myvm:8000Я получаю эту сторону сервера, и она отрисовывается отлично.

IP - - [15/Dec/2017 00:00:00] "GET /static/css/mycsscss HTTP/1.1" 200 -

Все идет нормально.

Проблемы возникают, когда я пытаюсь распечатать mysite.html в PDF.

Таким образом я пытаюсь печатать в PDF. у меня есть node сервер прослушивает порт 3000 для запросов POST. Он ожидает JSON, который содержит путь к файлу. Получив этот путь, он начнет процесс печати этого файла в PDF-файл, используя Chrome (59.0) в автономном режиме и Chrome Remote Interface ("chrome-remote-interface": "0.22.0").

Так, например, если я отправлю:

requests.post('http://myvm:3000', json={"file_name": "/some/local/path/mysite.html"})

node Сервер будет делать что-то вроде:

new CDP(
    {port: google_chrome_port},
    generate_pdf({url: 'file:///some/local/path/mysite.html', port: google_chrome_port})
)

Он подключается к работающему экземпляру Chrome Headless, и имеет обратный вызов generate_pdf что говорит Chrome перейти к данному URL и один раз loadEventFired срабатывает, он должен вызвать printToPDF,

Процесс сам по себе работает, так как в нем создается PDF с текстом. Тем не менее, ни стили, ни изображения, ни статические файлы в целом не загружаются, а это означает, что созданный PDF-файл выглядит ужасно.

Сначала я попытался отобразить шаблон как есть, со ссылками на myvm:8080 (сервер Django).

Я получаю журналы, которые говорят это:

[15/Dec/2017 00:00:00 - 1513351221] WARNING [django.server:124] "GET http://myvm:8080/static/css/mycss.css HTTP/1.1" 404 1760

Подобные журналы происходят для изображений или сценариев. Теперь, что я заметил, но не понимаю.

Во-первых, если я скопирую и вставлю адрес (http://myvm:8080/static/css/mycss.css) и сверните его, я получаю ожидаемый контент. Почему это 404?

Во-вторых, в отличие от запросов, сделанных файлом при визуализации в браузере, он имеет полный путь, а не просто static/css/mycss.css, Почему это происходит?

То, что я попробовал после того, как обслуживал статические файлы, используя python -m SimpleHTTPServer

Я изменил свой источник для ссылки на файлы с myvm:8000, Опять же, это не работает. В отличие от сервера Django, этот тип сервера вообще не подвержен запросам.

Если я скручиваюсь для http://myvm:8000/static/css/mycss.css например, я вижу журнал как IP - - [15/Dec/2017 00:00:00] "GET /static/css/mycss.css HTTP/1.1" 200 - и если я запрашиваю что-то, что не существует, я получаю IP - - [15/Dec/2017 00:00:00] "GET /static/css/does_not_exist.css HTTP/1.1" 404 -

Тот факт, что я не вижу никаких журналов, говорит мне, что Chrome не пытается загрузить эти файлы. Почему это происходит?

Точно так же я пытался изменить mysite.html ссылаться на файлы статически

<img src="static/images/myimage.png">

HTML правильно отображается в браузере, однако Chrome не загружает изображения, CSS и т. Д.

Я также пытался ждать дольше (вместо запуска рендеринга PDF, когда loadEventFired бывает, я жду несколько секунд) но и это оказалось бесполезным.


Tl; Dr:

Как заставить Google Chrome Headless загружать статические файлы?

Спасибо!

0 ответов

Другие вопросы по тегам