Printing in SL 2.0 comparsion

4825
59
10-04-2010 05:27 AM
LakshmananVenkatesan
Occasional Contributor II
Dear All:

We have developed Print functionality in Web application using ESRI SL 1.2, ArcGIS 9.3.1. Client application willl send all visible layers, graphics (poly,line and point) as string , text symbols as string to server side and recreate a map document and construct geometry from string and generate a image and display in web page.

If we have say 100 lines as graphics, string which we generate is very big and unable to process( or send via http). Server side is done using GP Tool. Question is we have planned to move to ArcGIS 10 and SL 2.0.

What are all advantages in print functionality using ArcGIS 10 and SL 2.0  (MS SL 4.0) or rather how easy to print the map with graphics and other options ?

Please throw light on this
0 Kudos
59 Replies
SamuelDantas
New Contributor
Thanks Dominique, but when I try to change the template programmatically the print preview goes blank.

Any ideas?
0 Kudos
FengLin
New Contributor
Is it possible to print to PDF file (like export to PDF file), instead of print to printer driver?
0 Kudos
DominiqueBroux
Esri Frequent Contributor

Thanks Dominique, but when I try to change the template programmatically the print preview goes blank.

I didn't reproduce the issue.
I tested by changing programmaticaly the template (with the control template of my previous mail) and it's working well.
 
ControlTemplate dt = (ControlTemplate)Resources["myMapPrinterCT"];
mapPrinterWithPreview.Template = dt;


I tested also changing the style programmaticaly : looks OK.

I would need more info on how to reproduce your issue.
Thanks.
0 Kudos
DominiqueBroux
Esri Frequent Contributor
Is it possible to print to PDF file (like export to PDF file), instead of print to printer driver?


You can use a PDF printer driver. For example, these PDF : A4, A3, A2, A0, A4 4 pages, A4 16 pages have been generated with PDFCreator as printer driver.
0 Kudos
LakshmananVenkatesan
Occasional Contributor II
Hi

I liked your sample very much, how do I customise.?. All I want is I want to print some text information along with the Map in the same page.

Im new to SL can you quickly give few steps to begin with?

SR
0 Kudos
DominiqueBroux
Esri Frequent Contributor
Hi,

You can print text inforamtion along the map.

You have to edit the mapPrinter template (for example with BLEND as described in this thread).

As example, if you define this style:
 
    <UserControl.Resources>
        <controls:ToVisibilityConverter x:Key="toVisibility" />
  <Style x:Key="mapPrinterStyle" TargetType="controls:MapPrinter">
   <Setter Property="Foreground" Value="#FF333333"/>
   <Setter Property="Background">
    <Setter.Value>
     <LinearGradientBrush EndPoint=".7,1" StartPoint=".7,0">
      <GradientStop Color="#FFFFFFFF" Offset="0"/>
      <GradientStop Color="#FFF9FAFB" Offset="0.375"/>
      <GradientStop Color="#FFE5E8EB" Offset="0.625"/>
      <GradientStop Color="#FFCBD1D7" Offset="1"/>
     </LinearGradientBrush>
    </Setter.Value>
   </Setter>
   <Setter Property="BorderBrush">
    <Setter.Value>
     <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
      <GradientStop Color="#FFA3AEB9" Offset="0"/>
      <GradientStop Color="#FF8399A9" Offset="0.375"/>
      <GradientStop Color="#FF718597" Offset="0.375"/>
      <GradientStop Color="#FF617584" Offset="1"/>
     </LinearGradientBrush>
    </Setter.Value>
   </Setter>
   <Setter Property="BorderThickness" Value="1" />
   <Setter Property="Height" Value="1050" />
   <Setter Property="Width" Value="750" />
   <Setter Property="ExtentFillSymbol">
    <Setter.Value>
     <esri:SimpleFillSymbol Fill="#05FF0000" BorderBrush="Red" BorderThickness="2" />
    </Setter.Value>
   </Setter>
   <Setter Property="PageFillSymbol">
    <Setter.Value>
     <esri:SimpleFillSymbol Fill="#050000FF" BorderBrush="Blue" BorderThickness="2" />
    </Setter.Value>
   </Setter>
   <Setter Property="TextSymbol">
    <Setter.Value>
     <esri:MarkerSymbol >
      <esri:MarkerSymbol.ControlTemplate>
       <ControlTemplate>
        <TextBlock RenderTransformOrigin="0,0"  Text="{Binding Attributes[Page]}" FontSize="72" Foreground="#800000FF">
                                <TextBlock.RenderTransform>
                                    <CompositeTransform TranslateX="-35" TranslateY="-50" ScaleX="1" ScaleY="1" />                   
                       </TextBlock.RenderTransform>
        </TextBlock>
       </ControlTemplate>
      </esri:MarkerSymbol.ControlTemplate>
     </esri:MarkerSymbol>
    </Setter.Value>
   </Setter>
   <Setter Property="Template">
    <Setter.Value>
     <ControlTemplate TargetType="controls:MapPrinter">
      <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="0">
       <Border Padding="{TemplateBinding Padding}" Background="{TemplateBinding Background}" Margin="0">
        <Grid>
         <Grid.RowDefinitions>
          <RowDefinition Height="Auto"/>
          <RowDefinition />
          <RowDefinition Height="Auto"/>
          <RowDefinition Height="Auto"/>
         </Grid.RowDefinitions>
         <Grid.ColumnDefinitions>
          <ColumnDefinition Width="300" />
          <ColumnDefinition Width="*" />
         </Grid.ColumnDefinitions>
         <!-- Header -->
         <TextBlock Text="{TemplateBinding PrintDocumentName}" HorizontalAlignment="Center" FontSize="12" Grid.Row="0" Grid.ColumnSpan="2"
           Visibility="{Binding PrintDocumentName, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource toVisibility}}"/>
 
         <!-- Body-->
         <StackPanel Grid.Row="1" Grid.Column="0">
          <TextBlock  TextWrapping="Wrap"  Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus at leo eu dolor rhoncus lacinia at a elit. Praesent in justo tellus, in consectetur magna. Vivamus nec velit urna, ut posuere odio. Quisque placerat odio id nibh bibendum tristique. Suspendisse ullamcorper mauris in turpis adipiscing cursus. Nullam malesuada ultricies elit id sodales. Nam tincidunt, enim at dapibus facilisis, quam nulla iaculis dolor, vel eleifend nisi ligula at massa. Integer aliquam vestibulum velit, sed vestibulum neque sollicitudin at. Vestibulum magna diam, porta in varius ut, tempus nec mi. Proin rhoncus lacinia tortor, et laoreet neque tincidunt in. Cras varius sagittis augue sed congue. Fusce ipsum enim, iaculis quis luctus nec, facilisis ac sem.
