Lernprogramm: Grundlegendes, qualitativ hochwertiges Drucken/Exportieren von Webkarten mit arcpy.mapping

Komplexität: Mittelstufe Datenanforderung: ArcGIS.com

In diesem Lernprogramm erstellen Sie eine Webanwendung, bei der der Endbenutzer zu einem Interessenbereich navigieren und die Schaltfläche Drucken verwenden kann. Die Ausgabe ist ein druckerfreundliches PDF-Dokument mit qualitativ hochwertiger Vektorausgabe für Service-Layer.

Standardmäßig wird beim Exportieren einer Webanwendung mit dem direkt verfügbaren Service Druck-Werkzeuge und den zugehörigen Widgets für Client-Druck in den ArcGIS-Web-APIs standardmäßig ein gecachtes Bild des Service-Layers ausgegeben, dessen Auflösung (z. B. 96 dpi) für großformatiges Drucken bzw. eine qualitativ hochwertige kartografische Ausgabe zu niedrig ist. Dies gilt besonders, wenn die Service-Layer einen gekachelten Karten-Cache verwenden. In diesem Fall ist die Ausgabe der Service-Layer ein gekacheltes, gecachtes Bild.

In der Abbildung unten werden zwei Beispiel-Ausgabe-PDF-Dateien gezeigt. Die Abbildung links zeigt, wie ein gekachelter Service-Layer-Cache aussehen kann, wenn Sie eine großformatige PDF exportieren und darauf gezoomt wird. Beachten Sie die Verwischungen der Features und des verpixelten Texts. Die Anzeige kann bei kleinerem Maßstab oder gecachtem Maßstab vollkommen in Ordnung sein. Sie kann auch im Letter- oder Tabloid-Format, aber keinesfalls in einem größeren Format in Ordnung sein.

Die Abbildung rechts zeigt Vektordaten. Es ist wesentlich glatter und viel eher für eine qualitativ hochwertige kartografische Ausgabe geeignet. In diesem Lernprogramm wird veranschaulicht, wie die direkt verwendbare Drucklösung angepasst wird, um ein druckerfreundliches PDF-Dokument mit qualitativ hochwertiger Vektorausgabe für Service-Layer erstellen.

Beispiel für eine Ausgabe mit niedriger im Vergleich zu einer Ausgabe mit hoher Auflösung

In der Webanwendung, die Sie erstellen, werden Vektoren ausgegeben, die mit dem Service "World Topographic-Grundkarte" äquivalent sind. Eine Vektorteilmenge des Service "World Topographic-Grundkarte" ist im ArcGIS Resource Center verfügbar.

HinweisHinweis:

Um ein Ausgabedokument zu erstellen, das qualitativ hochwertige lokale Vektordaten statt ein gekacheltes Cache-Bild mit Service-Layer enthält, müssen Sie auf die Vektordaten zugreifen können.

Die folgende Abbildung zeigt die Webanwendung, die Sie erstellen.

Webanwendung

Der CodeBehind der Schaltfläche Drucken in der Webanwendung verwendet den Druck-Task der ArcGIS-Web-API, die in ArcGIS 10.1 for Server verfügbar ist. Sie erstellen ein Python-Skript, das als Georeferenzierungs-Service veröffentlicht und vom Druck-Task verwendet wird. Das Python-Skript verwendet die Funktion ConvertWebMapToMapDocument im arcpy.mapping-Modul, das den vollständigen Status der Webkarte in ein bereitgestelltes Vorlagenkartendokument einfügt. Die Vorlage enthält Vektoren, die mit allen möglichen Layern im Karten-Service äquivalent sind. Das Modul arcpy.mapping bietet auch Funktionen, um Service-Layer zu entfernen, wobei die lokalen Vektordaten, die im Vorlagenkartendokument bereitgestellt werden, beibehalten und in eine PDF exportiert werden.

Nachdem Sie auf die Schaltfläche Drucken geklickt haben, wird ein druckerfreundliches PDF-Dokument mit qualitativ hochwertigen lokalen Vektordaten statt einem gekachelten Cache-Bild mit Service-Layern ausgegeben.

Um dieses Lernprogramm abzuschließen, sollten Sie mit dem Modul arcpy.mapping, den ArcGIS-Web-APIs, ArcGIS for Desktop und ArcGIS 10.1 for Server vertraut sein. Beispielcode für alle ArcGIS-Web-APIs sind in diesem Lernprogramm enthalten. Sie sollten außerdem mit den Hilfethemen zum Drucken in der Webanwendung vertraut sein:

