Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

GEODATA DAYS 2024

#1 Mon 28 January 2013 17:01

frtou
Participant actif
Lieu: Cergy
Date d'inscription: 6 Sep 2005
Messages: 71

[ArcGis Desktop 10.1] Génération d'une mise en page pdf automatique

Bonjour à tous,

Je suis en train de créer une interface utilisateur dans arcgis desktop.
Je voudrais pouvoir créer un bouton qui me génère un fichier pdf, si possible, avec une mise en page prédéfinie notamment échelle, légende....
Le soucis, c'est que la mise en page ne doit pas être celle apparaissant dans la projet arcgis.
J'ai bien pensé créer un un autre projet mxd avec cette mise en page, mais je ne sais pas automatiser la génération du pdf.
Quelqu'un a des pistes ?

Merci d'avance.

Cordialement,

Franck

Hors ligne

 

#2 Wed 30 January 2013 23:24

Kevin Jousseaume
Participant assidu
Lieu: Nanterre, région parisienne
Date d'inscription: 20 Mar 2006
Messages: 217

Re: [ArcGis Desktop 10.1] Génération d'une mise en page pdf automatique

Bonsoir,

La réponse va dépendre du langage de développement que vous choisissez.
Si vous développez en .NET, je vous suggère de regarder ce post, il y a un extrait de code qui devrait vous intéresser si vous développez
http://gis.stackexchange.com/questions/ … ave-as-jpg

Les éléments importants :
- l'utilisation de l'interface IExportPDF
- l'utilisation d'un mxd modèle (partie non décrite dans le code car passé en paramètre de la fonction)

Je n'ai pas testé ce code mais il me semble valide après une lecture rapide.

Si vous développez en Python, il faudra utiliser la librairie arcpy.mapping, plus précisément la méthode ExportToPDF. Vous pourrez trouver des informations dans ces liens :
- http://help.arcgis.com/en/arcgisdesktop … 0027000000
- http://geochalkboard.wordpress.com/2010 … y-mapping/

Cordialement,
Kevin

Dernière modification par Kevin Jousseaume (Wed 30 January 2013 23:26)

Hors ligne

 

#3 Thu 31 January 2013 08:39

Kevin Jousseaume
Participant assidu
Lieu: Nanterre, région parisienne
Date d'inscription: 20 Mar 2006
Messages: 217

Re: [ArcGis Desktop 10.1] Génération d'une mise en page pdf automatique

Bonjour,

En complément, si le language Java ne vous effraie pas, je ne peux que vous conseiller de regarder le code source de l'excellent Web service d'impression développé par Tom Schuller. Ce code est accessible ici : http://bitbucket.schuller.lu/pchprintsoe/src

Ce Web service est basé justement par la création d'un fichier MXD temporaire contenant des services cartographiques et des éléments cartographiques (images, échelle, etc.) chargés à la volée.

Vous trouverez ainsi une fonction qui devrait vous intéresser ici : http://bitbucket.schuller.lu/pchprintso … ?at=master

Code:

public String exportMapToMxdFile(SOELogger logger, String exportFileName, Map map) throws IOException {
        if (!exportFileName.endsWith(".mxd"))
            exportFileName = exportFileName + ".mxd";
        logger.debug(TAG, "exportMapToMxdFile.exportFileName: " + exportFileName);
        File outFile = new File(exportFileName);
        logger.debug(TAG, "exportMapToMxdFile.outFile: " + outFile);
        if (outFile.exists()) {
            logger.debug(TAG, "exportMapToMxdFile.EXISTS.outFile: " + outFile);
            boolean deleted = outFile.delete();
            logger.debug(TAG, "exportMapToMxdFile.deleting.exportFileName: " + deleted);
        }
        logger.debug(TAG, "exportMapToMxdFile.creatingNewMapDocument");
        MapDocument mapDocument = new MapDocument();
        logger.debug(TAG, "exportMapToMxdFile.mapDocument: " + mapDocument);
        mapDocument.esri_new(exportFileName);
        mapDocument.replaceContents(map);
        mapDocument.setActiveView(map);
        mapDocument.setComments("developed by tom@schuller.lu");
        mapDocument.setDocumentTitle("generated by PChPrintSOE");
        mapDocument.setSubject("generated by PChPrintSOE");
        logger.debug(TAG, "exportMapToMxdFile.saving.exportFileName: " + exportFileName);
        mapDocument.save(false, false);
        mapDocument.close();
        logger.debug(TAG, "exportMapToMxdFile.DONE.exportFileName: " + exportFileName);
        return exportFileName;
    }

Cette fonction crée un nouveau MXD et importe son contenu à partir d'un objet Map qui n'est autre qu'un IActiveView. Exemple d'appel de cette fonction ici :http://bitbucket.schuller.lu/pchprintso … ?at=master

Code:

private String exportViewToFile(String exportFileName, PchPrintOutput printOutput, IActiveView activeView, boolean gpTask) throws IOException {
        String mxdFileName = "?";
        if (GENERATE_ALWAYS_MXD || printOutput.getFormat().equalsIgnoreCase("mxd")) {
            try {
                if (activeView instanceof Map) {
                    mxdFileName = mxdUtils.exportMapToMxdFile(logger, exportFileName, (Map) activeView);
                } else if (activeView instanceof PageLayout) {
                    mxdFileName = mxdUtils.exportLayoutToMxdFile(logger, exportFileName, (PageLayout) activeView);
                } else {
                    logger.error(TAG, "\n\n\n\nUnHandled exportViewToFile on IActiveView: " + activeView);
                    return mxdFileName;
                }
            } catch (Exception ex) {
                logger.error(TAG, "PrintTask.exportViewToFile.generateMXD.Exception", ex);
                ex.printStackTrace();
            }
        }
    [...]}

Hors ligne

 

Pied de page des forums

Powered by FluxBB