In tortor orci, tempus vel accumsan a, rhoncus vitae arcu. Praesent nisl diam, lobortis et venenatis vitae, pretium eget felis. In porta mi vel libero mattis vel bibendum felis tempus. Vestibulum vehicula suscipit hendrerit. Praesent luctus mattis lorem. Vivamus pharetra nunc placerat tortor consequat a tempus leo aliquam. Etiam iaculis lacus quis tortor porta gravida. Duis congue hendrerit sem, sed consectetur justo sollicitudin eu. Sed fringilla tortor et tortor ullamcorper vitae pulvinar orci luctus. Ut egestas ullamcorper nibh, nec venenatis nulla suscipit sed. In nec quam leo, at fermentum nisi.
Curabitur at pretium ligula. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Fusce porttitor, risus eget rhoncus lobortis, felis leo placerat turpis, eget aliquam odio nibh non massa. Integer vel nunc sem, vel lacinia enim. Ut auctor erat ut nisl tristique eget sodales risus gravida. Duis velit dolor, porta eu posuere ac, hendrerit ac nisl. Nam id molestie ante. Sed molestie sodales purus, malesuada dictum nisi sollicitudin a. Nulla mattis auctor turpis, non tempus nisl tempor a. Donec vel libero vitae elit congue sollicitudin.
Nullam volutpat bibendum convallis. Nulla id urna nunc. Donec molestie volutpat risus, ac accumsan est tristique non. Aliquam commodo, nisi quis luctus consequat, leo ligula blandit sapien, hendrerit sagittis nisi nisl a dui. Maecenas varius leo ut ante pellentesque euismod. Praesent placerat ornare ante id tincidunt. Cras scelerisque lacinia facilisis. Aenean felis odio, imperdiet nec porttitor nec, pulvinar id urna. Phasellus congue lectus vitae nisi commodo nec blandit leo accumsan. Nullam ultrices lectus id quam vestibulum in molestie leo malesuada. Cras augue orci, mattis in hendrerit et, tincidunt vel urna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin vestibulum tortor in leo feugiat aliquet. Duis nulla mauris, malesuada sed molestie id, imperdiet vitae nisi. Phasellus facilisis aliquam sem, ac porta dolor euismod bibendum.
" />
         </StackPanel>
         <Grid Grid.Row="1" Grid.Column="1">
          <!-- Map-->
          <!--<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">-->
          <esri:Map x:Name="PrintMap" IsLogoVisible="False" />
          <!--</Border>-->
          <!-- Scale Bar -->
          <esri:ScaleBar Map="{Binding ElementName=PrintMap}" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="20,0,0,10" Grid.Row="1" TextColor="Black"/>
         </Grid>
         <!-- Footer -->
         <TextBlock TextWrapping="Wrap"  Grid.Row="2" Grid.ColumnSpan="2"
              Text="Duis elit tortor, sollicitudin in pharetra ut, facilisis fringilla nisi. Donec tortor est, rhoncus dapibus pretium quis, sollicitudin in neque. Morbi rhoncus tincidunt nulla. Vestibulum tincidunt suscipit sem, ut ultrices elit sollicitudin eu. Nunc dapibus venenatis augue id iaculis. Proin porta pulvinar augue id lobortis. Vivamus in vestibulum libero. Fusce ac purus eget ante sollicitudin porttitor. Morbi convallis, mi a consequat elementum, odio mauris suscipit diam, eu consectetur sem enim vitae lacus. Sed dictum massa eu sem vehicula adipiscing. Donec vitae nunc id nisl blandit lobortis in eget tellus. In sit amet tincidunt elit. Praesent ac turpis eget nibh laoreet varius nec sit amet magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. "/>
         <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom" Grid.Row="3"
                                   Text="{Binding Now, StringFormat='Printed {0:d} '}" />
         <TextBlock HorizontalAlignment="Center" VerticalAlignment="Bottom" Grid.Row="3" Grid.ColumnSpan="2"
                                   Text="{Binding Scale, StringFormat='1 : {0:F0} '}" />
         <StackPanel HorizontalAlignment="Right" VerticalAlignment="Bottom" Orientation="Horizontal" Grid.Row="3" Grid.ColumnSpan="2">
          <TextBlock Text="{Binding CurrentPage, RelativeSource={RelativeSource TemplatedParent}, StringFormat='Page {0} '}" />
          <TextBlock Text="{Binding PageCount, RelativeSource={RelativeSource TemplatedParent}, StringFormat='/ {0}'}" />
         </StackPanel>
        </Grid>
       </Border>
      </Border>
     </ControlTemplate>
    </Setter.Value>
   </Setter>
  </Style>
 </UserControl.Resources>
 


