ArcObjects Library Reference  

PublishMap

About the Publish a map Sample

[C#]

PublishMap.cs

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Windows.Forms;
using ESRI.ArcGIS.ArcMapUI;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Framework;
using ESRI.ArcGIS.Publisher;
using ESRI.ArcGIS.PublisherUI;
using ESRI.ArcGIS.Carto;

namespace PublishMap2008CSharp
{
    public class PublishMap : ESRI.ArcGIS.Desktop.AddIns.Button
    {
        public PublishMap()
        {
        }

        protected override void OnClick()
        {
            //Enable publisher extension
            if (EnablePublisherExtension())
            {
                System.Windows.Forms.Cursor.Current = Cursors.WaitCursor;

                IMxDocument mapDoc = ArcMap.Document;

                IPMFPublish3 publishMaps = new PublisherEngineClass();

                //Accept the default settings when the map is published.
                IPropertySet settings = publishMaps.GetDefaultPublisherSettings();              

                IArray orderedMaps = new ArrayClass();
                //Loop over all the maps in the map document and each one to an Array object
                for (int i = 0; i <= mapDoc.Maps.Count - 1; i++)
                {
                    orderedMaps.Add(mapDoc.Maps.get_Item(i));
                }

                try
                {
                    //Create the PMF file using the current settings and the map order specified in the IArray parameter
                    //It will be written to C:\\PublishedMap.pmf and the data will be referenced using relative paths.
                    publishMaps.PublishWithOrder(orderedMaps, mapDoc.PageLayout, mapDoc.ActiveView, settings,
                                                 true, "C:\\PublishedMap.pmf");


                    //Report outcome to the user
                    string mapdocTitle = ((IDocument)ArcMap.Document).Title;
                    string msg = string.Empty;

                    if (orderedMaps.Count == 1)
                    {
                        msg = "The map in " + mapdocTitle + " has been published successfully";
                    }
                    else
                    {
                        msg = "The maps in " + mapdocTitle + " have been published successfully";
                    }

                    MessageBox.Show(msg);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error Publishing Map: " + ex.Message, "Error");
                }

                System.Windows.Forms.Cursor.Current = Cursors.Default;

            }

            ArcMap.Application.CurrentTool = null;
        }


        protected override void OnUpdate()
        {
            Enabled = ArcMap.Application != null;
        }

        private bool EnablePublisherExtension()
        {

            bool checkedOutOK = false;

            try
            {
                IExtensionManager extMgr = new ExtensionManagerClass();

                IExtensionManagerAdmin extAdmin = (IExtensionManagerAdmin)extMgr;

                UID uid = new UID();
                uid.Value = "esriPublisherUI.Publisher";
                object obj = 0;
                extAdmin.AddExtension(uid, ref obj);

                IExtensionConfig extConfig = (IExtensionConfig)extMgr.FindExtension(uid);

                if ((!(extConfig.State == esriExtensionState.esriESUnavailable)))
                {
                    //This checks on the extension
                    extConfig.State = esriExtensionState.esriESEnabled;
                    checkedOutOK = true;
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Publisher extension has failed to check out.", "Error");
            }

            return checkedOutOK;
        } 

    }

}

[Visual Basic .NET]

PublishMap.vb

Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.IO
Imports System.Windows.Forms
Imports ESRI.ArcGIS.ArcMapUI
Imports ESRI.ArcGIS.esriSystem
Imports ESRI.ArcGIS.Framework
Imports ESRI.ArcGIS.Publisher
Imports ESRI.ArcGIS.PublisherUI
Imports ESRI.ArcGIS.Carto

Public Class PublishMap
    Inherits ESRI.ArcGIS.Desktop.AddIns.Button

    Public Sub New()

    End Sub

    Protected Overrides Sub OnClick()

        'Enable publisher extension
        If (EnablePublisherExtension()) Then

            System.Windows.Forms.Cursor.Current = Cursors.WaitCursor

            Dim mapDoc As IMxDocument = My.ArcMap.Document

            Dim publishMaps As IPMFPublish3 = New PublisherEngineClass()

      'Accept the default settings when the map is published
            Dim settings As IPropertySet = publishMaps.GetDefaultPublisherSettings()

            Dim orderedMaps As IArray = New ArrayClass()
            'Loop over all the maps in the map document and each one to an Array object
            For i As Integer = 0 To mapDoc.Maps.Count - 1
                orderedMaps.Add(mapDoc.Maps.Item(i))
            Next


            Try
                'Create the PMF file using the current settings and the map order specified in the IArray parameter
                'It will be written to C:\\PublishedMap.pmf and the data will be referenced using relative paths.
                publishMaps.PublishWithOrder(orderedMaps, mapDoc.PageLayout, mapDoc.ActiveView, settings, _
                                                 True, "C:\\PublishedMap.pmf")

                'Report outcome to the user
                Dim mapdocTitle As String = DirectCast(My.ArcMap.Document, ESRI.ArcGIS.Framework.IDocument).Title
                Dim msg As String = String.Empty

                If (orderedMaps.Count = 1) Then
                    msg = "The map in " + mapdocTitle + " has been published successfully"
                Else
                    msg = "The maps in " + mapdocTitle + " have been published successfully"
                End If

                MessageBox.Show(msg)

            Catch ex As Exception
                MessageBox.Show("Error Publishing Map: " + ex.Message, "Error")
            End Try

            System.Windows.Forms.Cursor.Current = Cursors.Default

        End If

        My.ArcMap.Application.CurrentTool = Nothing
    End Sub

    Protected Overrides Sub OnUpdate()
        Enabled = My.ArcMap.Application IsNot Nothing
    End Sub

    Private Function EnablePublisherExtension() As Boolean

        Dim checkedOutOK As Boolean = False

        Try

            Dim extMgr As IExtensionManager = New ExtensionManagerClass()
            Dim extAdmin As IExtensionManagerAdmin = DirectCast(extMgr, IExtensionManagerAdmin)

            Dim ud As UID = New UID()
            ud.Value = "esriPublisherUI.Publisher"
            Dim obj As Object = 0
            extAdmin.AddExtension(ud, obj)

            Dim extConfig As ESRI.ArcGIS.esriSystem.IExtensionConfig = DirectCast(extMgr.FindExtension(ud), ESRI.ArcGIS.esriSystem.IExtensionConfig)

            If Not (extConfig.State = ESRI.ArcGIS.esriSystem.esriExtensionState.esriESUnavailable) Then
                'This checks on the extension
                extConfig.State = ESRI.ArcGIS.esriSystem.esriExtensionState.esriESEnabled
                checkedOutOK = True
            End If

        Catch ex As Exception
            MessageBox.Show("Publisher extension has failed to check out.", "Error")
        End Try

        Return checkedOutOK
    End Function

End Class