Drucken in WebanwendungenErweiterte Druckfunktionen für Webkarten

Abrufen der Vektordaten aus dem ArcGIS Resource Center

Sie laden eine ZIP-Datei aus der Kartenvorlagengalerie des ArcGIS Resource Center herunter, die die Vektordaten enthält, die in der bereitgestellten Kartendokumentvorlage verwendet werden.

Zuvor müssen Sie jedoch sicherstellen, dass eine Ordnerstruktur vorhanden ist, bei der ArcGIS for Server die Kartenvorlagendokumente und -daten erkennen kann, die in der Webanwendung verwendet werden. In diesem Lernprogramm wird vorausgesetzt, dass Sie über einen Ordner verfügen, der bei ArcGIS for Server registriert ist. Weitere Informationen zum Registrieren Ihrer Daten für ArcGIS for Server finden Sie hier:

TippTipp:

Bei Verwendung von Vorlagenkartendokumenten in der Funktion ConvertWebMapToMapDocument wird empfohlen, die Daten zu verwenden, die bei ArcGIS for Server registriert sind. Falls Sie keine registrierten Daten verwenden möchten, werden die Vorlagenkartendokumente und -daten gepackt und auf den Server kopiert. Während des Packens werden Daten möglicherweise verschoben und verweisen mit relativen Pfaden auf eine Ordnerstruktur, die ConvertWebMapToMapDocument nicht auflösen kann. Weitere Informationen finden Sie im Hilfethema ConvertWebMapToMapDocument.

Schritte:
  1. Öffnen Sie eine neue, leere ArcMap-Sitzung.
  2. Navigieren Sie im Fenster Katalog zu dem registrierten Ordner. Erstellen Sie in dem registrierten Ordner namens BasicTutorial einen neuen Ordner.
  3. Wechseln Sie zur Galerie der Kartenvorlagen im ArcGIS Resource Center. Wählen Sie die Vorlage Topographic Map Template - Medium Scales.
  4. Laden Sie die ZIP-Datei "Topographic Map Template - Medium Scales" auf Ihren Computer herunter, indem Sie auf die Schaltfläche Herunterladen klicken.
  5. Extrahieren Sie den Inhalt der ZIP-Datei in den Ordner BasicTutorial in Ihrem registrierten Ordner.
  6. Ihr registrierter Ordner sieht in etwa wie in der Abbildung unten aus.
    Registrierter Ordner
    HinweisHinweis:

    Im Screenshot oben lautet der Name des registrierten Ordners MyDataStore. Der registrierte Ordner kann einen beliebigen Namen haben.

Bereiten Sie das Kartendokument vor, das als Vorlage in der Webanwendung verwendet wird.

Die aus dem ArcGIS Resource Center heruntergeladenen Daten enthielten zwei Kartendokumente. MediumScales_anno.mxd wird in der Webanwendung verwendet. Die Karte und die Daten sollen mit mittleren Maßstäben verwendet werden, z. B. ca. 1:1.500.000 bis 1:18.000. Sie entfernen den maximalen Maßstabsbereich im Kartendokument, damit die Benutzer der Webanwendung über den maximalen Maßstab hinaus zoomen und dennoch eine Druckausgabe erstellen können.

Schritte:
  1. Öffnen Sie MediumScales_anno.mx in ArcMap.
  2. Klicken Sie im Inhaltsverzeichnis mit der rechten Maustaste auf den Gruppen-Layer Level 14 ~1:36K, und klicken Sie dann auf Eigenschaften.
  3. Klicken Sie auf die Registerkarte Allgemein.
  4. Legen Sie die Dropdown-Liste Layer nicht anzeigen, wenn Maßstab größer ist als auf <Keine> fest.
  5. Klicken Sie im Dialogfeld Gruppen-Layer-Eigenschaften auf OK.
  6. Speichern Sie das Kartendokument.

Das Kartendokument kann nun als Vorlage in der Webanwendung verwendet werden.

Erstellen des Python-Skripts

Sie erstellen ein Python-Skript, das als benutzerdefinierter Geoverarbeitungs-Druck-Service verwendet wird.