and use it as style for your mapPrinter:

 
<controls:PrintPreview x:Name="PrintPreview" Background="{StaticResource CommonBackgroundBrush}" >
  <controls:MapPrinter Map="{Binding ElementName=Map}" PrintDocumentName="Tour de France 2010" IsActive="True" Height="1050" Width="750"
Style="{StaticResource mapPrinterStyle}"
IsScaleFixed="True" Scale="2000000" PrintExtent="-400000, 5230000, 840000, 6870000"
BorderBrush="DarkBlue" BorderThickness="1" Foreground="White" Background="MediumSlateBlue" />
</controls:PrintPreview>


You will get a result looking like the attached document.
�??
0 Kudos
FrankTrevino
New Contributor
Hello,
I've downloaded the MapPrinting source code, but I  keep getting: The tag 'Legend' does not exist in XML namespace 'http://schemas.esri.com/arcgis/client/2009'.


The type 'esri:Legend' was not found. Verify that you are not missing an assembly reference and that all referenced assemblies have been built.


is there something else I need to add to recognize the 'Legend' tag and also the 'Style' tag found in type 'Legend'

Thanks.
Frank.
0 Kudos
DominiqueBroux
Esri Frequent Contributor
The legend control is new in 2.1.  So, it's not there if you are using 2.0 version.

In the print map sample, the legend is only used in a sample of print style. If you remove it, you no longer need 2.1 version.

BTW : The 2.1 final is now available for download : http://help.arcgis.com/en/webapi/silverlight/
0 Kudos
DanielWalton
Occasional Contributor
Dominique,

If I set RotateMap="'True" in XAML, I get a runtime exception. Am I doing something wrong?
0 Kudos
DominiqueBroux
Esri Frequent Contributor
It's a bug in the sample.

To fix it,

1) in MapPrinter.xaml.cs(OnRotateMapChanged method), add a test on _isLoaded:
private void OnRotateMapChanged(bool rotateMap)
{
   if (_isLoaded)
   {
        _printMap.Rotation = (rotateMap ? -90 : 0);
        PreparePages();
   }
}
2) in MapPrinter.xaml.cs(OnApplyTemplate method), initialize the map rotation:
 _isLoaded = true;
_printMap.SizeChanged += (s, e) => { PreparePages(); SetPrintMapExtent(CurrentPage); }; // Calculate print pages when printMap size will be known (or changed by selecting a printer or a printer paper size)
_printMap.Rotation = (RotateMap ? -90 : 0);
PreparePages();
3) in CloneMap.cs(Clone method), don't initialize the map rotation:
 map.TimeExtent = mapToClone.TimeExtent;
//map.Rotation = mapToClone.Rotation;
int index = 0;
Thanks for pointing this out.
0 Kudos