HOWTO développement Sashipa

 Imprimer des étiquettes.

Vous souhaitez associer un état à un formulaire listForm pour imprimer des étiquettes.

Dans cette page nous décortiquons l'exemple fourni par l'application DemoContact. Commençons par la vue générale :

  <printReport name='PRtblContactadresse_Mailing'>
    <pageFormat format='A4' orientation='portrait' />
    <pageImageableArea x='40' y='35' w='515' h='772' relativeLocation='no' />

    <caption>Etiquettes Adresses</caption>

    <pageContent>
      <mailingDistribution labelsInWidth='2' labelsInHeight='7'>
        <mailingLabelSize w='217' h='95' />
        <mailingLabelGap firstWidth='40' firstHeight='46' width='75' height='16' />

        ... dataRecordPrinter ...

      </mailingDistribution>
    </pageContent>

  </printReport>

La première chose à faire est de définir le nombre d'étiquettes sur la largeur (ici labelsInWidth='2') ainsi qu'en hauteur (dans notre cas labelsInHeight='7'). On a aussi une idée des marges à laisser autour de la zone imprimable. A partir de là il nous faut calculer les attributs qui suivent. On remarque au passage que nos coordonnées sont calculées en absolu par rapport à la page (relativeLocation='no').

Un format A4 fait 595 * 842. Voici le détail des calculs :

          A4: page width = 595, page height = 842
          Largeur d'une étiquette : 1er gap = 40; w; 2eme gap = 40
          => gap du milieu = 40 + 40 = 80
          Hauteur d'une étiquette : 1er gap = 11; h; 2eme gap = 0
          Largeur d'une page : gap page debut = 0 ; gap page fin = 0
          Hauteur d'une page : gap page debut = 35 ; gap page fin = 35
          w: (595 - 40*2 - 40*2) / 2 = 435 / 2 = 217 reste 1
          h: (842 - 46 - 35 - 16*6) / 7 = 665 / 7 = 95 reste 0

Une fois ces formalités accomplies, on peut définir le contenu d'une étiquette. On utilise un dataRecordPrinter, qui multipliera le serieDrawFigure par le nombre de données renvoyées par le printerDataSource :

  <dataRecordPrinter>

    ... serieDrawFigure ...

    ... printerDataSource ...

  </dataRecordPrinter>

Commençons par le serieDrawFigure. On veut imprimer :

  <serieDrawFigure locations='relativeVertical' atomic='yes' checkMaxHeight='no'>
    <defaultFont name='arial' style='plain' size='10' />
    <defaultSubDrawFigureAttributes maxHeight='26' />

    <!-- ContactNom, ContactPrenom -->
    <serieDrawFigure locations='relativeHorizontal' checkMaxWidth='no'>
      <defaultSubDrawFigureAttributes y='0' maxHeight='26' />
      <!-- ContactPrenom -->
      <textDrawFigure x='0' maxWidth='150'>
        <instanceColumn schemaColumn='tblContact_Contactprenom' />
      </textDrawFigure>
      <!-- ContactNom -->
      <textDrawFigure x='4' maxWidth='150'>
        <instanceColumn schemaColumn='tblContact_Contactnom' />
      </textDrawFigure>
    </serieDrawFigure>

    <!-- rue -->
    <textDrawFigure maxHeight='50'>
      <instanceColumn schemaColumn='tblContactadresse_Adresserue' />
    </textDrawFigure>

    <!-- CP, ville -->
    <serieDrawFigure locations='relativeHorizontal' checkMaxWidth='no'>
      <defaultSubDrawFigureAttributes y='0' maxHeight='26' />
      <!-- CP -->
      <textDrawFigure x='0' maxWidth='38'>
        <instanceColumn schemaColumn='tblContactadresse_Adressecp' />
      </textDrawFigure>
      <!-- ville -->
      <textDrawFigure x='4' maxWidth='200'>
        <instanceColumn schemaColumn='tblContactadresse_Adresseville' />
      </textDrawFigure>
    </serieDrawFigure>
  </serieDrawFigure>

Quelques remarques :

Il nous reste à voir la source de donnée de notre état :

  <printerDataSource>
    <selectQuery db='dbDemoContact'>
      <selectStatement>
        <instancePk>
          <instanceTable schemaTable='tblContactadresse' />
        </instancePk>
        <instanceColumnList>
          <instanceColumn schemaColumn='tblContact_Contactprenom' />
          <instanceColumn schemaColumn='tblContact_Contactnom' />
          <instanceColumn schemaColumn='tblContactadresse_Adresserue' />
          <instanceColumn schemaColumn='tblContactadresse_Adressecp' />
          <instanceColumn schemaColumn='tblContactadresse_Adresseville' />
        </instanceColumnList>
      </selectStatement>
      <fromStatement>
        <mainInstanceTable schemaTable='tblContactadresse' />
        <fkJoin join='inner'>
          <instanceFk schemaFk='fk_tblContactadresse_tblContact' />
        </fkJoin>
      </fromStatement>
    </selectQuery>
  </printerDataSource>

C'est une requête simple (et non un selectQueryBuilder dynamique). Comme on ne spécifie pas de mode au printerDataSource, il prendra sa valeur par défaut pour le cas d'une simple requête : mode='merge'. On redéfinit ici les clauses Select et From. La requête finale récupérera donc les clauses Where et OrderBy dans la requête de la listForm.

© Copyright 2003 Sashipa-Melba Team. Ce document de la technologie Sashipa-Melba est sous licence GNU FDL Vous pouvez le copier et modifier librement les copies tant que cette mention apparaît clairement.