Das Python-Skript in dem benutzerdefinierten Geoverarbeitungs-Service führt die Funktion ConvertWebMapToMapDocument aus, die eine Webkarte (im JSON-Format) konvertiert, um sie zu drucken oder in ein Kartendokument zu exportieren. Das Skript entfernt anschließend die Service-Layer im Ausgabe-Kartendokument, wobei die Vektor-Layer, die dem Service-Layer im Webkarten-JSON entsprechen, entfernt werden. Das Webkarten-JSON enthält außerdem die Ausdehnung der Karte in der Webanwendung. Schließlich exportiert das Skript das Kartendokument in eine PDF.

Schritte:
  1. Öffnen Sie eine beliebige Python-IDE, wie beispielsweise IDLE (die von ArcGIS for Desktop bereitgestellt wird).
  2. Kopieren Sie den folgenden Code und fügen Sie ihn in ein neues Python-Skript ein.
  3. import arcpy
    import os
    import uuid
    
    # Input WebMap json
    Web_Map_as_JSON = arcpy.GetParameterAsText(0)
    
    # The template location in the server data store
    templateMxd = '//zoid/MyDataStore/BasicTutorial/Maps and GDBs/MediumScales_Anno.mxd'
       
    # Convert the WebMap to a map document
    result = arcpy.mapping.ConvertWebMapToMapDocument(Web_Map_as_JSON, templateMxd)
    mxd = result.mapDocument
    
    # Reference the data frame that contains the webmap
    # Note: ConvertWebMapToMapDocument renames the active dataframe in the template_mxd to "Webmap"
    df = arcpy.mapping.ListDataFrames(mxd, 'Webmap')[0]
    
    # Remove the service layer
    # This will just leave the vector layers from the template
    for lyr in arcpy.mapping.ListLayers(mxd, data_frame=df):
        if lyr.isServiceLayer:
            arcpy.mapping.RemoveLayer(df, lyr)
            
    # Use the uuid module to generate a GUID as part of the output name
    # This will ensure a unique output name
    output = 'WebMap_{}.pdf'.format(str(uuid.uuid1()))
    Output_File = os.path.join(arcpy.env.scratchFolder, output)
    
    # Export the WebMap
    arcpy.mapping.ExportToPDF(mxd, Output_File) 
    
    # Set the output parameter to be the output file of the server job
    arcpy.SetParameterAsText(1, Output_File)
    
    # Clean up - delete the map document reference
    filePath = mxd.filePath
    del mxd, result
    os.remove(filePath)
    
  4. Ändern Sie die Variable templateMxd in den UNC-Pfad zu dem Ordner in Ihrem registrierten Ordner, der die Vorlagenkartendokumente enthält.
  5. HinweisHinweis:

    Wenn ArcGIS for Server, ArcGIS for Desktop und die registrierten Ordner sich alle auf demselben Computer befinden, sind keine UNC-Pfade zu den registrierten Ordnern erforderlich. Stattdessen können absolute Pfade verwendet werden.

  6. Speichern Sie das Python-Skript. Geben Sie dem Skript den Namen BasicTutorial.py. Speichern Sie es in einem Ordner mit der Bezeichnung WebApp in dem registrierten Ordner.

Erstellen des Python-Skript-Werkzeugs

Sie erstellen ein benutzerdefiniertes Geoverarbeitungswerkzeug, das das Skript BasicTutorial.py ausführt.

