selectpdf c# example : Adding a link to a pdf in preview control software utility azure winforms wpf visual studio WATUsageGuide39-part882

Clipping Programmer's Guide
389
</portlet-class>
Example
A very simple example of extending the clipping portlet is to add a help page. First, you must enable the
help-mode of your portlet (again in portlet.xml):
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>help</portlet-mode>
</supports>
You then extend the ClipJavaPortlet class and implement the doHelp method, for example as
follows.
Table 139. Extending the Clipping Portlet with a Help Page
package com.mycompany.myproject;
import javax.portlet.PortletException;
import javax.portlet.PortletRequestDispatcher;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import com.kapowtech.robosuite.client.clip.version1.adapter.
platform.portlet10.ClipJavaPortlet;
public class ClipJavaPortletWithHelp extends ClipJavaPortlet {
protected void doHelp(RenderRequest request,
RenderResponse response)
throws PortletException, java.io.IOException {
PortletRequestDispatcher portletRequestDispatcher
= getPortletContext().getRequestDispatcher("/help.html");
portletRequestDispatcher.include(request, response);
response.flushBuffer();
}
}
In this example, the doHelp method redirects to a simple html page displaying the help.
Another common use case is to add an edit page. We will return to this example in the next section.
Communication between Portlet and Servlet
If clipping is used in a Portal, the portlet shown will contain an IFRAME with a servlet (see The Clipping
Logic). Often information from the portlet needs to be communicated from the portlet to the servlet.
Assume for instance that you have created an edit page for your portlet, and that this page allows the user to
restart the clipping session. Now you need to communicate the user’s action from the portlet to the clipping
servlet, such that a RestartSessionController can retrieve the information and return true.
Example
As an example let us assume that we want to extend our clipping portlet with an edit page on which there
is a button to restart the portlet. That is, if at a given point a user goes to the edit page and presses this
Adding a link to a pdf in preview - insert, remove PDF links in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Free C# example code is offered for users to edit PDF document hyperlink (url), like inserting and deleting
change link in pdf; convert excel to pdf with hyperlinks
Adding a link to a pdf in preview - VB.NET PDF url edit library: insert, remove PDF links in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Help to Insert a Hyperlink to Specified PDF Document Page
adding hyperlinks to a pdf; accessible links in pdf
Clipping Programmer's Guide
390
button the clip will restart its session and the clip will display its start URL instead of whatever it was
displaying before.
This example is meant to capture the essence of a common situation where the clip portlet has an edit page
allowing the user to change the configuration of the robot. After modifying the configuration and pressing
“save”, the clip has to be restarted for the configuration changes to take effect.
For this to work we need to find a way to get the information that the portlet wants to restart its session
to the servlet.
The example below shows a portlet class that extends the clipping portlet class ClipJavaPortlet.
First, it adds an edit page to the portlet: This is done in the doEdit method, which redirects to a JSP
page called edit.jsp, given below.
Table 140. The Edit JSP Page
<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet"%>
<form name="edit" method='POST' 
action="<portlet:actionURL portletMode='edit'/>">
Press here to restart the clip: 
<input name="restart" type="submit" value="restart"/>
</form>
Table 141. Portlet Extending ClipJavaPortlet
package com.mycompany.myproject;
import ...
public class ClipJavaPortletWithEdit extends ClipJavaPortlet {
public static final String SHOULD_RESTART = "ShouldRestart";
private static final String LAST_RESTART_ATTRIBUTE_NAME
= "lastRestart";
private static final Random random = new Random();
public void processAction(ActionRequest request,
ActionResponse response)
throws PortletException, IOException {
final boolean isEditMode
= PortletMode.EDIT.equals(request.getPortletMode());
if (isEditMode) {
final String restart = request.getParameter("restart");
if (restart != null) {
response.setRenderParameter("restart",
"" + random.nextInt());
response.setPortletMode(PortletMode.VIEW);
}
}
}
protected void doEdit(RenderRequest request,
RenderResponse response)
throws PortletException, java.io.IOException {
PortletRequestDispatcher portletRequestDispatcher =
C# PDF insert image Library: insert images into PDF in C#.net, ASP
viewer component supports inserting image to PDF in preview without adobe this technical problem, we provide this C#.NET PDF image adding control, XDoc
adding a link to a pdf in preview; add links to pdf file
C# PDF Page Insert Library: insert pages into PDF file in C#.net
applications. Support adding and inserting one or multiple pages to existing PDF document. Forms. Ability to add PDF page number in preview. Offer
pdf link open in new window; add hyperlink to pdf in
Clipping Programmer's Guide
391
getPortletContext().getRequestDispatcher("/edit.jsp");
portletRequestDispatcher.include(request, response);
response.flushBuffer();
}
public void doView(RenderRequest request,
RenderResponse response)
throws PortletException, IOException  {
final String restartParameter = request.getParameter("restart");
final String lastRestartParameter
= (String) getSessionAttribute(request, response,
LAST_RESTART_ATTRIBUTE_NAME);
final boolean shouldRestart
= restartParameter != null &&
!restartParameter.equals(lastRestartParameter);
if (shouldRestart) {
setSessionAttribute(request, response,
LAST_RESTART_ATTRIBUTE_NAME,
restartParameter);
}
setSessionAttribute(request, response,
SHOULD_RESTART, shouldRestart);
super.doView(request, response);
}
}
The edit page has a button ‘restart’. When the user presses this, the method  processAction will
be called. If the user has pressed ‘restart’, the  processAction method will set a RenderParameter
restart to a random value. The doView method can read this parameter and check whether it is equal to
the last value of the restart parameter (which is saved as a session attribute). Hence processAction
ensures that a new value is generated whenever it is responsible for calling doView, but when doView is
called for other reasons, the value will be unchanged. Thus the random value makes it possible for doView
to distinguish calls due to the user pressing ‘restart’, and calls due to portal refreshes (this method works
well in practice, but is not 100% bulletproof in principle, as random might return the same value twice).
If doView is called due to a restart, we should make this fact available to the Restart Session controller:
The key to transferring data from the portlet to the servlet (where the Restart Session controller is called)
is to let the portlet write a session attribute and let the servlet read it.
The Restart Session controller then reads the same attribute and resets it.
So to summarize:
1. The JSP edit page communicates that a restart is required by adding a parameter.
2. The processAction method reads this parameter, sets a render parameter to a random value and
changes the portlet mode to VIEW.
3. The doView method reads the render parameter, and if it is set and different from the saved value,
it sets a session attribute.
4. The Restart Session controller reads the session attribute and restarts the session if necessary.
In the above example, setting and reading session attributes is done using method calls. The implementation
of  these  is  in  the  ClipJavaPortletWithEdit  class  and  is  presented  below.  There  are  two
C# PDF insert text Library: insert text into PDF content in C#.net
Supports adding text to PDF in preview without adobe reader installed in ASP.NET. Powerful .NET PDF edit control allows modify existing scanned PDF text.
adding hyperlinks to pdf; clickable links in pdf
VB.NET PDF insert text library: insert text into PDF content in vb
Multifunctional Visual Studio .NET PDF SDK library supports adding text content to adobe PDF document in VB.NET Add text to PDF in preview without adobe
pdf link to specific page; add hyperlinks to pdf online
Clipping Programmer's Guide
392
setter  methods  and  two  getter  methods,  making  it  possible  to  call  them  from  doView  and  the
Restart Session controller (i.e. the servlet), using a RenderRequest/RenderResponse pair resp. a
HttpServletRequest.
It is important to note that session attributes are shared among all portlets, so if you just write a session
attribute “ShouldRestart”, you might risk that another portlet restarts its session.
To avoid this, we augment the attribute name with an identifier uniquely identifying the portlet instance:
The clipJavaPortlet class offers a method getPortletID for exactly this purpose so we can use
this method in the session attribute methods taking a RenderRequest/RenderResponse pair.
Unfortunately,  the  getPortletID  method  requires  a  RenderRequest  (because  it  uses
getNameSpace) so we cannot call this from the Restart Session controller, but only from doView. This
problem has been solved in the clipping framework in the following way: When the ClipJavaPortlet
class embeds the servlet in an IFrame it calls the getPortletID method to retrieve an id, and passes
this id as a parameter to the servlet. This means that we are able to retrieve the id in the methods, which
take an HttpServletRequest by getting this parameter.
Table 142. Session Attribute Methods
public static Object getSessionAttr(HttpServletRequest request,
String name) {
final HttpSession session = request.getSession();
final String portletId
= request.getParameter(ClipServlet.PORTLET_PARAMETER_NAME);
return session.getAttribute(name + portletId);
}
public static void setSessionAttr(HttpServletRequest request,
String name,
Object value) {
final HttpSession session = request.getSession();
final String portletId
= request.getParameter(ClipServlet.PORTLET_PARAMETER_NAME);
session.setAttribute(name + portletId, value);
}
protected Object getSessionAttribute(RenderRequest request,
RenderResponse response,
String name) {
final PortletSession session = request.getPortletSession();
final String portletId = getPortletID(response);
return session.getAttribute(name + portletId,
PortletSession.APPLICATION_SCOPE);
}
protected void setSessionAttribute(RenderRequest request,
RenderResponse response,
String name,
Object value) {
final PortletSession session = request.getPortletSession();
final String portletId = getPortletID(response);
session.setAttribute(name + portletId, value,
PortletSession.APPLICATION_SCOPE);
C# Create PDF Library SDK to convert PDF from other file formats
Load PDF from stream programmatically. Preview PDF documents without other plug-ins. Besides, using this PDF document metadata adding control, you can
clickable links in pdf from word; add links to pdf acrobat
C# PowerPoint - How to Process PowerPoint
C# methods to add, insert or delete any specific PowerPoint slide, adding & burning & methods and sample codes of respective function, you may link the quick
add links to pdf online; adding hyperlinks to a pdf
Clipping Programmer's Guide
393
}
The Restart Session controller is presented below. It gets the attribute from the session by calling the
getSessionAttribute, which we saw above. If this returns true, it will reset the attributes value
to false and return true, which will tell the servlet to restart the clip.
Table 143. The Restart Session Controller
package clippingapi;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.kapowtech.robosuite.client.clip.version1.api.RestartSessionController;
public class MyRestartSessionController
implements RestartSessionController {
public boolean shouldRestartSession(HttpServletRequest request,
HttpServletResponse response){
final Boolean shouldRestart
= (Boolean) ClipJavaPortletWithEdit.getSessionAttribute(
request,
ClipJavaPortletWithEdit.SHOULD_RESTART);
if (shouldRestart) {
ClipJavaPortletWithEdit.setSessionAttribute(
request,
ClipJavaPortletWithEdit.SHOULD_RESTART,
Boolean.FALSE);
}
return shouldRestart;
}
}
VB.NET PDF insert image library: insert images into PDF in vb.net
in preview without adobe PDF control installed. Access to freeware download and online VB.NET class source code. This smart and mature PDF image adding component
pdf link; add link to pdf acrobat
VB.NET PDF copy, paste image library: copy, paste, cut PDF images
paste and cut PDF image while preview without adobe Free Visual Studio .NET PDF library, easy to Besides image extracting, adding, and removing, RasterEdge XDoc
add hyperlink to pdf online; add hyperlinks pdf file
394
Runtime
Kapow Katalyst offers a number of tools for executing the robots you have developed. The following
sections describe these tools:
• RoboServer is a server application that allows remote clients to execute robots. It is configured using
both the Management Console and the RoboServer Settings application (for advanced configuration,
such as security and authentication).
• The Management Console allows you to schedule execution of Robots, view logs and extracted data.
Also provides a dashboard for monitoring system health, and a centralized place where settings for
clusters of RoboServers can be configured.
• Control Center allows you to remotely monitor RoboServers and their robots.
C# Word - Process Word Document in C#
Capable of adding and burning image on specific Word document page in C# class. You may click the link to go to each Word document processing tutorial page to
add links to pdf document; pdf link to attached file
C# Excel - Excel Page Processing Overview
Support adding image of various formats (such as BMP, PNG & TIFF) to an Excel Click the link to specific C#.NET guide page and you will find detailed API(s
add hyperlink to pdf; add hyperlink to pdf acrobat
395
RoboServer User's Guide
RoboServer runs robots created with Design Studio. Robots can be started in various ways;  either
scheduled to run at specific times by the Management Console, called via a REST web service, through
the Java or .NET APIs or from a Kapplet.
In order for RoboServer to be able to execute robots, it must be activated by a Management Console.
A RoboServer is active when it belongs to a cluster in a Management Console with a valid license,
and sufficient KCUs have been assigned to the cluster. The RoboServer also receives settings from the
Management Console where they are configured on the clusters. Please refer to the Management Console
User's Guide for more information on the administration of RoboServers and clusters of these.
Starting RoboServer
RoboServer can be started in several different ways:
• By clicking the RoboServer program icon (or the 'Start Management Console' program icon which starts
both the Management Console and RoboServer).
• By invoking it from the command line, which is described in detail below.
• By running it as a service. For more information about running RoboServer as a service, see Starting
Servers Automatically.
To invoke RoboServer from the command line, open up a command window and type:
RoboServer
followed by Enter. If you have installed RoboServer correctly as described in the Installation Guide, then
the following is printed in the command window after which RoboServer terminates:
Table 144. RoboServer Help Text
Detected the following plugins:
...
Usage: RoboServer [-maxClippingSessions <num>] [-verbose] [-version] [-MC] [-port] [-sslPort] [-help] -service <service:params>
Available services:
...
The dots indicate information that depends on your installation. If something different than the above is
printed in the command window, then please confirm that you have installed RoboServer as described in
the Installation Guide.
Example
The command below starts a RoboServer and that accepts socket connections to the Socket-based RQL
Service listening on port number 50000.
RoboServer User's Guide
396
RoboServer -p 50000
RoboServer Parameters
No matter how RoboServer is started, it accepts the following parameters:
Table 145. RoboServer Parameters
Parameter
Description
-c <num> |
-maxClippingSessions <num>
This parameter specifies the maximum number of clipping sessions
that can exist on this RoboServer. This parameter is optional. The
default value is 50. The minimum value is 0.
Example: -maxClippingSessions 20
-v |
-verbose
This  optional  parameter  causes  RoboServer  to  output  status  and
runtime events.
-V |
-version
This  optional  parameter causes RoboServer to output the version
number, and then exit.
-MC
This  optional  parameter  triggers  the  Management  Console  to  be
started as part of RoboServer. The Management Console runs on an
embedded web server configured through the Settings application.
-s <service-name:service-parameter> |
-service <service-name:service-parameter>
This parameter specifies a RQL or JMX service that RoboServer
should start. This parameter must be specified at least once, and may
be specified multiple times to start multiple services in  the same
RoboServer. The available services depend on your installation.
Example: -service socket:50000
Example: -service jmx:50100
-p <port-number> |
-port <port-number>
This is a shorthand for calling -s socket:<port-number>
Example: -port 50000
-P <port-number> |
-sslPort <port-number>
This is a shorthand for calling -s ssl:<port-number>
Example: -sslPort 50001
There is no required ordering of the parameters. The JMX service provides management information from
the RoboServer on the specified port.
RoboServer User's Guide
397
Shutting Down RoboServer
RoboServer  can  be  shut  down  using  the  command  line  tool  ShutDownRoboServer.  Run
ShutDownRoboServer without arguments to see the various options for how to shut down the server, in
particular how to handle any robots that are currently running on the server.
Production Configuration
In order to get a stable and performing production environment, you may have to tweak some of the default
RoboServer parameters. We will look at the following configuration options:
• Number of RoboServer instances
• Memory allocation
• Number of concurrent robots
• Automatic memory overload detection
RoboServer runs on Oracle's Java Virtual Machine (JVM), this in turn runs on top of an operating system
(OS), which runs on top of your hardware. JVM's and OS's are patched, hardware architecture change, and
each new iteration aims to bring better performance; so, although we can give some general guidelines
about performance, the only way to make sure you have the optimal configuration is to test it.
As a general rule you get a little more performance by starting two instances of RoboServer. The JVM
uses memory management known as garbage collection (GC). On most hardware only a single CPU core
is active during GC, which leaves 75% of the CPU idle on a quad-core CPU. If you start two instances of
RoboServer, one instance can still use the full CPU while the other in running GC.
The amount of concurrent robots a RoboServer can run depends on the amount of CPU available, and how
fast you can get the data RoboServer needs to process. The number of concurrent robots is configured in
the Management Console cluster settings. A robot running against a slow website will use a lot less CPU
than a robot running against a website with a fast response time, and here is why. The amount of CPU
used by a program can be described with the following formula
CPU (core)% = 1 - WaitTime/TotalTime
If a robot takes 20 seconds to execute, but 15 seconds are spent waiting for the website, it is only executing
for 5 seconds, thus during the 20 seconds it is using an average of 25% (of a CPU core). The steps in a
robot are executed in sequence, which means that a single executing robot will only be able to utilize one
CPU core at a time. Most modern CPUs have multiple cores, so a robot that executes in 20 seconds, but
waits for 15 seconds, will in fact only use about 6% of a quad-core CPU.
By default RoboServer is configured to maximally run 20 robots concurrently. The number of concurrent
robots is configured in the Management Console cluster settings. If all your robots use 6% CPU, the CPU
will be fully utilized when you are running 16-17 robots concurrently. If you start 33 of these 6% robots
concurrently, you will overload RoboServer; because the amount of CPU available is constant, the result
is that each robot will take twice as long to finish. In the real world the CPU utilization of a robot may
be anywhere between 5-95% of a CPU core, depending on robot logic and the website it interacts with.
As a result it is hard to guess or calculate the correct value for the max concurrent robots, the only way
to be sure you have the right value is to do a load test and monitor the RoboServer CPU utilization, as
well as the robot runtime as load increases.
RoboServer User's Guide
398
Another parameter that may affect the number of concurrent robots each RoboServer can handle is the
amount of memory. The amount of memory used by robots can vary from a few megabytes (MB) to
hundreds of MB. By default RoboServer is configured with 1024MB of memory, this is often not enough
if you are actually executing 20 robots concurrently; check Changing the RAM Allocation to see how
to control memory allocation. If you don't provide enough memory to RoboServer, you run the risk of
crashing it with an out of memory error. The easiest way to ensure proper memory allocation is to monitor
memory utilization during your load tests. If you allocate 2048MB memory to a RoboServer, the JVM will
not allocate all of it up front, but it will reserve it from the OS (this is why allocating more than 1200MB
frequently fails on 32bit Windows). Once the JVM starts to use the memory, it will not be given back to
the OS. To find the optimal memory allocation you often have to run a series of load tests that push the
CPU to 100%. After each test is complete, you check how much of the reserved memory was actually
used by the JVM (the java.exe process). If all 1024MB (default) were used, increase (usually double) the
memory and run the test again. At some point the JVM will not have used all of the reserved memory, and
whatever it did use reflects the actual memory requirement and should be used to configure RoboServer.
Since RoboServer will crash if it runs out of memory, RoboServer tries to prevent this from occurring.
Before RoboServer starts a new robot it will check the memory utilization. If it is above 80% it will queue
the robot instead of starting it; this greatly reduces the risk of crashing RoboServer if the memory allocation
is configured incorrectly. This mechanism is often referred to as the 80% memory threshold. The threshold
value is configurable through the system property kapow.memoryThreshold=80.
Documents you may be interested
Documents you may be interested