File: /home/mmickelson/theflexguy.com/apps/silicondesigner/sg/assets/docs/SDFlexConfig.htm
<html>
<head>
<meta name=Title content="">
<meta name=Keywords content="">
<meta http-equiv=Content-Type content="text/html; charset=macintosh">
<meta name=Generator content="Microsoft Word 14 (filtered)">
<style>
<!--
/* Font Definitions */
@font-face
{font-family:Arial;
panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
{font-family:"Courier New";
panose-1:2 7 3 9 2 2 5 2 4 4;}
@font-face
{font-family:Wingdings;
panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
{font-family:"\FF2D\FF33 \660E\671D";
panose-1:0 0 0 0 0 0 0 0 0 0;}
@font-face
{font-family:"\FF2D\FF33 \30B4\30B7\30C3\30AF";
panose-1:0 0 0 0 0 0 0 0 0 0;}
@font-face
{font-family:"\FF2D\FF33 \30B4\30B7\30C3\30AF";
panose-1:0 0 0 0 0 0 0 0 0 0;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:"Arial Unicode MS";
panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
{font-family:Consolas;
panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:Arial;}
h1
{margin-top:24.0pt;
margin-right:0in;
margin-bottom:0in;
margin-left:0in;
margin-bottom:.0001pt;
font-size:16.0pt;
font-family:Calibri;
color:#345A8A;}
h2
{margin-top:10.0pt;
margin-right:0in;
margin-bottom:0in;
margin-left:0in;
margin-bottom:.0001pt;
font-size:13.0pt;
font-family:Calibri;
color:#4F81BD;}
h3
{margin-top:10.0pt;
margin-right:0in;
margin-bottom:0in;
margin-left:0in;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:Calibri;
color:#4F81BD;}
p.MsoTitle, li.MsoTitle, div.MsoTitle
{margin-top:0in;
margin-right:0in;
margin-bottom:15.0pt;
margin-left:0in;
border:none;
padding:0in;
font-size:26.0pt;
font-family:Calibri;
color:#17365D;
letter-spacing:.25pt;}
p.MsoSubtitle, li.MsoSubtitle, div.MsoSubtitle
{margin:0in;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:Calibri;
color:#4F81BD;
letter-spacing:.75pt;
font-style:italic;}
a:link, span.MsoHyperlink
{color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{color:purple;
text-decoration:underline;}
em
{color:red;}
pre
{margin:0in;
margin-bottom:.0001pt;
font-size:10.0pt;
font-family:Courier;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
{margin-top:0in;
margin-right:0in;
margin-bottom:0in;
margin-left:.5in;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:Arial;}
span.MsoSubtleEmphasis
{color:gray;
font-style:italic;}
p.code, li.code, div.code
{margin-top:0in;
margin-right:0in;
margin-bottom:0in;
margin-left:.25in;
margin-bottom:.0001pt;
text-indent:-.25in;
background:#F3F3F3;
border:none;
padding:0in;
font-size:10.0pt;
font-family:Courier;}
span.HTMLPreformattedChar
{font-family:Courier;}
span.Heading1Char
{font-family:Calibri;
color:#345A8A;
font-weight:bold;}
span.Heading2Char
{font-family:Calibri;
color:#4F81BD;
font-weight:bold;}
span.Heading3Char
{font-family:Calibri;
color:#4F81BD;
font-weight:bold;}
span.SubtitleChar
{font-family:Calibri;
color:#4F81BD;
letter-spacing:.75pt;
font-style:italic;}
span.TitleChar
{font-family:Calibri;
color:#17365D;
letter-spacing:.25pt;}
.MsoChpDefault
{font-family:Cambria;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
/* List Definitions */
ol
{margin-bottom:0in;}
ul
{margin-bottom:0in;}
-->
</style>
</head>
<body lang=EN-US link=blue vlink=purple>
<div class=WordSection1>
<h1>Silicon Designer Flex application configuration</h1>
<p class=MsoNormal> </p>
<p class=MsoNormal>The application can be configured using one of three
methods.</p>
<p class=MsoListParagraph style='text-indent:-.25in'><span>1.<span
style='font:7.0pt "Times New Roman"'> </span></span>Using
flashvars in the html wrapper.</p>
<p class=MsoListParagraph style='text-indent:-.25in'><span>2.<span
style='font:7.0pt "Times New Roman"'> </span></span>Using
url query string.</p>
<p class=MsoListParagraph style='text-indent:-.25in'><span>3.<span
style='font:7.0pt "Times New Roman"'> </span></span>Using
the configuration in the admin site.</p>
<h2>Configuration using Flashvars in the html</h2>
<p class=MsoNormal>If flashvars are used, all flashvars without a default
should be provided. Flashvars must be url encoded to properly pass the value to
the Flex application. The flashvars are set as a javascript object in the
<script> block of the html that contains the swfobject. The flashvars
object must be set before the swfobject. An example of setting flashvars in a
dynamically generated page are as follows:</p>
<p class=MsoNormal> </p>
<div style='border:solid #EEECE1 1.0pt;padding:1.0pt 4.0pt 1.0pt 4.0pt;
background:#F3F3F3'>
<p class=code>var flashvars = {};</p>
<p class=code>flashvars.baseUrl = "http://dev.example.com/";</p>
<p class=code>flashvars.sdSessionId = "67da3413-ada5-4c76-92f5-b34c82435656";</p>
<p class=code>flashvars.templateId = "e4874a3d-8d7e-4669-b63a-ca16bcc6a6cc";</p>
</div>
<h2>Configuration in the url query string</h2>
<p class=MsoNormal>If configuration values are provided through the url query
string, the getQuerystring function must be used to gather the flashvars from
the url. The function is passed the name of the field and a default value if
there is one. The default is used when the field doesn't exist. An example of
the url and the javascript in the html is below:</p>
<p class=MsoNormal> </p>
<div style='border:solid #EEECE1 1.0pt;padding:1.0pt 4.0pt 1.0pt 4.0pt;
background:#F3F3F3'>
<p class=code>http://dev.example.com/demo/designer/sd.html?instanceID=b61bbf5a-4b9c-4c67-8c56-b361ab221f62</p>
</div>
<p class=MsoNormal> </p>
<div style='border:solid #EEECE1 1.0pt;padding:1.0pt 4.0pt 1.0pt 4.0pt;
background:#F3F3F3'>
<p class=code>var flashvars = {};</p>
<p class=code>flashvars.baseUrl = getQuerystring("baseUrl",
"http://dev.example.com/");</p>
<p class=code>flashvars.sdSessionId = getQuerystring("sdSessionID",
"");</p>
<p class=code>flashvars.templateId = getQuerystring("templateID",
"");</p>
<p class=code>flashvars.instanceId = getQuerystring("instanceID",
"");</p>
</div>
<p class=MsoNormal> </p>
<p class=MsoNormal>The getQuerystring function that finds the field by name in
the url and returns the value associated with it is as follows:</p>
<p class=MsoNormal> </p>
<div style='border:solid #EEECE1 1.0pt;padding:1.0pt 4.0pt 1.0pt 4.0pt;
background:#F3F3F3'>
<p class=code>function getQuerystring(key, default_)</p>
<p class=code>{</p>
<p class=code> key = key.toLowerCase();</p>
<p class=code> if (default_==null) default_="";</p>
<p class=code> key =
key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");</p>
<p class=code> var regex = new
RegExp("[\\?&]"+key+"=([^&#]*)");</p>
<p class=code> var qs = regex.exec(window.location.href.toLowerCase());</p>
<p class=code> if(qs == null)</p>
<p class=code> return default_;</p>
<p class=code> else</p>
<p class=code> return qs[1];</p>
<p class=code>}</p>
</div>
<h2>Configuration using the Admin site</h2>
<p class=MsoNormal>If the configuration is provided through the admin, it will
be given to the flex application using the session data. In this case, the only
required flashvars to provide in the html or query string are:</p>
<p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:
Symbol'>�<span style='font:7.0pt "Times New Roman"'>
</span></span>baseUrl</p>
<p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:
Symbol'>�<span style='font:7.0pt "Times New Roman"'>
</span></span>sdSessionId</p>
<p class=MsoListParagraph style='text-indent:-.25in'><span style='font-family:
Symbol'>�<span style='font:7.0pt "Times New Roman"'>
</span></span>templateId OR instanceId</p>
<p class=MsoNormal> </p>
<p class=MsoNormal>From there, the Flex application will know where to get the
session information for the sdSessionId provided and what template or instance
to load. The xml returned to the Flex application that has the configuration
values can be seen in the designer.xml contained in the build zip delivered.</p>
<h2>Configuration variables explained</h2>
<p class=MsoNormal> </p>
<p class=MsoNormal><span class=Heading3Char>baseUrl</span> <em><span
style='font-size:10.0pt'>Required</span></em></p>
<p class=MsoNormal>Defines the service endpoint where calls can be made to
retrieve the SDSession, create instances, update layouts, etc. It would be the
domain part of <span style='color:#1F497D'>http://dev.silpub.com/</span>sdsession/action/create.</p>
<p class=MsoNormal> </p>
<p class=MsoNormal><span class=Heading3Char>sdSessionId</span> <em><span
style='font-size:10.0pt'>Required</span></em></p>
<p class=MsoNormal>Provided if the session is created before reaching the Flex
designer application. A common use of this would be when the website takes care
of the user logging in and any other security precautions. The service
validates the sdSessionId based on the IP address provided when it was created.
This is important since it means the server must capture the users IP address
instead of using the server IP address when creating the ID. If something other
than the users IP address is provided, the sdSessionId will be invalid when the
Flex client tries to communicate with the service.</p>
<p class=MsoNormal> </p>
<p class=MsoNormal>If the sdSessionId is not provided, the userId, userPass and
context <i>must</i> be provided so the Flex designer can create a session.</p>
<p class=MsoNormal> </p>
<p class=MsoNormal>OR</p>
<p class=MsoNormal> </p>
<p class=MsoNormal><span class=Heading3Char>userId</span>, <span
class=Heading3Char>userPass</span> and <span class=Heading3Char>context</span><em><span
style='font-size:10.0pt'> Required</span></em></p>
<p class=MsoNormal>The username, password and context the Flex application will
use to generate a sdSessionId. It is recommended that the session be created
prior to launching the Flex designer so these do not have to be passed to the
Flex application.</p>
<p class=MsoNormal> </p>
<p class=MsoNormal><span class=Heading3Char>templateId</span> <em><span
style='font-size:10.0pt'>Required</span></em></p>
<p class=MsoNormal>ID of the template the user will create an instance from if
they are starting fresh.</p>
<p class=MsoNormal> </p>
<p class=MsoNormal>OR</p>
<p class=MsoNormal> </p>
<p class=MsoNormal><span class=Heading3Char>instanceId</span> <em><span
style='font-size:10.0pt'>Required</span></em></p>
<p class=MsoNormal>ID of the instance if an instance has already been created.</p>
<p class=MsoNormal> </p>
<p class=MsoNormal><span class=Heading3Char>ruleCode</span> <span
class=MsoSubtleEmphasis>(default: null)</span></p>
<p class=MsoNormal>This is used to differentiate between sets of options. The
options are configured in the admin site. An example usage could be if a
certain user has preset text options to populate the new instance with when
it's created.</p>
<p class=MsoNormal><span class=Heading3Char>owner</span> <span
class=MsoSubtleEmphasis>(default: "demo")</span></p>
<p class=MsoNormal>This is the user to set as the owner of images available.
This is used to populate an image gallery with just the images that belong to
the user.</p>
<p class=MsoNormal> </p>
<p class=MsoNormal><span class=Heading3Char>variableData</span> <span
class=MsoSubtleEmphasis>(default: null)</span></p>
<p class=MsoNormal>For templates that include variable fields, the variableData
xml will be delivered here. The xml should look like this:</p>
<div style='border:solid #EEECE1 1.0pt;padding:1.0pt 4.0pt 1.0pt 4.0pt;
background:#F3F3F3'>
<p class=code><variables></p>
<p class=code> <Variable spi_var="tagline" value="Foo"/></p>
<p class=code> <Variable spi_var="company"
value="Silicon Publishing"/></p>
<p class=code> <Variable spi_var="phonenumber"
value="415.225.1234"/></p>
<p class=code></variables></p>
</div>
<p class=MsoNormal> </p>
<p class=MsoNormal><span class=Heading3Char>galleryItemsPerPage</span> <span
class=MsoSubtleEmphasis>(default: 6)</span></p>
<p class=MsoNormal>The amount of images to show in the gallery at once. This
should be set to the amount required to fill the available gallery space.</p>
<p class=MsoNormal> </p>
<p class=MsoNormal><span class=Heading3Char>fontSizeOptions</span> <span
class=MsoSubtleEmphasis>(default:
"5,6,7,8,9,10,11,12,14,16,18,21,24,28,32,36,42,48,60,72,88,102,125")</span></p>
<p class=MsoNormal>The font sizes available to the user in the font size drop
down.</p>
<p class=MsoNormal> </p>
<p class=MsoNormal><span class=Heading3Char>maxNumOfUploads</span> <span
class=MsoSubtleEmphasis>(default: 1)</span></p>
<p class=MsoNormal>Defines the maximum number of concurrent image uploads.</p>
<p class=MsoNormal> </p>
<p class=MsoNormal><span class=Heading3Char>zoomMin</span><b> </b>and<b> </b><span
class=Heading3Char>zoomMax</span> <span class=MsoSubtleEmphasis>(default: 0.25
and 5)</span></p>
<p class=MsoNormal>The minimum and maximum zoom percentage allowed, 1 being
100%.</p>
<p class=MsoNormal> </p>
<p class=MsoNormal><span class=Heading3Char>zoomIncrement</span> <span
class=MsoSubtleEmphasis>(default: 0.25)</span></p>
<p class=MsoNormal>The increment used if the user has + and – options for
zooming with buttons.</p>
<p class=MsoNormal> </p>
<p class=MsoNormal><span class=Heading3Char>fontImagesBaseUrl</span> <span
class=MsoSubtleEmphasis>(default: "assets/fonts/fontImages/")</span></p>
<p class=MsoNormal>The url where the font family name images are kept. These
images are used in the font selection drop down to show the user what the font
looks like. The images will be png's named with the fontId of each font. This
could be a full url or a relative url. An example of a full url could be
"http://www.example.com/siteassets/fontImages/" where individual font
images would be accessible by appending the fontId.png (ie. arial_narrow.png)
to the end.</p>
<p class=MsoNormal> </p>
<p class=MsoNormal><span class=Heading3Char>lazyLoadLayouts</span> <span
class=MsoSubtleEmphasis>(default: false)</span></p>
<p class=MsoNormal>This tells the application if it should load the page data
only when requested. This defaults to loading all pages so validation can be
performed on pages even when the user hasn't visited them. If a template has
more than a few pages, this could slow the startup time considerably.</p>
<p class=MsoNormal> </p>
<p class=MsoNormal><span class=Heading3Char>loadLayoutSnapshots</span> <span
class=MsoSubtleEmphasis>(default: false)</span></p>
<p class=MsoNormal>This instructs the application to load thumbnail images of
all the pages. This would only be necessary if the application provided a
preview thumbnail of pages before the user visited them.</p>
<p class=MsoNormal> </p>
<p class=MsoNormal><span class=Heading3Char>placeholderImageAssetID</span> <span
class=MsoSubtleEmphasis>(default: none)</span></p>
<p class=MsoNormal>This defines the asset ID of the image used for
placeholders. If a user opens an instance they previously filled all
placeholders in, this tells the application what image to put back in the
placeholder if the user clears their image.</p>
<p class=MsoNormal> </p>
<p class=MsoNormal><span class=Heading3Char>placeholderImageScaleType</span> <span
class=MsoSubtleEmphasis>(default: "fitContentProportionally")</span></p>
<p class=MsoNormal>This defines how the placeholder image is fit into the
frame. The default is to make the image small enough that the entire image is
visible. If the placeholder image has text instructing the user to place an
image there, this would be the option to choose. The other options are
"fitFrameProportionally" and "fitContentToFrame".</p>
<p class=MsoNormal> </p>
<p class=MsoNormal><span class=Heading3Char>spellCheckEnabled</span> <span
class=MsoSubtleEmphasis>(default: false)</span></p>
<p class=MsoNormal>This tells the application whether or not to enable spell
check from the start. This is useful when you want spell check to happen only
at specific points in the workflow vs. constant feedback to the user throughout
their editing session.</p>
<h3>spellCheckLanguageCode<span class=MsoSubtleEmphasis><span style='font-weight:
normal'> (default: "en_US")</span></span></h3>
<p class=MsoNormal>The language code to use for spell check.</p>
<h3>spellCheckConfigLocation<span class=MsoSubtleEmphasis><span
style='font-weight:normal'> (default: "AdobeSpellingConfig.xml")</span></span></h3>
<p class=MsoNormal>The location, including filename, of the
AdobeSpellingConfig.xml. The default value of
"AdobeSpellingConfig.xml" would mean that it is a sibling file to the
swf. This is only necessary for applications that use spell check.</p>
<p class=MsoNormal> </p>
<p class=MsoNormal><span class=Heading3Char>daoCode</span> and <span
class=Heading3Char>parserCode</span> <span class=MsoSubtleEmphasis>(default:
"remote")</span></p>
<p class=MsoNormal>Both should be <i>remote</i>. These are configuration
options we can use when we're testing using local templates. It tells the Flex
application which DAO (Data Access Object) to use when making the service calls
and how to parse the responses from the service. If you're matching our
recommended services, they will stay as remote.</p>
<p class=MsoNormal> </p>
<p class=MsoNormal><span class=Heading3Char>showGalleryForNewImage</span> <span
class=MsoSubtleEmphasis>(phasing out.)</span></p>
<p class=MsoNormal>Tells the application if it should show the gallery immediately
when adding an image. This is now being configured in the skin when developing
the application.</p>
<p class=MsoNormal> </p>
<p class=MsoNormal><span class=Heading3Char>previewQuality</span> <span
class=MsoSubtleEmphasis>(default: "lrg")</span></p>
<p class=MsoNormal>Tells the application the quality of thumbnails for the
layout preview. Not all applications show a preview of the layout, so this is
not required. Valid values are "lrg", "med" or
"sml" (stand for large, medium and small)</p>
<h3>globalFontMapPath <span class=MsoSubtleEmphasis><span style='font-weight:
normal'>(default: null)</span></span></h3>
<p class=MsoNormal>If you use a static global font map xml file, you can set
this to that path. The application will use the fonts provided in the instance
xml and layout xml for it's global font map if this is omitted.</p>
<h3>allowFotoliaImages<span class=MsoSubtleEmphasis><span style='font-weight:
normal'> (default: false)</span></span></h3>
<p class=MsoNormal>Indicates whether to show the fotolia image gallery in
applications that utilize that feature.</p>
<h3>defaultFotoliaSearchValue <span class=MsoSubtleEmphasis><span
style='font-weight:normal'>(default: "")</span></span></h3>
<p class=MsoNormal>For applications that have a fotolia gallery, this defines
what the default search term will be when they view the gallery.</p>
<h3>autoSaveLength <span class=MsoSubtleEmphasis><span style='font-weight:normal'>(default:
5)</span></span></h3>
<p class=MsoNormal>Tells the application how long to wait between automatically
saving the instance, in minutes.</p>
<h3>trackMetricEvents <span class=MsoSubtleEmphasis><span style='font-weight:
normal'>(default: false)</span></span></h3>
<p class=MsoNormal>If true, there will be callbacks to the javaScript function
trackMetric describing the control that was interacted with and the value.</p>
<h3>ppiThreshold <span class=MsoSubtleEmphasis><span style='font-weight:normal'>(default:
250)</span></span></h3>
<p class=MsoNormal>The point at which a warning will show to the user that the
picture may start to look pixellated. As the user resizes an image, this value
is calculated and checked. If the user resizes an image too large, a warning
will show on the image frame. For more details, see Appendix B – PPI warnings
explained</p>
<h3>localStorageName <span class=MsoSubtleEmphasis><span style='font-weight:
normal'>(default: "SPI")</span></span></h3>
<p class=MsoNormal>For applications that need to remember a selection made by
the user such as clicking that they don't need to see a help screen when the
app starts up again. A local shared object (similar to a cookie) is used to
save that information. The application uses this to identify the shared object
to access.</p>
<h3>localizationUrl <span class=MsoSubtleEmphasis><span style='font-weight:
normal'>(default: "")</span></span></h3>
<p class=MsoNormal>For localized applications, this is used to point to the
file that has the localization strings for the user interface.</p>
<h1>Appendix A – Document Updates</h1>
<p class=MsoNormal>10/7/13</p>
<p class=MsoListParagraph style='text-indent:-.25in'><span>1.<span
style='font:7.0pt "Times New Roman"'> </span></span>Changed
<span style='font-family:Consolas'>sessionId</span> flashvar to <span
style='font-family:Consolas'>sdSessionId</span> to match what the service
provides.</p>
<p class=MsoListParagraph style='text-indent:-.25in'><span>2.<span
style='font:7.0pt "Times New Roman"'> </span></span>Added
more explanation to the sdSessionId explanation to help with correct
implementation and use.</p>
<p class=MsoNormal>10/9/13</p>
<p class=MsoListParagraph style='text-indent:-.25in'><span>1.<span
style='font:7.0pt "Times New Roman"'> </span></span>Added
sample spi_var xml.</p>
<p class=MsoNormal>1/31/14</p>
<p class=MsoListParagraph style='text-indent:-.25in'><span>1.<span
style='font:7.0pt "Times New Roman"'> </span></span>Added
placeholderImageAssetID and placeholderImageScaleType and their descriptions.</p>
<p class=MsoListParagraph style='text-indent:-.25in'><span>2.<span
style='font:7.0pt "Times New Roman"'> </span></span>Changed
lazyLoadLayouts default to false and updated the description.</p>
<p class=MsoListParagraph style='text-indent:-.25in'><span>3.<span
style='font:7.0pt "Times New Roman"'> </span></span>Added
note about the designer.xml used in session response configuration.</p>
<p class=MsoListParagraph style='text-indent:-.25in'><span>4.<span
style='font:7.0pt "Times New Roman"'> </span></span>Added
spellCheckEnabled description.</p>
<p class=MsoListParagraph style='text-indent:-.25in'><span>5.<span
style='font:7.0pt "Times New Roman"'> </span></span>Added
example to ruleCode description.</p>
<p class=MsoListParagraph style='text-indent:-.25in'><span>6.<span
style='font:7.0pt "Times New Roman"'> </span></span>Added
explanation about change to skin configuration for showGalleryForNewImage.</p>
<p class=MsoNormal>12/5/14</p>
<p class=MsoListParagraph style='text-indent:-.25in'><span>1.<span
style='font:7.0pt "Times New Roman"'> </span></span>Added
spellCheckConfigLocation, spellCheckLanguageCode, globalFontMapPath,
allowFotoliaImages, defaultFotoliaSearchValue, trackMetricEvents, ppiThreshold,
localStorageName, and localizationUrl.</p>
<p class=MsoNormal>2/20/2015</p>
<p class=MsoListParagraph style='text-indent:-.25in'><span>1.<span
style='font:7.0pt "Times New Roman"'> </span></span>Adding
Appendix B – PPI warnings explained.</p>
<p class=MsoNormal> </p>
<h1>Appendix B – PPI warnings explained</h1>
<p class=MsoNormal>When rendering a document in the Silicon Designer Flex web
application, it is rendered point to pixel, meaning that if the document is 72
points per inch (ppi) in InDesign, an inch of the document will use 72 pixels
on screen when unscaled. We scale the document from there to fit the users
screen.</p>
<p class=MsoNormal> </p>
<p class=MsoNormal>We have a configurable setting called ppiThreshold to define
what ppi to warn the user about quality. We use the pixel width and height of
the original image that will be used for print to determine how many pixels of
the image will print in an inch. Most projects have used 250 ppi as the
threshold.</p>
<p class=MsoNormal> </p>
<p class=MsoNormal>When an image is scaled and we calculate that there will be
less that 250 pixels used in that inch in print, we present an on-screen
warning to the user letting them know. In most cases, we haven't prevented a
user from using the image if it's stretched too much. When the user clicks
continue to move to the shopping cart or preview process, we may have a popup
to ask the user if they approve or understand that their image may not print
clearly with it's current size.</p>
<p class=MsoNormal> </p>
<p class=MsoNormal>The user experience of how they are warned and what
confirmation they need to give is all customizable to fit the user experience
desired.</p>
</div>
</body>
</html>