Schritte:
  1. Navigieren Sie im Fenster Katalog in ArcMap zum Ordner WebApp in dem Verzeichnis des registrierten Ordners.
  2. Klicken Sie mit der rechten Maustaste auf den Ordner WebApp, und klicken Sie dann auf Neu > Toolbox. Weisen Sie der Toolbox den Namen BasicTutorial zu.
  3. Klicken Sie mit der rechten Maustaste auf die Toolbox BasicTutorial, und klicken Sie auf Elementbeschreibung.
  4. Füllen Sie im Dialogfeld Elementbeschreibung die Elemente Tags und Zusammenfassung mit Text Ihrer Wahl aus. Sie können auch andere Elementbeschreibungen eingeben.
  5. Klicken Sie auf Speichern, und beenden Sie das Dialogfeld Elementbeschreibung.
  6. Klicken Sie im Fenster Katalog mit der rechten Maustaste auf die Toolbox BasicTutorial, und klicken Sie auf Hinzufügen > Skript.
  7. Geben Sie im Dialogfeld Skript hinzufügen BasicTutorial für Name und Beschriftung ein.
  8. Klicken Sie auf Weiter.
  9. Navigieren Sie für die Skriptdatei zum Ordner WebApp in Ihrem registrierten Ordner, und wählen Sie BasicTutorial.py.
  10. Klicken Sie auf Weiter.
  11. Dem Skriptwerkzeug müssen zwei Parameter hinzugefügt werden.
    1. Die erste Parameter lautet Web_Map_as_JSON. Dieser Parameter nimmt eine JSON-Darstellung des Status der zu exportierenden Karte an, wie er in der Webanwendung angezeigt wird. Die Eigenschaften entsprechen in etwa dem folgenden Screenshot:
      Eigenschaften des Parameters "Web_Map_as_JSON"
    2. Der nächste Parameter lautet Output_File – Das Ausgabedatei, die erstellt wird. Die Eigenschaften entsprechen in etwa dem folgenden Screenshot:
      Eigenschaften des Parameters "Output_File parameter"

      AchtungAchtung:

      Die Parameternamen Web_Map_as_JSON und Output_File müssen genauso buchstabiert sein wie angezeigt, damit sie mit der Werkzeugsignatur des Druck-Task in den ArcGIS-Web-APIs übereinstimmen.

    3. Klicken Sie im Dialogfeld Skript hinzufügen auf Beenden.
  12. Klicken Sie mit der rechten Maustaste auf das Skriptwerkzeug BasicTutorial, und klicken Sie auf Elementbeschreibung.
  13. Füllen Sie im Dialogfeld Elementbeschreibung die Elemente Tags und Zusammenfassung mit Text Ihrer Wahl aus. Füllen Sie außerdem die Dialogerklärung für alle vier Parameter im Abschnitt Syntax des Dialogfeldes Elementbeschreibung mit dem Text Ihrer Wahl aus. Sie können auch andere Elementbeschreibungen eingeben.

Ausführen des Werkzeugs

Das Werkzeug muss erfolgreich ausgeführt werden, um ein Ergebnis im Fenster Ergebnisse zu erstellen, das in ArcGIS for Server veröffentlicht werden kann.

Schritte:
  1. Klicken Sie im Fenster Katalog mit der rechten Maustaste auf das Skriptwerkzeug BasicTutorial, und klicken Sie auf Öffnen.
  2. Lassen Sie den Eingabeparameter Web_Map_as_JSON leer.
    TippTipp:

    Zu Veröffentlichungszwecken können Sie den Eingabeparameter Web_Map_as_JSON leer lassen, da die ArcGIS-Web-APIs den Webkarten-JSON in der Webanwendung bereitstellen. Sie können den Eingabeparameter Web_Map_as_JSON leer lassen, vorausgesetzt, das Python-Skript wurde so geschrieben, dass leere Eingaben nicht zu Fehlern führen. Das Skript sucht beispielsweise Webkarten-Layer nicht nach Name.

  3. Klicken Sie auf OK. Warten Sie, bis die Ausführung des Werkzeugs beendet ist.

Das Ergebnis kann nun als Geoverarbeitungs-Service veröffentlicht werden.

Veröffentlichen des Ergebnisses

Wenn Sie nicht mit dem Veröffentlichen von Geoverarbeitungs-Services vertraut sind, finden Sie weitere Informationen unter:

Schritte:
  1. Öffnen Sie das Ergebnisse-Fenster.
  2. Blenden Sie die Aktuelle Sitzung ein.
  3. Klicken Sie mit der rechten Maustaste auf das Ergebnis BasicTutorial, und klicken Sie auf Freigeben als > Geoverarbeitungs-Service.
  4. Aktivieren Sie die Option Service veröffentlichen.
  5. Klicken Sie auf Weiter.
  6. Wählen Sie eine Veröffentlichungs- oder Admin-Verbindung zu Ihrem ArcGIS 10.1 for Server-Server aus.
  7. Klicken Sie auf Weiter.
  8. Klicken Sie auf Weiter.
  9. Klicken Sie auf Fortfahren.
  10. Klicken Sie oben rechts im Dialogfeld Service-Editor auf Veröffentlichen.

Der Geoverarbeitungs-Service kann nun in den ArcGIS-Web-APIs verwendet werden.

Legen Sie fest, welche ArcGIS-Web-API zum Erstellen der Webanwendung verwendet werden soll.

