best pdf viewer control for asp.net : Generate thumbnail from pdf software SDK project winforms windows azure UWP QC2_yf_reviewed33-part952

}
}
Once the system part is done, you can set the properties on the 
OperationContext
object in your application code, just like this:
OperationContext.globalHeaders["name"] = "john".
On the Java side, you can retrieve headers sent from the client by retrieving the
corresponding parameter(s) from the 
MessageContext
object:
public String helloUser() {
Hashtable ht = MessageContext.getParams();
String userId = (String)context.get("name");
return "Hello, " + userId;
}
Data Push in Data Access
To give you an example of BlazeDS at work, we’re going to revisit the Café Townsend
application and bring it even closer to reality. It’s great that the café owner’s wife can
populate (and update) employee data from a database, but in the real world of enter-
prise applications, more than one user often must work with the same data.
Say that users A and B have populated the employees’ data, and user B decides to update
a record in the database. Will user A be notified about this change, or will she keep
working with stale data?
You want multiple users to be able to update the table 
Employee
simultaneously and to
promote the data changes to other users instantaneously. Such data synchronization is
available with LCDS Data Management Services, and with adjustments, you can ach-
ieve similar functionality using the open source implementation of AMF, as well.
To start, examine the 
Assembler
class that will be working closely with 
EmployeeDAO
. As
you can see in Example 6-23, the Java code takes all the changes submitted by any user
and broadcasts them to all clients subscribed to the destination 
com.farata.data
source.Employee.getEmployees
.
Example 6-23. Server-side push with the Assembler class
package com.farata.datasource;
import java.util.*;
import flex.messaging.MessageBroker;
import flex.messaging.messages.AsyncMessage;
import flex.messaging.util.UUIDUtils;
public final class EmployeeAssembler{
public  List /*EmployeeDTO[]*/  getEmployees() throws Exception        {
return new EmployeeDAO().getEmployees();
}
Data Push in Data Access | 311
Generate thumbnail from pdf - Draw thumbnail images for PDF in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support Thumbnail Generation with Various Options for Quick PDF Navigation
pdf thumbnail fix; print pdf thumbnails
Generate thumbnail from pdf - VB.NET PDF Thumbnail Create SDK: Draw thumbnail images for PDF in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support Thumbnail Generation with Various Options for Quick PDF Navigation
create thumbnails from pdf files; pdf files thumbnails
public final List getEmployees_sync(List items)        {
List result = new EmployeeDAO().getEmployees_sync(items);
MessageBroker msgBroker = MessageBroker.getMessageBroker(null);
AsyncMessage msg = new AsyncMessage();
msg.setDestination("com.farata.datasource.Employee.getEmployees");
msg.setClientId(UUIDUtils.createUUID(true));
msg.setMessageId(UUIDUtils.createUUID(true));
msg.setTimestamp(System.currentTimeMillis());
msg.setBody(result);
msgBroker.routeMessageToService(msg, null);
return result;
}
public  List /*DepartmentDTO[]*/  getDepartments() throws Exception{
return new EmployeeDAO().getDepartments();
}
}
Next, you need to receive these messages on the client and apply the changes. As you
can see in Example 6-24, the Flex client receives the changes via subscription and ap-
plies them (the subscription name is a destination name).
Example 6-24. Receiving pushed data on the client
private var _subscription : Consumer ;
private var _subscriptionName : String ;
public function set feed( subscriptionName : String ) : void {
_subscription = new  Consumer();
_subscription.destination = subscriptionName;
_subscription.addEventListener("message", messageHandler );
_subscription.subscribe();
_subscriptionName = subscriptionName;
}
public function get feed() : String {
return _subscriptionName;
}
protected function messageHandler(ev:MessageEvent):void
{
if ( ev.message.body is ChangeObject)
processChange(ev.message.body as ChangeObject) ;
if ( ev.message.body is ArrayCollection)
for (var i:int = 0; i<ev.message.body.length; i++)
processChange(ev.message.body[i] as ChangeObject) ;
}
protected function processChange( co : ChangeObject) : void {
switch ( co.state) {
case ChangeObject.CREATE:
312 | Chapter 6: Open Source Networking Solutions
How to C#: Generate Thumbnail for Word
VB.NET How-to, VB.NET PDF, VB.NET Word, VB.NET Excel, VB.NET PowerPoint, VB.NET Tiff, VB.NET Imaging, VB.NET OCR, VB.NET How to C#: Generate Thumbnail for Word.
generate thumbnail from pdf; how to make a thumbnail from pdf
How to C#: Generate Thumbnail for PowerPoint
VB.NET How-to, VB.NET PDF, VB.NET Word, VB.NET Excel, VB.NET PowerPoint, VB.NET Tiff, VB.NET Imaging, VB.NET OCR, VB How to C#: Generate Thumbnail for PowerPoint
how to show pdf thumbnails in; create pdf thumbnail
addItem(co.newVersion);
break;
case ChangeObject.DELETE:
var uid:String = co.previousVersion.uid;
for ( var j :int = 0; j < length; j++ ) {
if(getItemAt(j).uid == uid) {
removeItemAt(j);
break;
}
}
break;
case ChangeObject.UPDATE:
uid = co.newVersion.uid;
for ( j  = 0; j < length; j++ ) {
if(getItemAt(j).uid == uid ) {
var item: EventDispatcher=getItemAt(j) as EventDispatcher;
item["properties"] = co.newVersion["properties"];
// notify the UI of the change
item.dispatchEvent(
PropertyChangeEvent.createUpdateEvent(item,"any","x","y"));
break;
}
}
break;
}
}
Example 6-24 is a simplified code snippet of updating the client content based on the
data pushed from the server. It assumes that the function 
getItemAt()
works with the
data collection that needs to be updated. It does not deal with conflicts or application
of concurrent changes, because this part is application-specific and has to be enforced
based on the best strategy to avoid conflicts rather than forcing the user to deal with
them—either via record locking or multistage update.
The code of Example 6-24 depends upon the 
uid
value of the DTO. You
need to make sure that a unique, consistent ID is being used by every
user. The simplest way to do it is by mapping 
uid
to the database primary
key on the server side.
You can also use a data push to implement the background retrieval of the large data
sets. All you need to do is to push the retrieval results as 
ChangeObjects
with the
CREATED
flag on.
A Server as a Command Center
Strange as it sounds, a clock is another excellent example of streaming. Using a stream-
ing AMF channel to deliver the server time, you can create a clock that updates its
A Server as a Command Center | 313
How to C#: Generate Thumbnail for Raster
VB.NET How-to, VB.NET PDF, VB.NET Word, VB.NET Excel, VB.NET PowerPoint, VB.NET Tiff, VB.NET Imaging, VB.NET OCR, VB How to C#: Generate Thumbnail for Raster.
how to make a thumbnail of a pdf; view pdf thumbnails
How to C#: Generate Thumbnail for Excel
VB.NET How-to, VB.NET PDF, VB.NET Word, VB.NET Excel, VB.NET PowerPoint, VB.NET Tiff, VB.NET Imaging, VB.NET OCR, VB.NET How to C#: Generate Thumbnail for Excel.
thumbnail view in for pdf files; pdf thumbnails
display every second. As a bonus, the clock application demonstrates another useful
concept: the reverse remote procedure call (RPC).
Reverse RPC
A remote procedure call is when a client invokes a function on the server-side object.
For example, you can create an instance of the 
RemoteObject
that points at a destination
(a Java class) configured in the server-side BlazeDS. Then, this Flex client calls a method
on this destination.
The example clock application instructs a server to control the client when it wants,
the way it wants. This is a reverse RPC: the server calls a client. Traditional server-side
destinations are usually preconfigured in XML files, such as remoting-config.xml; how-
ever, you don’t have this luxury on the client. Instead, during runtime you need to pass
the name of the client destination, the method to call, and an array of parameters, if
any. Here, the AMF protocol becomes quite handy once again. Remember, it offers an
easy way to serialize a Java object on the server and deserialize it as an ActionScript
object on the client.
If you understand the concept of DTO being an exchange currency between Java and
ActionScript, the rest of this section won’t be difficult. Just think outside the box and
create a DTO that will carry not some application-specific data (e.g.,the current server
time), but the metadata—the name of the destination, a method to call on the client,
and its parameters.
Example 6-25 shows the server-side Java DTO that wraps up the data and metadata.
Example 6-25. RemoteCall.java
package com.farata.remoting ;
import java.util.*;
public class RemoteCall {
public String destinationName; // destination configured on the server
public String methodName;      // method to call on the client
public List   parameters;      // method arguments
public RemoteCall(String d, String m, List p) {
destinationName = d;
methodName = m;
parameters = p;
}
}
When instances of 
RemoteCall
objects arrive at the client, they are represented as the
ActionScript instances in Example 6-26.
Example 6-26. RemoteCall.as
package  com.farata.remoting {
import mx.collections.ArrayCollection;
314 | Chapter 6: Open Source Networking Solutions
How to C#: Overview of Using XImage.Raster
You may easily generate thumbnail image from image file. Annotate XImage page. You may easily generate thumbnail image from image file.
show pdf thumbnails; pdf reader thumbnails
How to C#: Overview of Using XDoc.PowerPoint
navigation. You may easily generate thumbnail image from PowerPoint. Copyright © <2000-2015> by <RasterEdge.com>. All Rights Reserved.
create thumbnail from pdf; how to create a thumbnail of a pdf document
[RemoteClass(alias="com.farata.remoting.RemoteCall")]
public class RemoteCall {
public var destinationName:String;
public var methodName:String;
public var parameters:ArrayCollection;
public function RemoteCall(destinationName:String=null,
methodName:String=null,
parameters:ArrayCollection=null) {
this.destinationName = destinationName;
this.methodName = methodName;
this.parameters = parameters;
}
}
}
BlazeDS, with the help of AMF, automatically turns any instance of RemoteCall.java
into an instance of RemoteCall.as. The big idea is to have the server push this 
Remote
Call
to the client, which should obediently call the requested method (the 
method
Name
property of the 
RemoteCall
instance) on the specified object with the provided
parameters.
Add the following destination in the message-config.xml file where BlazeDS is deployed:
<destination id="ControlCenter">
<channels>
<channel ref="my-streaming-amf"/>
</channels>
</destination>
Please note that this destination is configured to use the streaming AMF channel.
BlazeDS includes a class, 
MessageBroker
, that knows how to push messages to desti-
nations.
At this point, you know that the server will have to create instances of 
RemoteCall
objects
and send them to the destination called 
ControlCenter
. To do this, simply write another
Java class called 
ControlCenter.java
, as shown in Example 6-27. Note once again that
this code sends not just the data to the client, but also the information about the RPC.
Example 6-27. ControlCenter.java
package com.farata.remoting;
import java.util.*;
import flex.messaging.MessageBroker;
import flex.messaging.messages.AsyncMessage;
import flex.messaging.util.UUIDUtils;
public class ControlCenter {
private static ControlCenterThread thread;
//start a new thread to send RemoteCall instances
public void start() {
A Server as a Command Center | 315
How to C#: Overview of Using XDoc.Word
Tell C# users how to: create a new Word file and load Word from pdf; merge, append, and split Word files You may easily generate thumbnail image from Word.
pdf thumbnail creator; pdf thumbnail viewer
How to C#: Overview of Using XDoc.Excel
See this C# guide to learn how to use RasterEdge Excel SDK for .NET to perform quick file navigation. You may easily generate thumbnail image from Excel.
no pdf thumbnails in; pdf thumbnail preview
if (thread == null) {
thread = new ControlCenterThread();
thread.start();
}
}
public void stop() {
if (thread != null){
thread.running = false;
thread = null;
}
}
public static class ControlCenterThread extends Thread {
public boolean running = true;
public void run() {
MessageBroker msgBroker = MessageBroker.getMessageBroker(null);
String clientID = UUIDUtils.createUUID();
while (running) {
// create a message object set the destination and
// assign unique client and message IDs
AsyncMessage msg = new AsyncMessage();
msg.setDestination("ControlCenter");
msg.setClientId(clientID);
msg.setMessageId(UUIDUtils.createUUID());
msg.setTimestamp(System.currentTimeMillis());
// Create an array of parameters to be used as
// arguments for the setTime() function call
ArrayList params = new ArrayList();
// Add current system time
params.add( new Date()); //
// Create RemoteCall wrapper an use it as the message body
msg.setBody(new RemoteCall("clock", "setTime", params));
msgBroker.routeMessageToService(msg, null);
try {
// pause the loop for one second
Thread.sleep(1000);
} catch (InterruptedException e) {      }
}
}
}
}
The 
CallCenter
program creates and starts a separate thread named 
CallCenterTh
read
that every second creates a new instance of the 
RemoteCall
, puts it into the message
body of 
AsyncMessage
, and using the 
MessageBroker
publishes it to the destination called
ControlCenter
.
316 | Chapter 6: Open Source Networking Solutions
The Flex client shown in the following example creates a consumer object and sub-
scribes it to the destination 
ControlCenter
.
We borrowed the code for the alarm clock UI from Adobe’s manual on programming
ActionScript 3. This example was used there for explaining events (see http://livedocs
.adobe.com/flex/3/html/help.html?content=16_Event_handling_7.html). For your con-
venience, we’ve included this code in Flash Builder’s project NetworkingSamples, which
contains all examples from this chapter.
In Example 6-28’s Flex application you can find the consumer that is ready to consume
messages from the destination 
ControlCenter
RemoteObject
is used to start or stop the
server-side feed.
Example 6-28. RemotingViaStreaming.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:remoting="com.farata.remoting.*"
xmlns:example="com.example.programmingas3.clock.*"
creationComplete="co.subscribe()" layout="vertical" horizontalAlign="left">
<mx:Consumer destination="ControlCenter"  id="co"
message="handleMessage(event.message)"/>
<mx:RemoteObject destination="ControlCenterRO" id="ro"/>
<mx:Button label="Start" click="ro.start()"/>
<mx:Button label="Stop" click="ro.stop()"/>
<mx:Label text="Time"/>   <mx:Label width="259" id="serverClock"/>
<example:SimpleClock id="clock" creationComplete="clock.initClock()"/>
<mx:Script>
<![CDATA[
import com.farata.remoting.RemoteCall;
import mx.messaging.messages.IMessage;
private function handleMessage(msg:IMessage) : void {
if (msg.body is RemoteCall) {
var rc:RemoteCall = msg.body as RemoteCall;
this[rc.methodName].apply(this, rc.parameters.source);
}
}
public function setTime( d:Date) : void {
serverClock.text = d.toTimeString();
clock.setTime( d);
}
]]>
</mx:Script>
</mx:Application>
When the consumer receives the message, the function 
handleMessage()
extracts the
instance of 
RemoteCall
from the message body and calls the method whose name is
located in the property 
RemoteCall.methodName
:
A Server as a Command Center | 317
var rc:RemoteCall = msg.body as RemoteCall;
this[rc.methodName].apply(this, rc.parameters.source);
In Example 6-28, this 
[rc.methodName]
gets the reference to the 
Function
object based
on the received name, which is 
setTime()
here. Then, the function 
apply()
calls this
method, passing parameters contained in the 
RemoteCall
object.
This technique is yet another way to implement the command design pattern, but here
the server publishes a message that is a command to the client to call a function specified
in 
methodName
.
Extending the Protocol
Although this technique of making RPC calls from the server is pretty cool, you can
make it even better by hiding the processing of the received messages at the protocol
level, so that the application developers will use this enhanced consumer without
needing to know how it works under the hood.
First, extend the AMF endpoint and move the consumer portion into the new class
RemoteStreamingChannel
, which extends the standard 
StreamingAMFChannel
, which will
be responsible for filtering and executing remote procedure calls.
Note the metatag 
[Mixin]
in Example 6-29. In Flex, it’s used to ensure that a static
initializer’s code located in the method 
init()
will be executed as soon as the
SystemManager
becomes available.
Example 6-29. RemoteStreamingChannel.as
package com.farata.messaging.channel{
import com.farata.remoting.RemoteCall;
import flash.utils.Dictionary;
import mx.managers.ISystemManager;
import mx.messaging.Consumer;
import mx.messaging.channels.StreamingAMFChannel;
import mx.messaging.events.MessageEvent;
import mx.messaging.messages.IMessage;
[Mixin]
public class RemoteStreamingChannel extends StreamingAMFChannel{
public static var destinations:Dictionary = new Dictionary();
public function RemoteStreamingChannel(id:String=null, uri:String=null){
super(id, uri);
this.addEventListener(MessageEvent.MESSAGE, filterAndInvoke,false,1);
}
// if the receieved message is an instance of the RemoteCall,
// get the destination and call the passed method on it
protected function filterAndInvoke( evt:MessageEvent ) : void {
var msg : IMessage = evt.message;
318 | Chapter 6: Open Source Networking Solutions
if (msg.body is RemoteCall) {
var rc:RemoteCall = msg.body as RemoteCall;
var destination : Object = destinations[ rc.destinationName];
if ( destination )
var result:* =
destination[rc.methodName].apply(destination, rc.parameters.source);
else
//log the error
trace( "missing destination " + rc.destinationName );
evt.preventDefault();
}
}
public static function init( systemManager:ISystemManager ) : void {
//stub for static initializer
var c:Consumer = new Consumer();
c.destination = "ControlCenter";
c.subscribe();
}
}
}
If the code in the Example 6-28 was calling the specified function on the 
this
object,
you can make it more generic by specifying the destination object on the client and
calling the function on it:
destination[rc.methodName].apply(destination, rc.parameters.source);
To let BlazeDS know that you want to use this endpoint on the client instead of the
original 
StreamingAMFChannel
, change the channel configuration in services-config.xml
(Example 6-30).
Example 6-30. Modified channel definition in services-config.xml
<channel-definitionid="my-streaming-amf"
class="com.farata.messaging.channel.RemoteStreamingChannel">
<endpointurl="http://{server.name}:{server.port}/{context.root}/messagebroker/
streamingamf"
class="com.farata.nioblaze.messaging.endpoints.NioAmfEndpoint"/>
</channel-definition>
The application in Example 6-31 uses the new channel.
Example 6-31. RemotingViaStreamingGeneric.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:remoting="com.farata.remoting.*"
xmlns:example="com.example.programmingas3.clock.*"
creationComplete="RemoteStreamingChannel.destinations['clock']=simpleClock;"
layout="vertical" horizontalAlign="left">
<mx:RemoteObject destination="ControlCenterRO" id="ro"/>
<mx:Button label="Start" click="ro.start()"/>
<mx:Button label="Stop" click="ro.stop()"/>
A Server as a Command Center | 319
<example:SimpleClock id="simpleClock" creationComplete="clock.initClock()"/>
<mx:Script>
<![CDATA[
import com.farata.messaging.channel.RemoteStreamingChannel;
]]>
</mx:Script>
</mx:Application>
Upon the 
creationComplete
event, this application assigns the 
SimpleClock
object as
the client destination of all that goes under the name 
clock
:
RemoteStreamingChannel.destinations['clock']=simpleClock;
The server-side sender in Example 6-27 is sending a command to call the function
setTime()
of the destination clock, which is now mapped to the instance of the
SimpleClock
component:
msg.setBody(new RemoteCall("clock", "setTime", params));
The destination clock was not used in the MXML application shown in Exam-
ple 6-28, which was calling the function 
setTime()
on the 
this
object no matter what.
But the more generic application shown in Example 6-31 explicitly routes the server
calls to the destination 
clock
.
And the clock (Figure 6-9) is ticking, driven by the reverse RPC calls from the server.
Now you own a communication channel on both the server and client sides and you’re
ready to program high-level protocols.
Custom Serialization and AMF
AMF is a very efficient protocol, and part of that efficiency is thanks to the strict rules
for supporting a limited set of data types in an optimized way. One of the most frequent
cases in which it needs to be customized is when you have to work with non-UTC
Date
and 
Time
. UTC stands for Coordinated Universal Time.
First, you need to understand how Flex deals with transfer of the 
Date
objects. Dates
are always transferred to/from Flex clients as UTC 
Date
, where no time zone informa-
tion is available on the object. Translation to the UTC/local time happens automatically
on the AMF protocol level, which adds the client time zone offset to the incoming dates
and subtracts it from outgoing ones.
The server does not know about the client’s time zone; it always operates in UTC time.
This means that if a user from New York City entered 1:00 p.m. as the time, a user in
Denver, Colorado, will see it as 11:00 a.m. In some applications, such behavior may
be desirable, but this is not the case in a global application in which the users can be
located around the world.
320 | Chapter 6: Open Source Networking Solutions
Documents you may be interested
Documents you may be interested