Procurando componente de código aberto para criar PDF a partir do WMS em um aplicativo Web

8

Quero criar um PDF a partir do WMS em um aplicativo de mapa da web.

Alguém pode recomendar um componente robusto? Eu gostaria de código-fonte aberto gratuito sob uma licença relativamente favorável aos negócios (sem GPL, BSD / MIT etc., seria ideal, LGPL seria bom).

  • Nossas camadas WMS são produzidas pelo ncWMS e UNM MapServer . Também queremos sobrepor algumas camadas de provedores WMS externos.
  • EDIT : Estamos desenvolvendo nosso próprio cliente JavaScript baseado em OpenLayers.
  • Edição : Temos algum código de back-end em Java. Também consideraríamos PHP ou outras plataformas para criar o PDF.

O MapFish seria excelente, mas é GPL.

MarkJ
fonte
1
O QGIS Server and Client oferece saída em PDF de alta resolução paralela ao WMS, mas também é GPL.
underdark
Qual software de servidor está fornecendo o serviço WMS?
Allan Adair
@Allan eu respondi em uma edição
MarkJ
2
Acho que o MapServer suporta saída em PDF ( mapserver.org/output/pdf.html ), e a versão mais recente usa o Cairo ( cairographics.org ), lançado sob LGPL ou MPL.
Allan Adair
@ Allan Bom ponto. Você poderia fazer desse comentário uma resposta! Pergunta: teríamos que criar um arquivo MAP? Atualmente, não temos um arquivo de mapa que contém todas as camadas, estamos montando-as no cliente usando o OpenLayers. Suponho que nosso front end JavaScript retornaria ao servidor, que executaria alguns MapScript. Também teríamos que criar um arquivo MAP?
precisa saber é

Respostas:

3

Eu uso o Cairo e o Pango (ambos LGPL) juntos para criar mapas em PDF.

É uma solução de baixo nível, mas o Cairo possui excelentes recursos de desenho vetorial e manipulação de varredura, enquanto o Pango é excelente em tipografia. Os resultados gerais são ótimos, mas exigem muita codificação. Por exemplo, se eu quiser criar um mapa usando uma saída WMS, construo uma solicitação WMS, solicite a imagem e desenhe-a em uma tela PDF usando o Cairo.

Eu uso essas bibliotecas via Java-Gnome, mas existem ligações para ambos na maioria dos idiomas.

Vai
fonte
Se você considerar essa opção, também poderá procurar a libharu (em C) ou versões mais antigas do iText (java) (as mais recentes possuem uma licença AGPL que não se adequa ao seu objetivo).
precisa saber é o seguinte
1
Para exemplos de mapas criados quase inteiramente usando esse método, consulte esta publicação . O arquivo adicional 2 contém os mapas que eram originalmente vetoriais, mas foram rasterizados para reduzir o tamanho do download.
Will
@johanvdw De fato, a AGPL não se encaixa no meu objetivo. Eu poderia considerar PDFBox que está sob a licença Apache
MarkJ
@ Will Cairo parece interessante. Nosso servidor de produção é Linux, mas nossas máquinas de desenvolvimento / teste são Windows. Existe alguma maneira de usar o Cairo do Java no Windows?
MarkJ
Infelizmente, o @MarkJ java-gnome não roda no Windows (e é GPL) - não encontrei uma alternativa. As ligações Python e Mono são executadas no Windows.
Will
3

Que tal usar http://code.google.com/p/wkhtmltopdf/ ? É lgpl e permite que você gere simplesmente um pdf a partir de um modelo de página da web. Usamos essa abordagem em conjunto com o django para gerar dinamicamente o html antes de renderizá-lo em pdf com wkhtml.

Saudações

Tim

Tim Sutton
fonte
+1. Embora seja difícil com os vetores OpenLayers, esta solução permite que você personalize totalmente a página de impressão. Coloque logotipos, legendas, rodapés onde quiser, como na página html habitual, depois crie imagem ou pdf.
Den /
+1 apenas para o pensamento lateral! Para ter certeza de que entendi: você criaria uma página da Web exibindo algumas camadas de mapa usando um cliente JavaScript (por exemplo, OpenLayers) e depois renderizá-la em PDF com wkhtml?
precisa saber é
Oi Tim, como você conseguiu isso? Tentei alguns exemplos com o Open Layers, mas o mapa não é renderizado ou está compactado no lado esquerdo da caixa.
Dennis van Schaik
0

O Geomajas possui um plug-in de impressão que pode converter seu mapa em PDF e também um plug-in de relatório (em andamento) que pode ser usado para criar um relatório usando o JasperReports, que pode incluir a imagem do mapa. Ambos são AGPL, mas uma licença para negócios pode ser solicitada (fornecida pela Geosparc ).

Joachim Van der Auwera
fonte
Obrigado, eu não tinha ouvido falar de Geomajas, isso é interessante. Embora eu note que eles cobram pelas licenças favoráveis ​​aos negócios e o módulo de impressão usa o iText, o que novamente significa que você deve pagar para ser liberado da AGPL
MarkJ
0

Bem, usamos o PDFBox (licença Apache) do código do servidor Java.

Construímos solicitações WMS para as várias camadas, obtemos imagens como bitmaps na memória e as sobrepomos em um único bitmap na memória. Usando Java BufferedImagepara os bitmaps na memória. Em seguida, renderizamos o bitmap na página PDF usando o PDFBox PDJpeg .

Funciona muito bem. Um detalhe é que as imagens do mapa podem ficar um pouco embaçadas no PDF, já que você precisa codificá-las como JPEG para poder usá-las com o PDFBox, com a inevitável compactação com perdas. Você pode melhorar isso definindo a qualidade JPEG ao máximo no construtor PDFJpeg e solicitando as imagens em um tamanho grande (por exemplo, 300 dpi).

Eventualmente, planejamos liberar nosso código como código aberto. Vou postar um link quando isso acontecer.

Mais uma vez obrigado a Will, Allan e todos!

MarkJ
fonte