Die ArcGIS-Web-APIs bieten ähnliche GIS-Funktionen, Sie können jedoch Ihre bevorzugte Entwicklerplattform auswählen. Eine detaillierte Darlegung der ersten Schritte zum Erstellen von Webanwendungen mit den einzelnen APIs ist nicht Thema dieses Lernprogramms. Weitere Informationen hierzu finden Sie in der API-Dokumentation. Weitere Informationen finden Sie unter:

Jede ArcGIS-Web-API verfügt über einen Druck-Task. Der Druck-Task weist eine URL-Eigenschaft auf, die den benutzerdefinierten Geoverarbeitungs-Service referenziert, den Sie zuvor erstellt haben. Weitere Informationen zum Druck-Task finden Sie in der ArcGIS-Web-API-Dokumentation.

Verwenden Sie in den folgenden Abschnitten die Codebeispiele für die ArcGIS-Web-API, die Sie zum Erstellen der Webanwendung verwenden.

Beispielcode für ArcGIS API for JavaScript

Wenn Sie ArcGIS API for JavaScript verwenden, erstellen Sie die Webanwendung mit dem folgenden Codebeispiel.

Ändern Sie im folgenden Codebeispiel für ArcGIS API for JavaScript die URL zu dem in einem vorherigen Schritt erstellten Geoverarbeitungs-Service so, dass sie dem Servernamen entspricht. Dieser wird in dieser Zeile referenziert:

var printUrl = "http://MyServer:6080/arcgis/rest/services/BasicTutorial/GPServer/BasicTutorial";

Code für BasicTutorial.html:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
  <head>
  	<title>Webmap Printing</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=7,IE=9" />
    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/>
    <link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.0/js/dojo/dijit/themes/claro/claro.css">  
    <script src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=3.0"></script>
    <script type="text/javascript" language="Javascript">
      dojo.require("esri.map");
      dojo.require("esri.tasks.PrintTask");
      var printTask, params;
      
      function init() {
		     // limit scales in webmap to the usable scales of the template map document      	
      	var lods = [ {"level" : 11, "resolution" : 76.4370282850732, "scale" : 288895.277144},
           {"level" : 12, "resolution" : 38.2185141425366, "scale" : 144447.638572},
           {"level" : 13, "resolution" : 19.1092570712683, "scale" : 72223.819286},
           {"level" : 14, "resolution" : 9.55462853563415, "scale" : 36111.909643},
           {"level" : 15, "resolution" : 4.77731426794937, "scale" : 18055.954822}];
      	
        // set the extent to the Portland area - which matches the extent of the template map document
        var startExtent = new esri.geometry.Extent({"xmin":-13679000,"ymin":5680000,
        											"xmax":-13635000,"ymax":5740000,
        											"spatialReference":{"wkid":102100}});
        											
        var map = new esri.Map("map", {extent:startExtent, lods:lods});
        
        // add tiled map service to webmap
        var tiledUrl = "http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer";
        var tiledLayer = new esri.layers.ArcGISTiledMapServiceLayer(tiledUrl);
        map.addLayer(tiledLayer);
		      var printUrl = "http://MyServer:6080/arcgis/rest/services/BasicTutorial/GPServer/BasicTutorial";
		      printTask = new esri.tasks.PrintTask(printUrl, {async: true});
		      params = new esri.tasks.PrintParameters();
        params.map = map;  
      }
      
      function print(){
      	var ptemplate = new esri.tasks.PrintTemplate();
      	// use the extent of the webmap in the output PDF
      	ptemplate.preserveScale = false;
      	params.template = ptemplate;
        printTask.execute(params, printComplete);
      }
      
      function printComplete(result){
        window.open(result.url);
      }

      dojo.addOnLoad(init);

    </script>
  </head>
  <body class="claro">
  	 <input type="button" id="print" value="Print" onclick="print();"/>
    <div id="map" style="width:1000px; height:600px; border:1px solid #000;"></div>
  </body>
</html>

Beispielcode für ArcGIS API for Flex

Wenn Sie ArcGIS API for Flex verwenden, erstellen Sie die Webanwendung mit dem folgenden Codebeispiel.

Ändern Sie im folgenden Codebeispiel für ArcGIS API for Flex die URL zu dem in einem vorherigen Schritt erstellten Geoverarbeitungs-Service so, dass sie dem Servernamen entspricht. Sie wird in diesen Zeilen referenziert:

