wkhtmltopdf(wicked_pdf) + 绘制地图(最好是Mapbox)
Wkhtmltopdf (wicked_pdf) + drawing maps (preferably Mapbox)
有人可以帮我选择合适的工具来绘制 PDF 地图吗?
我在 Rails 应用程序中使用 wicked_pdf on wkhtmltopdf 生成 PDF。作为地图工具,我更喜欢使用 Mapbox。
到目前为止,我仅通过使用 Mapbox Static API 设法将地图放入 PDF 格式 - 所以我在后端获取原始 PNG,将其转换为 base64 并传递给视图并进行渲染并很好地转换为 pdf。
但是问题是我想从一个大的 GeoJSON 在地图上绘制一个图层,我使用的端点是一个 GET 端点 - 它支持在 URL 中传递 GeoJSON 但使用我的数据超出 URL 的长度。
所以我考虑过使用 MapboxGL JS - 使用 npm 将其加载到应用程序,然后使用 wicked_pdf_javascript_include_tag
。但是我无法访问 mapboxgl
变量 - 我得到 ReferenceError: Can't find variable: mapboxgl
(其他库,如 lodash 及其 _
var 可以通过这种方式访问)。我也尝试过使用 CDN,情况是一样的 - ReferenceError(虽然它只在我为测试创建的 html 文件中工作)。
所以,总结一下。我应该如何在视图中加载mapboxgl js?
如果不可能,您会建议使用哪些其他工具在 PDF 中包含带有 GeoJSON 图层的地图?
请查找附加的代码片段。
布局:
<!doctype html>
<html>
<head>
<meta charset='utf-8' />
<%= yield :head %>
<%= yield :styles %>
</head>
<body>
<div id="content">
<%= yield %>
</div>
</body>
</html>
查看:
<% content_for :head do %>
<%= wicked_pdf_stylesheet_link_tag "mapbox-gl/dist/mapbox-gl" %>
<%= wicked_pdf_javascript_include_tag "mapbox-gl/dist/mapbox-gl" %>
<% end %>
...
<div id="map" style="width: 100%;height: 300px;"></div>
<script>
try {
mapboxgl.accessToken = 'xxx';
var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v11',
center: [-74.50, 40],
zoom: 9
});
} catch(e) {
var map = document.getElementById('map');
map.innerHTML = e;
}
</script>
这导致 ReferenceError: Can't find variable: mapboxgl
在我的 PDF 中呈现。
我在 Mapbox (https://github.com/mapbox/mapbox-gl-js/issues/8719) 中打开了一个问题,但是他们不支持这个。
因为我有使用 wkhtmltopdf 构建的功能,所以我只使用 Puppeteer 来渲染地图(带有 Mapbox tiles 的 Leaflet)并且我将转换为 Base64 的屏幕截图传递给 wicked_pdf 的视图。
Puppeteer/Leaflet/Mapbox set 效果很好,我得到了一张用 GeoJSON 图层渲染的地图。
另请参阅附件中关于在 Rails 和 Heroku 上设置 Puppeteer 的精彩文章:https://www.forsbergplustwo.com/blogs/news/pdf-generation-with-chrome-headless-in-ruby-using-puppeteer-on-heroku
有人可以帮我选择合适的工具来绘制 PDF 地图吗?
我在 Rails 应用程序中使用 wicked_pdf on wkhtmltopdf 生成 PDF。作为地图工具,我更喜欢使用 Mapbox。
到目前为止,我仅通过使用 Mapbox Static API 设法将地图放入 PDF 格式 - 所以我在后端获取原始 PNG,将其转换为 base64 并传递给视图并进行渲染并很好地转换为 pdf。
但是问题是我想从一个大的 GeoJSON 在地图上绘制一个图层,我使用的端点是一个 GET 端点 - 它支持在 URL 中传递 GeoJSON 但使用我的数据超出 URL 的长度。
所以我考虑过使用 MapboxGL JS - 使用 npm 将其加载到应用程序,然后使用 wicked_pdf_javascript_include_tag
。但是我无法访问 mapboxgl
变量 - 我得到 ReferenceError: Can't find variable: mapboxgl
(其他库,如 lodash 及其 _
var 可以通过这种方式访问)。我也尝试过使用 CDN,情况是一样的 - ReferenceError(虽然它只在我为测试创建的 html 文件中工作)。
所以,总结一下。我应该如何在视图中加载mapboxgl js?
如果不可能,您会建议使用哪些其他工具在 PDF 中包含带有 GeoJSON 图层的地图?
请查找附加的代码片段。
布局:
<!doctype html>
<html>
<head>
<meta charset='utf-8' />
<%= yield :head %>
<%= yield :styles %>
</head>
<body>
<div id="content">
<%= yield %>
</div>
</body>
</html>
查看:
<% content_for :head do %>
<%= wicked_pdf_stylesheet_link_tag "mapbox-gl/dist/mapbox-gl" %>
<%= wicked_pdf_javascript_include_tag "mapbox-gl/dist/mapbox-gl" %>
<% end %>
...
<div id="map" style="width: 100%;height: 300px;"></div>
<script>
try {
mapboxgl.accessToken = 'xxx';
var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v11',
center: [-74.50, 40],
zoom: 9
});
} catch(e) {
var map = document.getElementById('map');
map.innerHTML = e;
}
</script>
这导致 ReferenceError: Can't find variable: mapboxgl
在我的 PDF 中呈现。
我在 Mapbox (https://github.com/mapbox/mapbox-gl-js/issues/8719) 中打开了一个问题,但是他们不支持这个。
因为我有使用 wkhtmltopdf 构建的功能,所以我只使用 Puppeteer 来渲染地图(带有 Mapbox tiles 的 Leaflet)并且我将转换为 Base64 的屏幕截图传递给 wicked_pdf 的视图。
Puppeteer/Leaflet/Mapbox set 效果很好,我得到了一张用 GeoJSON 图层渲染的地图。
另请参阅附件中关于在 Rails 和 Heroku 上设置 Puppeteer 的精彩文章:https://www.forsbergplustwo.com/blogs/news/pdf-generation-with-chrome-headless-in-ruby-using-puppeteer-on-heroku