windows form application in c# with database pdf : Change link in pdf file SDK application service wpf azure web page dnn 56EAEd011-part1939

6. on_ping: When a keepalive ping is received from the server.
7. on_error: When an unexpected error is detected.
8. on_unload: When the library detects that the current web-page is being unloaded.
Finally, the API includes a function for sending messages to the channel.
On top of this API, a simple protocol was implemented for handling chat module and slide 
module communication. The protocol was named CHIMP, an homage to the APE Comet 
server that was used in the early days of the Universal Primer. CHIMP defines the following 
messages:
1. slides/change: Changes the current slide to a slide specified by page number.
2. chat/public-msg: Sends a chat message to the channel.
3. draw/lines: Draw a line as annotation on the current slide.
4. draw/lines-clear: Clear currently drawn lines.
Since Pushy uses a JSON-based protocol, these messages are also specified as JSON. 
Messages are sent to their corresponding module based on the part of the message name 
before the "/".
Presenter Software
Due to the limited functionality of the current open standards based browser technologies, a 
stand-alone Python application was developed. Its purpose is to support the teacher in 
presenting and using video, slides and chat. The application is named Emcee after a Master 
of Ceremonies: The MC. Python [25] is a very high-level language and was chosen for its 
rapid development features. Among those are its large standard library, excellent 
documentation and broad usage. For the GUI, the Qt4 [26] library was chosen. Like Python it 
is licensed under the GNU General Public License, is freely available and is implemented on 
all major platforms, ensuring cross-platform compatibility. Although the application is being 
developed with a target platform of Ubuntu Linux 10.04, it will lower the effort required to port 
the application to another platform. The Qt4 C++ library is accessed though the PyQt4 
bindings. Another set of bindings, PySide, is currently being developed by Nokia and is 
largely API compatible with PyQt4, but was disregarded due to the lack of maturity of the 
project. The application is incorporating a large number of different APIs, hardware and 
network communication and a lot of glue-code, to keep everything working together. The 
focus has been on developing the glue code and using existing libraries when available. 
While the core Python library is very well documented, a lot of the third party libraries are 
sparsely documented – often only using code examples.
Functionality overview
The main screen is depicted in figure 1. It shows the presenter the current slide and the 
upcoming slide, side by side. Additionally a list of all the slides is kept in a sortable list below 
the upcoming slide. This enables the presenter to sort the slides while giving a presentation. 
By clicking on a slide this also enables the presenter to set the upcoming slide, i.e. to skip a 
series of slides, go back in the presentation during an Q&A session, etc.
Proceedings of the 7th International CDIO Conference, Technical University of Denmark, Copenhagen, June 20 - 23, 2011
Change link in pdf file - 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
add url to pdf; add hyperlinks to pdf
Change link in pdf file - 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
pdf link open in new window; adding hyperlinks to pdf files
On the main screen there is also a chat window, which makes it possible for the presenter to 
write text based messages to the distance learners and makes it possible for the distance 
learners to ask questions to the presenter. A toolbar is also available for adding additional 
slides, toggling of video, audio and slide broadcasting and to provide information, such as the 
current time. The control of the presentation slides (going forward, etc.) and the types of 
media available, are controlled though a simple plug-in system. Python scripts residing in the 
plugins/ folder are automatically loaded into to program. The currently supported plug-in 
types are pointing devices and slide content. 
Pointing Devices
Pointing devices is a broad category of keyboards, mice and remote controls for controlling 
the slides and annotating the presentation. As they are plug-in based, two pointing devices 
were implemented. The first one is a simple keyboard based flow control. It only implements 
a forward and backwards button, either as the arrow keys or the page-up and down keys. 
The main reason for also implementing page-up and down keys, is that a large number of 
wireless remote controls use these keys. It was tested using a cheap off-brand 2.4GHz 
wireless remote control [27] which enumerates as a USB HID keyboard on the host 
computer. The second device is much more sophisticated. Originally developed for the 
Nintendo Wii gaming console system, the Wii Remote or Wiimote is ideal as a pointing 
device. The device can be seen in illustration 5.
Proceedings of the 7th International CDIO Conference, Technical University of Denmark, Copenhagen, June 20 - 23, 2011
Illustration 4: The main window of Emcee. Upper left quadrant: Current slide 
view (also mirrored on a secondary screen). Upper right quadrant: Upcoming 
slide. Lower left quadrant: Chat and questions window. Lower right quadrant: 
Next slide chooser, slide sorter and list.
VB.NET PDF File Compress Library: Compress reduce PDF size in vb.
list below is mainly to optimize PDF file with multiple Program.RootPath + "\\" 3_optimized.pdf"; 'create optimizing 150.0F 'to change image compression
add hyperlink pdf; active links in pdf
C# PDF File Compress Library: Compress reduce PDF size in C#.net
list below is mainly to optimize PDF file with multiple Program.RootPath + "\\" 3_optimized.pdf"; // create optimizing 150F; // to change image compression
pdf edit hyperlink; clickable links in pdf
The Wiimote is using the wireless Bluetooth communication protocol, which means that it can 
communicate with most modern laptops. It features a large number of buttons, 3-axis 
accelerometers, an I
2
C communications port (for the Nunchuck, and other peripherals), 
vibration motor, LEDs and a 4 point-tracking infra-red camera. A number of Python libraries 
emerged when developers discovered how the communication protocol worked, but most of 
them were abandoned. The CWIID [28] library was chosen for its maturity, as it is available 
as a binary package for most Linux distributions. One thing all the libraries have in common 
is the lack of proper Bluetooth pairing [29]. The Wiimote can be placed in two modes. Host 
(PC) initiated communication and Wiimote initiated communication. Only the host-initiated is 
implemented, as it is much simpler to use, although the Wiimote has to be put into 
discoverable mode every time you want to connect to it. This is done by pressing the 1 and 2 
buttons on the remote simultaneously. Although this is a cumbersome procedure, this skips 
the step of host-remote pairing and makes sure that Wiimotes can be used interchangeably 
between computers.
The Wiimote is used for controlling the flow of the presentation, using the left and right arrow 
keys. The vibration motor is used to get the attention of the presenter, when, for example, 
there is a question from a distance learner. But the primary reason to use a Wiimote over a 
much simpler remote, is the infra-red point-tracking camera. By placing two clusters of IR-
diodes above or below the projector screen, the Wiimote can be used as a digitized laser 
pointer. The IR diodes will show up as two points on the IR-camera and its build-in computer 
vision algorithm sends the positions of the diodes to the host computer. A simple algorithm 
was written based on the midpoint of the two points and it includes a small correction for 
rotation of the Wiimote. Pressing a button on the remote enables the presenter to draw on 
the screen. A vertex reduction algorithm is used to limit the amount of points created by the 
freehand drawing. The Wiimote was intended to be used like this as a mouse, but another 
configuration is also very popular: Although not implemented in this software, if the Wiimote 
is placed on a stand, using a pen with an IR-diode in the end, the projector screen can be 
used as blackboard [30]. This alternative configuration is worth considering in a future 
revision of the program, as the accuracy of the drawing is much higher. Using the plug-in 
Proceedings of the 7th International CDIO Conference, Technical University of Denmark, Copenhagen, June 20 - 23, 2011
Illustration  5: The Wiimote (right) and the 
Nunchuck (left). The Nunchuck is currently not 
used by the Universal Primer software.
VB.NET PDF Password Library: add, remove, edit PDF file password
Dim setting As PasswordSetting = New PasswordSetting(newUserPassword, newOwnerPassword) ' Change password for an encrypted PDF file and output to a new file.
pdf link to email; adding an email link to a pdf
C# PDF Password Library: add, remove, edit PDF file password in C#
PasswordSetting setting = new PasswordSetting(newUserPassword, newOwnerPassword); // Change password for an encrypted PDF file and output to a new file.
add page number to pdf hyperlink; add hyperlink to pdf
system, it is a trivial task to add such functionality. The digitization of the pointing device is 
important, as it delivers the same teaching experience to the distance learners as it does to 
the people in the classroom. The distance learners will be able to see the gestures drawn on 
the slides by the presenter.
Slide Media Support
In order to support a large amount of different content on the slides, such as PDF files, 
YouTube videos, etc., the slide content is defined as a plug-in system as well. All content 
plug-ins are defined by the MIME-type they support. As a matching server-side plug-in is 
needed, the MIME-type serves as a plug-in identifier. Implemented in the application are two 
types of plug-ins. Like with the pointer plug-ins above, a simple and a more advanced plug-in 
is available. The simple plug-in is a blank slide. Its MIME-type is the non-standard 
application/x-blank-slide and can be used to clear the projector between multiple 
presentations or in a Q&A session.
The more advanced plug-in is the main content plug-in. It is based on PDF files and has the 
standard MIME-type application/pdf. Rendering of the PDF files is done by the libpoppler 
librar with a set of Python/Qt4 bindings called pypoppler-qt4. A patch was written for the 
bindings, as they did not expose the Table of Contents of the PDF file, which is often used to 
provide a slide name, usually set by presentation-creating software.
Broadcasting
The main features of this application are its broadcasting and interactive features. They 
cover slide switching, slide annotation, chat and audio/video broadcast of the presentation to 
the server software. For the text-based communication (slide switching, slide annotation and 
chat), a client for the CHIMP protocol was implemented in Python. This was implemented 
over HTTP using the XHR streaming transport. Future versions should rely on either raw 
Sockets or WebSocket support [31] as there is no reason for implementing, outside of a web 
browser, what is essentially a web browser-specific hack.
For video broadcasting, the application supports a connected DV [32] camera over an IEEE-
1394 [33] (also known as FireWire) connection. To handle the video input, the dvgrab 
program [34] was modified and compiled as a library. This library, written in C, was called 
from Python using the CTypes library in order to read video from the camera. The video is 
then forwarded to the ffmpeg program [35], called as a sub-process, which transcodes the 
video from DV to H.264 video with MP3 audio inside of an FLV container. The ffmpeg also 
handles sending of the FLV video to the RTMPd process running on the server. The current 
version of the application does not yet support high definition video or input sources other 
than DV cameras, though support for webcams and raw HDMI input is planned for upcoming 
releases.
In order for more than one presentation to take place simultaneously on a single server, it is 
necessary to name them. All broadcast information is associated with the presentation name 
specified by the presenter before it is sent. For the video stream, this is implemented using a 
patched version of ffmpeg that allows setting of the "stream name" feature of FLV streams. 
The stream name is simply set to the presentation name. For the CHIMP protocol, the 
channel name, as discussed in previous sections, is simply set to the presentation name, 
such that each presentation has exactly one channel.
DESIGN – WIKI-SITE PROJECT
The main challenges in developing the wiki site were identified as:
Proceedings of the 7th International CDIO Conference, Technical University of Denmark, Copenhagen, June 20 - 23, 2011
C# PDF Library SDK to view, edit, convert, process PDF file for C#
and quick navigation link in PDF bookmark. C#.NET: Edit PDF Metadata. PDF SDK for .NET allows you to read, add, edit, update, and delete PDF file metadata, like
add a link to a pdf file; add links to pdf online
C# PDF Page Rotate Library: rotate PDF page permanently in C#.net
C#.NET PDF Library - Rotate PDF Page in C#.NET. Empower C# Users to Change the Rotation Angle of PDF File Page Using C# Programming Language in .NET Application
chrome pdf from link; convert excel to pdf with hyperlinks
1. Developing a system for collaborative organization of available material.
2. Handling video contributions in a multitude of formats.
Other challenges, such as handling collaborative editing of text and images, has been solved 
by existing open source solutions such as MediaWiki [36] and was not included in this first 
phase of development.
Organization
The organization of available material was built around the idea of a dependency system. As 
an example: The user chooses to learn how to multiply, but the website says that in order to 
learn how to multiply, the user should learn how to add numbers first. But, to learn this, the 
user should have knowledge of numbers. In other words, a dependency system is a 
recommendation system, which suggests to the user the order in which to read/watch the 
materials that are available in the system. As an example, Tutor-web [1] is an existing 
dependency system, which today containsorganized information in relation to mathematics 
and statistics.
Specifying a list of dependencies for each piece of contributed material, and displaying these 
dependencies, is technically fairly straight forward. The challenge of a dependency system in 
the context of the Universal Primer is to build an interface that makes it easy for a large 
group of contributors to collaboratively define the dependencies.
There are many possible approaches to this problem. This first phase of development has 
explored a tag-based approach.
The tag-based approach idea is fairly simple: Material on the site is organized into named 
pages, and users are given the option of adding tags to the pages. Dependencies can be 
added to pages either by manually searching or by choosing from a list of suggestions that 
are generated by the site based on page tags.
Prerecorded Video
Goals
One of the goals of the Universal Primers is to enable as many people as possible to watch 
and contribute prerecorded video content. This would be simple if all video was in the same 
format, but in reality is complicated by two factors: 
1.
No single video format is supported for playback on all browsers and on all platforms.
2. User-contributed video will be uploaded in a variety of open and proprietary formats.
This situation can be dealt with either by restricting the formats supported by the system, or 
developing a system for automatic conversion between formats. The Universal Primer went 
with the latter approach. User-contributed video must be converted from the existing format, 
to one or more formats that allow the video to be displayed in the most commonly used 
browsers.
For user-contributed videos, the optimal list of supported formats is simple: All formats. This 
may not be attainable in practice, but the limiting factor will simply be the availability of 
free/open software that is able to decode the video.
The problem of deciding on an optimal list of video formats needed to support the most used 
browsers required some testing. A set of video formats were tested on several different 
Proceedings of the 7th International CDIO Conference, Technical University of Denmark, Copenhagen, June 20 - 23, 2011
.NET PDF SDK - Description of All PDF Processing Control Feastures
Easy to change PDF original password; Options for setting PDF security PDF Hyperlink Edit. Support adding and inserting hyperlink (link) to PDF document; Allow to
convert a word document to pdf with hyperlinks; add links to pdf file
RasterEdge .NET Document Imaging Trial Package Download Link.
PDF Files; Split PDF Document; Remove Password from PDF; Change PDF Permission Settings. PDF to HTML; C#: Convert PDF to Jpeg; C# File: Compress PDF; C# File
clickable pdf links; check links in pdf
browsers, browser plug-ins and operating systems. A minimal list of video codecs was 
compiled based on a need for support across the most commonly used browsers and 
browser plug-ins. The actual list used by the project when it launches for wide public use at a 
later date, will have to take into account any applicable license fees associated with the use 
of proprietary codecs, and whether it is even desirable for such a project to support non-open 
formats.
A system was designed to include functionality for upload, conversion and viewing of video 
formats, using a web-based interface (shown in Illustration 6).
Videos are uploaded via a standard web form, and are saved to a central networked file 
system. When a video is uploaded it must be converted to the list of supported formats. A 
database is kept updated with a list of all uploaded videos, and for each video, which formats 
the video is available in. When the video is uploaded, a job is added to a networked queue 
for each supported video format. A small collection of "workers", programs running on one or 
more servers, check the job queue at regular intervals. If a worker finds a new conversion 
job, the job is marked as belonging to that particular worker and the worker starts converting 
the video. When the worker is finished, the job is marked as completed and the list of 
available formats for that video gets updated to include the newly created file.
Users view videos by browsing a list of uploaded videos and clicking the video of interest. 
When a user selects a video to watch, a small script is started. This script firsts downloads a 
list of available formats for that particular video from the database. The script then instructs 
the browser to attempt to display the video in each of the available formats, beginning with 
the most open/free format. If the first format does not work in the browser, the next format is 
tried and so on until all the available formats have been tried. If none of the formats work, the 
user is given the option of instead downloading one of the files (a link to each of the available 
Proceedings of the 7th International CDIO Conference, Technical University of Denmark, Copenhagen, June 20 - 23, 2011
Illustration 6: System design for handling prerecorded video. Both use-cases for 
viewing video (green lines) and uploading video (dark lines) are shown.
formats is shown). Hopefully the user will then be able to play the downloaded video in a 
standalone player, outside of the browser.
IMPLEMENTATION – WIKI-SITE PROJECT
A prototype of the dependency system was implemented as a web application using the 
Ruby on Rails framework and a MySQL database. The system implements the following 
features:
1. User sign-up and login/logout.
2. Creating, deleting and updating wiki-pages.
3. Adding tags to a page.
4. Adding dependencies to a page.
5. Tag-based searching.
6. Intelligent algorithm for suggesting new dependencies for a page, based on tags.
The most interesting feature in this system is the tagging-based dependency system. The 
other features may be seen as supporting the development of this feature rather than being 
of specific interest to the project and have not be documented in detail in this article. A 
detailed report on this prototype is available upon request [37].
Tags are added to pages by typing comma-separated text strings into a text-box. 
Dependencies can be added to pages by the users, and a recommendation algorithm is used 
to suggest pages that may be candidates for becoming dependencies of the current page.
The recommendation algorithm works as follows: Assume that the user has chosen a page 
called A and wishes to set dependencies for it. First the system collects all tags that belong 
to A. Then it compares them with the tags of all other pages known to the system. Referring 
to one of the pages being compared to A as B: The more matching tags are found between A 
and B, the more points B gets. In addition, the algorithm takes into consideration how popular 
the matching tags are on the site in general: The more pages that have the tag associated, 
the more points B gets. After analysis, all of the compared pages are sorted by points. The 
system displays up to ten pages sorted by highest number of points. If more than ten pages 
are found, then they are paginated.
An option to manually search for the page is also given, for cases where the 
recommendation algorithm fails to find the desired page.
Proceedings of the 7th International CDIO Conference, Technical University of Denmark, Copenhagen, June 20 - 23, 2011
Prerecorded Video
The implementation of the system for handling prerecorded video uses a combination of 
existing open source applications and a set of Perl scripts [38]. The web server is a standard 
Apache 2 [39] server, and Perl CGI [40] scripts  are used for dynamic content. 
CONCLUSION
A suite of software for live education has been developed with features suitable for a 
university classroom setting. A system for handling the online streaming of prerecorded video 
in a variety of formats was developed and tested. A system for collaborative organization of 
educational material using a combination of tagging and dependencies was designed and 
implemented. All software is covered by open source licenses. These systems have not yet 
Proceedings of the 7th International CDIO Conference, Technical University of Denmark, Copenhagen, June 20 - 23, 2011
Illustration 7: Screenshot of a page named "Multiplying" with one dependency 
on the "Addition" page. Two tags, "Math" and "Simple" are associated with the 
page.
Illustration 8: The dialog for setting dependencies. The 
system is recommending that the "Multiplying" article may 
be a relevant dependency for the current article.
been integrated into a unified whole. The software is useful as is, but requires some amount 
of technical expertise for setup. Better documentation, integration, packaging and real world 
testing are required before it can be considered for general public release.
FUTURE WORK
The work presented in this article, while functional, needs to be integrated into a single 
system. A serious testing, documentation and integration effort is needed before the 
Universal Primer is ready for wide public deployment. Major scalability improvements are 
planned: Moving to a highly scalable NoSQL database back-end has already been 
discussed, and would not represent a great challenge since the database structures used are 
relatively simple. A more pressing issue is large scale transcoding and hosting of video. A 
distributed solution for video storage must be found if the system is to scale properly. This 
could be either in the form of a distributed storage engine such as Ceph [41] or Tahoe-LAFS 
[42], or peer to peer video streaming software [6].
New modules will be written to supplement the video, slides and chat. Planned modules 
include a screen-casting module, a two-way video module to allow students to ask questions 
using video+voice and a peer-to-peer module for streaming video implemented as a Java 
applet. Minor planned improvements include the previously mentioned new GUI and a switch 
to SVG format instead of raster images for web-based display of the slides, as the vector-
based SVG allows students to copy-paste text and adjust zoom.
Support is planned for mobile platforms such as Google Android and iOS, in order to support 
smartphones and tablet devices.
Ideas for more collaborative and flexible dependency-like organization solutions are being 
considered. A prominent idea is to allow users to specify a favoured “path” through the 
material on the website, that they can annotate with personal notes, and then use an 
algorithm to average over all user-specified paths when displaying what might be a 
dependency for the current subject, and how best to move forward learning new subjects.
An important addition to the project before deploying it in a public setting is increased 
security and filtering, specifically for live lectures, where the system is currently lacking a 
good access control implementation.
It is hoped that the list of supported codecs can be replaced by a single format: WebM video 
[43]. WebM uses the VP8 video format and Ogg Vorbis audio format. These codecs are both 
open, free and unencumbered by any enforced patents. It is hoped that this format will see 
wide cross-platform and cross-browser adoption in the near future.
When it becomes possible to switch to HTML5 video instead of Flash for live video support, 
the plan is to use the free WebM video format. Right now, HTML5 Video requires different 
codecs in different browsers, which means that more processing power has to be expended 
on transcoding. It is hoped that future browsers will all support the WebM format as a 
common standard.
ACKNOWLEDGEMENTS
This project was developed with support from:
The Technical University of Denmark Department of Informatics and Mathematical Modelling.
Proceedings of the 7th International CDIO Conference, Technical University of Denmark, Copenhagen, June 20 - 23, 2011
Interreg IV project “Vind 
i Øresund”.
Special thanks to:
Carly L. Nacmanie
REFERENCES
[1]
G. Stefansson; The Tutor-web; an educational system for classroom presentation, evaluation 
and self-study. Journal Computers & Education archive Volume 43 Issue 4, December 2004 
Elsevier Science Ltd. Oxford, UK.
[2]
http://www.gnu.org/philosophy/free-sw.html
[3]
http://www.opensource.org/osd.html
[4]
http://ocw.mit.edu/index.htm
[5]
http://www.livescribe.com/en-us/
[6]
http://torrentfreak.com/bittorrent-p2p-live-streaming-110119/
[7]
http://code.macournoyer.com/thin/
[8]
http://www.mysql.com/
[9]
http://www.icecast.org/
[10] http://www.adobe.com/devnet/rtmp.html
[11] http://www.adobe.com/devnet/f4v.html
[12] http://www.itu.int/rec/T-REC-H.264
[13] http://mpeg.chiariglione.org/
[14] http://rack.rubyforge.org/
[15] https://github.com/macournoyer/pusher
[16] http://ww.telent.net/diary/Streaming_XHR_with_Ruby_and_Mongrel 
http://cometdaily.com/2007/11/18/ie-activexhtmlfile-transport-part-ii/ 
http://www.w3.org/TR/eventsource/
http://cometdaily.com/2007/11/15/the-long-polling-
technique/
[17]  http://www.rabbitmq.com
Proceedings of the 7th International CDIO Conference, Technical University of Denmark, Copenhagen, June 20 - 23, 2011
Documents you may be interested
Documents you may be interested