url="http://MyServer:6080/arcgis/rest/services/BasicTutorial/GPServer/BasicTutorial"/>

Code für BasicTutorial.mxml:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
			   xmlns:s="library://ns.adobe.com/flex/spark"
			   xmlns:esri="http://www.esri.com/2008/ags"
			   initialize="printTask.getServiceInfo()"
			   pageTitle="High-quality printing">
	
	<fx:Script>
		<![CDATA[
			import com.esri.ags.events.PrintEvent;
			import com.esri.ags.tasks.supportClasses.DataFile;
			import com.esri.ags.tasks.supportClasses.JobInfo;
			import com.esri.ags.tasks.supportClasses.ParameterValue;
			
			import mx.controls.Alert;
			
			public var preserveScale:Boolean = true;
			
			private function printBtn_clickHandler(event:MouseEvent):void
			{
				if (printTask.getServiceInfoLastResult.isServiceAsynchronous)
				{
					printTask.submitJob(printParameters);
				}
				else
				{
					printTask.execute(printParameters);
				}
			}
			
			private function printTask_jobCompleteHandler(event:PrintEvent):void
			{
				var jobInfo:JobInfo = event.jobInfo;
				if (jobInfo.jobStatus == JobInfo.STATUS_SUCCEEDED)
				{
					printTask.getResultData(jobInfo.jobId);
				}
				else
				{
					Alert.show(jobInfo.jobStatus);
				}
			}
			
			private function printTask_getResultDataCompleteHandler(event:PrintEvent):void
			{
				var dataFile:DataFile = event.parameterValue.value as DataFile;
				navigateToURL(new URLRequest(dataFile.url));
			}
			
			private function printTask_executeCompleteHandler(event:PrintEvent):void
			{
				var paramValue:ParameterValue = event.executeResult.results[0];
				var dataFile:DataFile = paramValue.value as DataFile;
				navigateToURL(new URLRequest(dataFile.url));
			}
		]]>
	</fx:Script>
	
	<fx:Declarations>
		<esri:PrintTask id="printTask"
						executeComplete="printTask_executeCompleteHandler(event)"
						fault="Alert.show(event.fault.faultString)"
						getResultDataComplete="printTask_getResultDataCompleteHandler(event)"
						jobComplete="printTask_jobCompleteHandler(event)"
						showBusyCursor="false"
						url="http://MyServer:6080/arcgis/rest/services/BasicTutorial/GPServer/BasicTutorial"/>
		<esri:PrintParameters id="printParameters"
							  preserveScale="false"
							  map="{map}">
		</esri:PrintParameters>
		
		<esri:Extent id="initialExtent"
					 xmin="-13679000" ymin="5680000" xmax="-13635000" ymax="5740000">
			<esri:SpatialReference wkid="102100"/>
		</esri:Extent>
		
	</fx:Declarations>
	
	<s:controlBarLayout>
		<s:HorizontalLayout gap="10"
							paddingBottom="7"
							paddingLeft="10"
							paddingRight="10"
							paddingTop="7"
							verticalAlign="baseline"/>
	</s:controlBarLayout>
	<s:controlBarContent>
		<s:Button id="printBtn"
				  click="printBtn_clickHandler(event)"
				  enabled="{printTask.getServiceInfoLastResult != null}"
				  label="Print"/>
	</s:controlBarContent>

	<esri:Map id="map" extent="{initialExtent}">
		<esri:lods>
			<esri:LOD resolution="76.4370282850732" scale="288895.277144"/>
			<esri:LOD resolution="38.2185141425366" scale="144447.638572"/>
			<esri:LOD resolution="19.1092570712683" scale="72223.819286"/>
			<esri:LOD resolution="9.55462853563415" scale="36111.909643"/>
			<esri:LOD resolution="4.77731426794937" scale="18055.954822"/>
		</esri:lods>

		<esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer"/>
	</esri:Map>
	
</s:Application>

Beispielcode für ArcGIS API for Silverlight

Wenn Sie ArcGIS API for Silverlight verwenden, erstellen Sie die Webanwendung mit dem folgenden Codebeispiel.

XAML-Code:

