inventoryItems = new InventoryItemsCollection();
inventoryItems.fill();
var context:ISecurityContext = SecurityContext.instance();
var userId:String = context.user.USER_ID;
retailers = new RetailersCollection();
retailers.fill( userId );
}
internal function itemSelected( event:Event ):void{
var checkBox:CheckBox = event.target as CheckBox;
var selected:Boolean = checkBox.selected;
if ( !selectedItem )
return;
selectedItem.selected = selected;
}
private function isValid():Boolean{
if ( !descriptionText.text ){
Alert.show( "Description is empty" );
return false;
}
if ( retailers.length == 0 ){
return false;
} else if ( retailers.length > 1 ){
this request." );
return false;
}
var isSelected:Boolean = false;
for ( var i:int = 0; i < inventoryItems.length; i++ ){
if ( lineItem.selected ){
isSelected = true;
var quantity:Number = Number(lineItem.REQUIRED_QUANTITY);
var quantityAvailable:Number = lineItem.QUANTITY;
if ( isNaN(quantity) || quantity <= 0 ){
Alert.show("Required quantity is not specified.");
return false;
}
if ( quantity > quantityAvailable ){
return false;
}
}
}
Blending the LiveCycle API with Custom Flex Applications s | | 567
Changing pdf file to jpg - Convert PDF to JPEG images in C#.net, ASP.NET MVC, WinForms, WPF project
How to convert PDF to JPEG using C#.NET PDF to JPEG conversion / converter library control SDK
convert pdf page to jpg; convert pdf document to jpg
Changing pdf file to jpg - VB.NET PDF Convert to Jpeg SDK: Convert PDF to JPEG images in vb.net, ASP.NET MVC, WinForms, WPF project
Online Tutorial for PDF to JPEG (JPG) Conversion in VB.NET Image Application
convert pdf image to jpg image; batch convert pdf to jpg
if (!isSelected){
Alert.show("No items selected.");
}
return true;
}
private function submitRequest():void{
if ( ! isValid() )
return;
var selectedItems:ArrayCollection = new ArrayCollection;
var orderId:String = UIDUtil.createUID();
for (var i:int = 0; i < inventoryItems.length; i++ ){
var selected:Boolean = inventoryItem.selected;
if ( selected ){
orderLineItem.LINEITEM_ID = inventoryItem.LINEITEM_ID;
orderLineItem.ORDER_ID = orderId;
orderLineItem.QUANTITY = inventoryItem.REQUIRED_QUANTITY;
orderLineItem.ORDER_TYPE = "retailer";
selectedItems.addItem( orderLineItem );
}
}
if ( selectedItems.length > 0 ){
var context:ISecurityContext = SecurityContext.instance();
var user:Object = context.user;
order.CREATED_AT = new Date;
order.CREATED_BY = user.USER_ID;
order.ORDER_ID = orderId;
order.STATUS = OrderStatus.STATUS_CREATED;
order.DESCRIPTION = descriptionText.text;
order.RETAILER_ID = retailers.getItemAt(0).RETAILER_ID;
}
if ( selectedItems.length > 0 && order ){
ordersCollection = new OrdersCollection();
ordersCollection.addItem( order );
var orderItems:DataCollection = new OrderLineItemsCollection();
for ( i = 0; i < selectedItems.length; i++ ) {
orderItems.addItem( selectedItems[i] );
}
var batchService:BatchService = new BatchService();
batchService.registerCollection( orderItems,1 );
batchService.registerCollection( ordersCollection,0);
var batch:Array = batchService.batchRegisteredCollections();
568 | | Chapter 10: Developing Flex Applications for LiveCycle Enterprise Suite
VB.NET PDF File Merge Library: Merge, append PDF files in vb.net
the second PDF file to the target one, this PDF file merge function put the two target PDF together and save as new PDF, without changing the previous
batch pdf to jpg online; convert multiple page pdf to jpg
C# PDF Convert to Tiff SDK: Convert PDF to tiff images in C#.net
Supports for changing image size. this .NET PDF to TIFF conversion control, C# developers can render and convert PDF document to TIFF image file with no loss
convert pdf file to jpg on; change pdf to jpg on
var token:AsyncToken = batchService.sendBatch( batch );
batchService.sendBatch( batch );
}
}
private function orderSubmitted( event:ResultEvent ):void{
var orderId:String = event.token.orderId;
const workflowAssembler:RemoteObject = new RemoteObject();
workflowAssembler.destination = "WorkflowAssembler";
workflowAssembler.addEventListener(
FaultEvent.FAULT,
function error( event:FaultEvent ):void{
Alert.show( event.message.toString() );
}
);
const token:AsyncToken = workflowAssembler.startProcess( orderId );
}
private function processInvoked( event:ResultEvent ):void{
dispatchEvent( new FlexEvent("back") );
}
private function cancelRequest():void{
dispatchEvent( new FlexEvent("back") );
}
var formatter:CurrencyFormatter = new CurrencyFormatter;
return formatter.format( value.PRICE );
}
public function refresh():void{
onCreationComplete();
}
]]>
</mx:Script>
</mx:VBox>
Example 10-45. Collection classes used by submitRequest() of CreateRequest.mxml
package warehouse.collections {
import com.theriabook.collections.DataCollection;
public class OrdersCollection extends DataCollection {
public function OrdersCollection(source:Array=null)   {
destination = "com.farata.datasource.RetailerOrder";
method = "getUpdatableOrders";
}
}
}
package warehouse.collections {
import com.theriabook.collections.DataCollection;
public class OrderLineItemsCollection extends DataCollection {
Blending the LiveCycle API with Custom Flex Applications s | | 569
C# Tiff Convert: How to Convert Raster Images (Jpeg/Png/Bmp/Gif)
Give You Sample Codes for Changing and Converting Jpeg, Png, Bmp, and RasterEdge. XDoc.PDF.dll. an example of converting raster image Jpeg to Tiff image file.
convert pdf to jpg; changing file from pdf to jpg
VB.NET Image: PDF to Image Converter, Convert Batch PDF Pages to
image format in VB programming code, like changing "tif" to and then you can get any wanted target image file. users are also allowed to convert PDF to other
reader convert pdf to jpg; .pdf to .jpg online
public function OrderLineItemsCollection(){
destination = "com.farata.datasource.OrderLineItem";
method = "getUpdatableLineItems";
}
}
}
This completes our study of blending the LiveCycle API into a custom Flex application.
Summary
Let’s look back at what have you seen in this chapter. We started with small Flexlets,
complementing the LiveCycle Workspace ES, and ended up with the completely in-
dependent Flex applications that treat LiveCycle ES as yet another service container.
We started with the sample set of users provided by the LiveCycle ES sample installation
and arrived at an enterprise repository of users and groups from our own database.
We have benefited from LiveCycle ES services, but did not stop there, and extended
them with our own. That, in particular, allowed us to perform a decomposition of the
complex business process into a scalable set of simpler processes via events.
We have used a lot of Java. For instance, we used Java to dispatch events. You may
take our example further by building a reusable event dispatching service and then
invoking it, say, from a Flex application. It’s just another service container!
570 | | Chapter 10: Developing Flex Applications for LiveCycle Enterprise Suite
XDoc.HTML5 Viewer for .NET, All Mature Features Introductions
PowerPoint: PPT, PPTX, PPS, PPSX; PDF: Portable Document to open specified file in server file system or or zoom out functions, and changing file rotation angle
convert pdf to high quality jpg; .pdf to jpg
CHAPTER 11
Printing with Flex
Measuring programming progress by lines of code is like
measuring aircraft building progress by weight.
—Bill Gates
In general, the process of printing from web applications works a little differently com-
pared to printing from the desktop. Web applications have good reason for not allowing
direct access to a user’s printer: malicious websites could immediately start printing
their fliers on your home or corporate printer, offering you anything from pizza delivery
to adult entertainment. That’s why you can’t write a program in JavaScript that would
automatically detect all available printers and send them print jobs. That’s why the user
is forced to manually select the printer via the web browser’s pop-up dialog window.
Existing Flash Player bugs add more issues for Flex developers; for example, the Print
dialog might not report all features of the available printer, and setting such parameters
as tray selection or paper size might not be possible. To put it simply, you may not have
complete control over the user’s printer from an application running in Flash Player.
You may need to adjust your reports to standard printer settings.
Adobe had a product called FlashPaper that tried to mitigate these lim-
itations by adding ActionScript 2 objects to a special control with com-
plete access to the printer. In 2008, however, Adobe discontinued
FlashPaper, apparently promoting printing PDF documents using Ac-
robat instead.
The process of printing from Flash Player consists of starting a single-threaded print
job and adding dynamically created pages to it (i.e., the data that comes from a data-
base). Unfortunately, Flash Player’s virtual machine AVM2 ActionScript timeout is 15
seconds. Accordingly, for both Flex and AIR, the interval between the following com-
mands shouldn’t be more than 15 seconds:
PrintJob.start()
and the first 
PrintJob.addPage()
571
PrintJob.addPage()
and the next 
PrintJob.addPage()
PrintJob.addPage()
and 
PrintJob.send()
If, at each of these commands, printing the specified page always completed in 15
seconds or less, your application will be able to print a multipage document, although
somewhat slowly. If any of the intervals spans more than 15 seconds, however, your
print job will receive a runtime exception, which turns direct printing from Flash Player
into an unpleasant experience, if application developers don’t handle exceptions prop-
erly. Plus, if the internal thread that started the print job failed, it may be automatically
closed and unable to be recovered properly.
You can read more about handling printing errors in the Adobe
document “Flash Player and Air tasks and system printing”.
You may think that 
setTimeout()
can help break the 15-second barrier for printing, but
it can’t. Printing has to be handled by the same internal AVM2 thread (apparently a
bug), and with 
setTimeout()
, you are in fact spawning a new one. The issue with print-
ing long documents is demonstrated in Example 11-1. The 
PrintJob
starts and the
method 
finishPrinting()
is called in the same thread and works fine. If you instead
comment out the call to 
finishPrinting()
and uncomment the method 
setTimeout()
,
this printing job will fail: the 
addPage()
will throw an exception, because it runs in a
thread different than 
PrintJob
.
Imagine that a timeout was initiated not by calling the function 
setTimeout()
, but rather
by Flash Player during printing of a multipage document because one of the 
add
Page()
calls took longer than 15 seconds. In this case, 
addPage()
would be called on a
different internal thread than 
PrintJob.start()
and the 
addPage()
operation would fail,
even though Flash Player should’ve known how to process a such situation properly.
Example 11-1. PrintTimeout.mxml—an illustration of printing failure
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical">
<mx:Button label="Print Me" click="printMe()"/>
<mx:Script>
<![CDATA[
private function printMe() :void {
var pj:PrintJob = new PrintJob();
pj.start();
finishPrinting(pj);
}
572 | | Chapter 11: Printing with Flex
private function finishPrinting(pj:PrintJob): void {
pj.addPage(this);
pj.send();
}
]]>
</mx:Script>
</mx:WindowedApplication>
Example 11-1 just prints itself, 
addPage(this)
, but if it had to print, say, a slow-rendered
DataGrid
with a couple of thousand rows, the chances are high that such a program
would time out before the printing job was finished.
There is a bigger problem than the technical restrictions mentioned so far, and it is in
the very approach to printing via the 
PrintJob
API. The process of programming reports
in ActionScript comes down to creating snapshots of components displayed on the
users’ monitors and sending them to the printer. Because screen resolution differs from
printer resolution, however, application developers pursing this method need to create
separate layouts just for printing, which is time-consuming and challenging.
That’s why you should consider creating and printing your reports as PDF files. Besides,
it neatly reinforces this book’s philosophy: minimize the amount of code that business
application developers have to write. In this chapter, you’ll learn how to create XDP-
enabled Flex components that will allow application developers to generate PDF docu-
ments on the client side with minimal coding.
PDF and XDP
PDF stands for Portable Document Format. It was originally created by Adobe but in
July 2008 became an open standard, ISO 32000-1:2008.
The PDF format is device-independent, but—as opposed to PostScript—it’s not a pro-
gramming language. ISO 32000-1:2008 defines it as:
a digital form for representing electronic documents to enable users to exchange
and view electronic documents independent of the environment in which they
were created or the environment in which they are viewed or printed. It is intended
for the developer of software that creates PDF files (conforming writers), software
that reads existing PDF files and interprets their contents for display and interac-
tion (conforming readers) and PDF products that read and/or write PDF files for
a variety of other purposes (conforming products).
PDF is a hierarchical structure that represents a collection of pages to be displayed or
printed. Each page contains content objects and resources.
PDF documents can be used for both printing and data-entry purposes. For example,
a bank or insurance company may offer applications for opening new accounts as PDF
form documents to be filled out by the customers.
XDP (XML Data Package) enables storage of PDF content, forms, and data inside the
forms and, of course, processes it as XML. On the downside, XDP format is not
Printing with Flex x | | 573
supported by older versions of Acrobat Reader. The XDP specification is available at
http://partners.adobe.com/public/developer/en/xml/xdp_2.0.pdf.
PDF Generation on the Server
PDF generation is supported by Adobe LiveCycle and LCDS, as well as other server-
side products. Suppose that you have a Flex or AIR window with a number of UI
controls, and you want to create a PDF out of it. One option is to create a snapshot of
the Flex component or container using the class 
mx.graphics.ImageSnapshot
and its
function 
captureImage()
, which can scale the image to a specific resolution and encode
it into a specified image format. You can send an instance of this class via 
RemoteOb
ject
to the server with LCDS installed. LCDS then creates a PDF document (or merges
it with a PDF form) and includes the new image received from the client.
The problem with this approach is that the resulting PDF will not be searchable. For
instance, if a Flex 
Panel
has text fields, you won’t be able to find the text of these fields
in Acrobat Reader if the 
Panel
is embedded as a bitmap.
Such PDFs have limitations on resolution as well (to create a PDF with resolution 300
dpi, you’d need to create a multimegabyte image). Also, printed materials often use
different CSS and metrics from the screen ones. You don’t want to print, say, a back-
ground gradient that looks fine on the monitor, but bad on paper.
To embed forms into PDF documents, Adobe uses the XDP format. If you purchase an
LCDS license, you’ll have the option to use it. You can design forms in Acrobat Designer
and export the data from your Flex view, and LCDS will merge the data and the form
on the server. On the Java side, LCDS adds several JARs in the lib directory of your
web application, which makes the 
XFAHelper
Java class available for your server-side
PDF generation.
After generating the PDF, the server-side program can be:
• Placed as a 
ByteArray
in 
HTTPSession
object
• Saved as a file on the server for future use
• Streamed back to the client marked as a MIME type 
application/pdf
• Saved in a DBMS field as a binary large object (BLOB)
Depending on the business requirements, the server-side PDF generation might not be
feasible. You might have just disconnected the AIR application, or the server software
may not have any of the technologies supporting PDF creation installed. If the Flex UI
is truly dynamic, that might change the number of displayed components based on
some business criteria; developing an additional UI in Acrobat Designer just for printing
can in these ways become either impossible or time-consuming. The LCDS Developer
Guide describes this process in the document called “Using the PDF Generation Fea
ture”.
574 | | Chapter 11: Printing with Flex
Adobe has published an article describing the process of creating PDF
documents using templates.
In general, for server-side PDF generation from Adobe Flex applications, you have to
do the following:
• Use Adobe LiveCycle Designer ES, which provides tools for creating interactive
forms and personalized documents (see http://www.adobe.com/products/livecycle/
designer/). This software comes with Acrobat Professional or can be purchased
separately, and is well documented, but it requires someone to create the XDP form
and the data model and establish a process of synchronizing the Flex application
with the server-side LiveCycle.
• Initiate the server-side PDF generation from your Flex application seamlessly.
Although this process provides guaranteed quality and predictable results, it also
requires the double effort of developing XDP forms for printing and Flex forms for
displaying. Besides, LiveCycle Designer is another piece of software that application
developers in your organization may not be familiar with.
LCDS generation with merging data and forms produces good printing quality with
LCDS. The Flex client sends data as XML to the server along with the name of the form
file (template) to be used for merging, as shown in Example 11-2. In this case, the LCDS
layer just needs to process it with the 
XDPXFAHelper
class and return it as a PDF stream
to the browser for displaying.
Only commercial licenses of LCDS support PDF generation.
The ActionScript class 
FormRenderer
sends generated XDP to the server and opens a
web browser’s window to display the PDF when it arrives from the server.
Example 11-2. Class FormRenderer.as
import flash.net.*;
import flash.utils.ByteArray;
public class FormRenderer {
var req:URLRequest = new URLRequest("/createPDF.jsp");
req.method = URLRequestMethod.POST;
var ba :ByteArray = new ByteArray();;
ba.writeMultiByte(xdp, "iso-8859-1");
ba.compress();
PDF Generation on the Server r | 575
ba.position = 0;
req.data = ba;
navigateToURL(req, target);
}
}
You also need an XDP file with the data and presentation. If you don’t have LiveCycle
Designer, you can make the XDP file programmatically, ensuring that it matches the
printer’s paper size and corporate stationery. XDP documents are XML objects, which
are easily processed in Flex using E4X syntax, for example:
1.Declare a variable of type XML, and initialize it with the required XDP template
deployed on the server. A fragment of the XDP template may look like this:
<?xml version="1.0" encoding="UTF-8"?>
<?xfa generator="AdobeLiveCycleDesigner_V8.0" APIVersion="2.5.6290.0"?>
uuid="784f469b-2fd0-4555-a905-6a2d173d0ee1">
<template xmlns="http://www.xfa.org/schema/xfa-template/2.5/">
<subform name="form1" layout="tb" restoreState="auto" locale="en_US">
<pageSet>
<pageArea name="Page1" id="Page1">
<contentArea x="0.25in" y="0.25in" w="8in" h="10.5in"/>
<medium stock="letter" short="8.5in" long="11in"/>
<?templateDesigner expand 1?></pageArea>
<?templateDesigner expand 1?></pageSet>
<subform w="8in" h="10.5in" name="YourPageAttachedHere"/>
<proto/>
<desc>
<text name="version">8.0.1291.1.339988.308172</text>
</desc>
</subform>
</template>
2.Select a Flex UI container or component that you are going to print (a 
Panel
, a
DataGrid
, and so on).
3.Query the object from step 2, get its XDP attributes and children, and create the
XML preparing this object for printing. Attach the XML to the template as a page.
Because original Flex components don’t know how to represent themselves in the XDP
format, you’ll need to teach them to do so. This becomes the next task in enhancing
Flex components.
For example, each UI component can implement some interface (e.g., 
IXdpObject
with
the only getter, 
xmlContent()
) that allows it to return its own XDP content or, in the
case of containers, to traverse the list of its child components for their XDP content.
For example, a new panel component (
PanelXdp
) may have the following structure:
public class PanelXdp extends Panel implements IXdpObject{
public function get xmlContent():Object{
// The code to return representation of the panel
576 | | Chapter 11: Printing with Flex
Documents you may be interested
Documents you may be interested