Suchen Sie nach einer Open Source-Komponente zum Erstellen von PDF-Dateien aus WMS in einer Webanwendung

8

Ich möchte ein PDF aus WMS in einer Webkartenanwendung erstellen.

Kann mir bitte jemand eine robuste Komponente empfehlen? Ich möchte kostenlos Open Source unter einer relativ geschäftsfreundlichen Lizenz (keine GPL, BSD / MIT usw. wäre ideal, LGPL wäre in Ordnung).

  • Unsere WMS-Layer werden von ncWMS und UNM MapServer erstellt . Wir werden auch einige Ebenen von externen WMS-Anbietern überlagern wollen.
  • EDIT : Wir entwickeln unseren eigenen JavaScript-Client basierend auf OpenLayers.
  • EDIT : Wir haben Backend-Code in Java. Wir würden auch PHP oder andere Plattformen in Betracht ziehen, um das PDF zu erstellen.

MapFish wäre ausgezeichnet, aber es ist GPL.

MarkJ
quelle
1
QGIS Server und Client bieten eine hochauflösende PDF-Ausgabe parallel zu WMS, aber auch GPL.
Underdark
Welche Serversoftware stellt den WMS-Dienst bereit?
Allan Adair
@ Allan Ich habe in einer Bearbeitung geantwortet
MarkJ
2
Ich denke, MapServer unterstützt die PDF-Ausgabe ( mapserver.org/output/pdf.html ) und die neuere Version verwendet Cairo ( cairographics.org ), das unter LGPL oder MPL veröffentlicht wird.
Allan Adair
@ Allan Guter Punkt. Sie könnten diesen Kommentar zu einer Antwort machen! Frage: Müssten wir eine MAP-Datei erstellen? Derzeit haben wir keine Map-Datei, die alle Layer enthält. Wir stellen sie mithilfe von OpenLayers im Client zusammen. Ich nehme an, unser JavaScript-Frontend würde den Server zurückrufen, der dann MapScript ausführen würde. Müssten wir auch eine MAP-Datei erstellen?
MarkJ

Antworten:

3

Ich benutze Kairo und Pango (beide LGPL) zusammen, um PDF-Karten zu erstellen.

Es ist eine Low-Level-Lösung, aber Kairo verfügt über hervorragende Funktionen zum Zeichnen von Vektoren und zur Handhabung von Raster, während Pango sich hervorragend für den Satz eignet. Die Gesamtergebnisse sind großartig, aber es erfordert viel Codierung. Wenn ich beispielsweise eine Karte mit einer WMS-Ausgabe erstellen möchte, erstelle ich eine WMS-Anforderung, fordere das Bild an und zeichne es mit Kairo auf eine PDF-Leinwand.

Ich benutze diese Bibliotheken über Java-Gnome, aber in den meisten Sprachen gibt es Bindungen zu beiden.

Wille
quelle
Wenn Sie diese Option in Betracht ziehen, können Sie auch auf libharu (in C) oder ältere Versionen von iText (java) zurückgreifen (neuere haben eine AGPL-Lizenz, die nicht Ihrem Zweck entspricht).
Johanvdw
1
Beispiele für Karten, die fast ausschließlich mit dieser Methode erstellt wurden, finden Sie in dieser Veröffentlichung . Die zusätzliche Datei 2 enthält die Karten, die ursprünglich Vektoren waren, aber gerastert wurden, um die Downloadgröße zu verringern.
Wird
@johanvdw In der Tat passt die AGPL nicht zu meinem Zweck. Ich könnte PDFBox in Betracht ziehen, die unter der Apache-Lizenz steht
MarkJ
@ Will Cairo klingt interessant. Unser Produktionsserver ist Linux, aber unsere Entwicklungs- / Testmaschinen sind Windows. Gibt es eine Möglichkeit, Kairo von Java unter Windows zu verwenden?
MarkJ
@MarkJ Java-Gnome läuft leider nicht unter Windows (und es ist GPL) - ich habe keine Alternative gefunden. Die Python- und Mono-Bindungen laufen jedoch unter Windows.
Wird
3

Was ist mit http://code.google.com/p/wkhtmltopdf/ ? Es ist lgpl und ermöglicht es Ihnen, einfach ein PDF aus einer Webseitenvorlage zu generieren. Wir verwenden diesen Ansatz zusammen mit django, um das HTML dynamisch zu generieren, bevor es mit wkhtml als PDF gerendert wird.

Grüße

Tim

Tim Sutton
quelle
+1. Obwohl dies mit OpenLayers-Vektoren schwierig ist, können Sie mit dieser Lösung die Ausdruckseite vollständig anpassen. Platzieren Sie Logos, Legenden und Fußzeilen wie auf einer normalen HTML-Seite, wo immer Sie möchten, und erstellen Sie daraus ein Bild oder PDF.
Denu
+1 nur für Querdenken! Um sicherzugehen, dass ich verstanden habe: Sie würden mit einem JavaScript-Client (z. B. OpenLayers) eine Webseite erstellen, auf der einige Kartenebenen angezeigt werden, und diese dann mit wkhtml als PDF rendern?
MarkJ
Hallo Tim, wie hast du das zum Laufen gebracht? Ich habe einige Beispiele mit Open Layers ausprobiert, aber die Karte wird nicht gerendert oder auf der linken Seite der Box komprimiert.
Dennis van Schaik
0

Geomajas verfügt über ein Druck-Plug-In, mit dem Sie Ihre Karte in PDF konvertieren können, sowie ein Berichts-Plug-In (in Bearbeitung), mit dem Sie mithilfe von JasperReports einen Bericht erstellen können, der das Kartenbild enthalten kann. Beide sind AGPL, es kann jedoch eine geschäftsfreundliche Lizenz angefordert werden (bereitgestellt von Geosparc ).

Joachim Van der Auwera
quelle
Danke, ich hatte noch nichts von Geomajas gehört, das ist interessant. Obwohl ich bemerke, dass die geschäftsfreundlichen Lizenzen in Rechnung gestellt werden und das Druckmodul iText verwendet, bedeutet dies wiederum, dass Sie zahlen müssen , um von der AGPL
MarkJ
0

Nun, wir haben PDFBox (Apache-Lizenz) aus serverseitigem Java-Code verwendet.

Wir erstellen WMS-Anforderungen für die verschiedenen Ebenen, erhalten Bilder als speicherinterne Bitmaps und überlagern sie zu einer einzigen speicherinternen Bitmap. Verwenden von Java BufferedImagefür die speicherinternen Bitmaps. Anschließend rendern wir die Bitmap mit PDFBox PDJpeg auf die PDF-Seite .

Es funktioniert ziemlich gut. Ein Problem ist, dass die Kartenbilder im PDF leicht unscharf werden können, da Sie sie als JPEG codieren müssen, um sie mit PDFBox zu verwenden, mit der unvermeidlichen verlustbehafteten Komprimierung. Sie können dies verbessern, indem Sie die JPEG-Qualität im PDFJpeg-Konstruktor auf das Maximum einstellen und die Bilder in einer großen Größe (z. B. 300 dpi) anfordern.

Schließlich planen wir, unseren Code als Open Source zu veröffentlichen. Ich werde einen Link posten, wenn dies passiert.

Nochmals vielen Dank an Will, Allan und alle!

MarkJ
quelle