<UserControl x:Class="Basic_Tutorial.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:esri="http://schemas.esri.com/arcgis/client/2009">

    <Grid x:Name="LayoutRoot" Background="White">

        <esri:Map x:Name="MyMap" Extent="-13679000,5680000,-13635000,5740000">
            <esri:Map.Layers>
                <esri:ArcGISTiledMapServiceLayer ID="MyTiledService" 
                    Url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer"/>
            </esri:Map.Layers>
        </esri:Map>

        <StackPanel Orientation="Vertical" Margin="15" HorizontalAlignment="Left" VerticalAlignment="Top" >
            <Border x:Name="PrintPanel" CornerRadius="10" BorderBrush="Gray" BorderThickness="1" Background="White" HorizontalAlignment="Left" 
                    VerticalAlignment="Top" Margin="15" Padding="10">
                <Border.Effect>
                    <DropShadowEffect/>
                </Border.Effect>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition />
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition/>
                    </Grid.RowDefinitions>
                    <Button x:Name="Print" Content="Print" Click="ExportMap_Click" 
                            Grid.Row="1" Grid.Column="0" Margin="2"/>
                </Grid>
            </Border>
        </StackPanel>
    </Grid>
</UserControl>

Ändern Sie im folgenden Codebeispiel für ArcGIS API for Silverlight die URL zu dem in einem vorherigen Schritt erstellten Geoverarbeitungs-Service so, dass sie dem Servernamen entspricht. Dieser wird in dieser Zeile referenziert:

printTask = new PrintTask("http://MyServer:6080/arcgis/rest/services/BasicTutorial/GPServer/BasicTutorial");

CodeBehind in C#:

using System;
using System.Windows;
using System.Windows.Controls;
using ESRI.ArcGIS.Client.Printing;
using ESRI.ArcGIS.Client.Tasks;


namespace Basic_Tutorial
{
    public partial class MainPage : UserControl
    {
        PrintTask printTask;
        public MainPage()
        {
            InitializeComponent();
            printTask = new PrintTask("http://MyServer:6080/arcgis/rest/services/BasicTutorial/GPServer/BasicTutorial");
            printTask.DisableClientCaching = true;
            printTask.JobCompleted += new EventHandler<PrintJobEventArgs>(printTask_JobCompleted);
            printTask.GetServiceInfoCompleted += new EventHandler<ServiceInfoEventArgs>(printTask_GetServiceInfoCompleted);
            printTask.GetServiceInfoAsync();
        }

        void printTask_GetServiceInfoCompleted(object sender, ServiceInfoEventArgs e)
        {
            PrintPanel.DataContext = e.ServiceInfo;
        }


        void printTask_JobCompleted(object sender, PrintJobEventArgs e)
        {
            if (e.Error == null)
            {
                if (e.PrintResult != null)
                    System.Windows.Browser.HtmlPage.Window.Navigate(e.PrintResult.Url, "_blank");
            }
        }

        private void ExportMap_Click(object sender, RoutedEventArgs e)
        {

            if (printTask == null || printTask.IsBusy) return;

            PrintParameters printParameters = new PrintParameters(MyMap)
            {

            };
            printTask.SubmitJobAsync(printParameters);
        }
    }
}

Ausführen der Webanwendung

Führen Sie die Webanwendung aus, die Sie im vorherigen Schritt erstellt haben. Anweisungen zur Ausführung von Webanwendungen finden Sie bei Bedarf in der ArcGIS-Web-API-Dokumentation. Im Folgenden finden Sie einen Screenshot der ArcGIS for JavaScript-Web-API-Anwendung.

Beispiel-Webanwendung

Zoomen Sie auf einen Interessenbereich, und klicken Sie auf die Schaltfläche Drucken. Die Ausgabe-PDF wird kurz darauf automatisch angezeigt. Es wird ein druckerfreundliches PDF-Dokument mit qualitativ hochwertigen lokalen Vektordaten, die in den Layout-Vorlagen bereitgestellt wurden, anstelle eines gekachelten Cache-Bildes mit Service-Layern ausgegeben. Dabei wird eine qualitativ hochwertige kartografische Ausgabe erstellt. Im Folgenden finden Sie eine Beispiel-Ausgabe:

Beispiel-PDF-Ausgabe

Damit ist das Lernprogramm für grundlegendes, qualitativ hochwertiges Drucken/Exportieren von Webkarten abgeschlossen. Erweiterte Szenarien finden Sie unter Lernprogramm für erweitertes, qualitativ hochwertiges Drucken/Exportieren von Webkarten.

Verwandte Themen

9/23/2013