Print¶
Adding the print feature to a c2cgeoportal project involves adding
a cgxp.plugins.Print plugin to the viewer, and configuring the MapFish
Print.
The Print plugin¶
The viewer should include a Print plugin for the print feature to
be available in the user interface.
See the Print API doc for the list of options the plugin can receive.
The main viewer includes a Print plugin by default.
Using MapFish Print v3¶
Migration from the v2¶
Start the migration by instantiating the default template:
cd <project_root> cp -r print ~ git rm -r print SRID=-1 .build/venv/bin/pcreate --interactive --scaffold c2cgeoportal_create --package-name <package> /tmp/<project> .build/venv/bin/pcreate --interactive --scaffold c2cgeoportal_update --package-name <package> /tmp/<project> mv /tmp/<project>/print . rm -rf /tmp/<project>
Then in ~/print you will have a backup of the old template, and in the print folder you will have the new print configuration.
In the <package>.mk you should remove the PRINT_VERSION = 2 (it is 3 by default).
In the concerned viewer javascript files, in the cgxp_print plugin add the following lines:
version: 3,
encodeLayer: {},
encodeExternalLayer: {},
additionalAttributes: []
Template configuration¶
All print-related files are located in the print/ folder, and the files related to the template in the
print/print-apps/<package> folder.
The main configuration file is print/print-apps/<package>/config.yaml.
MapFish Print v2 configuration¶
All print-related files are located in the print/ folder.
The main file (print/config.yaml) used to define your print template written in YAML format.
Spec attributes¶
With CGXP we have the following spec attributes:
On each page:
centerCenter (standard).rotationMap rotation (standard).scaleScale (standard).showMapUsed to show the map.showMapframeUsed to show the border on the map page. [1]showNorthUsed to show the arrow on the map page. [1]showScaleUsed to show the scale bar on the map page. [1]showScaleValueUsed to show the scale on the map page. [1]showAttrUsed to show the table on the query result pages. [2]showMapQueryResultNot used, true for the query result pages. [2]col0-coln: Column tiles for the query result pages.table: Query result table.
| [1] | (1, 2, 3, 4) is true on the map page and false on query result pages |
| [2] | (1, 2) is true on the query result pages and false on map page |
Global:
dpiThe DPI (standard).layoutThe used layout (standard).srsThe EPSG code (standard).unitThe unit (standard).legendThe legend (standard).titleThe document title.commentThe document description.
Note
If you use Mako templates for generating the print configuration,
to prevent character ‘$’ from being incorrectly interpreted, use
<%text>$</%text>{attribute} in place of ${attribute}.
Mako templating¶
If you intend to have more than one paper format for your PDF
print output, a templating system is implemented to allow you to use mako
template so you do not have to duplicate a huge quantity of code in your print/config.yaml.
In the default template we have two base print template A4_portrait.mako and
A3_landscape.mako where we have some blocks like:
<%def name="title()"> 1 A4 portrait </%def>
And in print/templates/A3_landscape_inherit.mako and
print/templates/A4_portrait_inherit.mako thoses block will
be redefined.
The print.yaml.mako has the “header” part and includes the wanted templates.
Using backgroundPdf parameter¶
In print configuration you can use a PDF as a background image. You should put the
PDF file in the print directory and use
<%text>$</%text>{configDir}/template_A4_portrait.pdf
for the value of backgroundPdf parameter.
The print.yaml.mako has the “header” part and includes the wanted templates.
Using a single print server in a set of sites¶
For memory issues it is recommended to only use a single print server for a set of sites.
For that we need to have only one vars_<project>.yaml which can easily be
generated by the templating. Then we should do:
Remove the print from the
childrenprojects by removing theprintfolder:git rm printDeactivate the print compilation by adding the following lines in the
<package>.mkfile:PRINT_VERSION = NONE
Point to the parent print server by editing the following lines in the
vars_<package>.yamlfile:vars: ... # For print proxy # This value means that we use the parent print server print_url: http://{host}:8080/print-{parent_instanceid}/pdf/
If needed set the print templates used by anonymous users by adding the following in the application configuration (
vars_<package>.yaml):vars: ... functionalities: anonymous: print_template: - 1 A4 child - 2 A3 child
Note
In the user vars of children projects, the parent_instanceid should be
defined so that it works in the user dev environment.
Note
This system works for print v2 but must be adapted for print v3 (although that is the same idea).
Having a dedicated print instance¶
The goal is to be able to create a custom makefile with which one we make:
make -f <file>.mk
To have only the print.
For this, create a makefile with:
BUILD_RULES = test-packages print
TEST_PACKAGES = main print