Handling different mime types and giving support to them is quite important when a collaboration platform is being developed. Previously sTeam web UI
had essential components like :
image viewer
audio player
video player
So in the process of developing new components and adding support for different mime types a PDF viewer grew out as a possibility. So the concept of a PDF viewer is quite simple, it just helps you to display, control all the files that come with the mime-type application/pdf
.
The process as a whole is quite simple in developing the pdf viewer. Let us have a look at the process;
- We have to utilize the
PDFViewerService
in order to build the PDF viewer - The configuration variables are pretty much few in number, although it is very necessary to look after what URI is being passed to the
pdfURL
variable as it is solely responsible for loading the content from the file. - Using the pdf viewer instance is pretty much simple as we have to declare the instance viewer first and then use the same
$scope.instance
for performing operations like :- Going to the next page
- Going to the prev page
- Going to a particular page
- Displaying the total number of pages loaded
- Displaying the progress of the loaded files
- Lastly there is one important thing to be noted,
ngPDFViewer
is comparitively a light weight library that could be used for development of a PDF viewer although when the application is bloated with large sized PDF’s it takes couple of seconds to load the PDF. A smart move here would be using the$scope.currentPages
and$scope.totalPages
in order to make a small calculation and display it at the users end as to how much percentage of the file is loaded.
angular.module('steam', [ 'ngPDFViewer' ])
.controller('workspaceDetailedCtrl', [ '$scope', 'PDFViewerService', function($scope, pdf) {
$scope.pdfURL = "test.pdf"
$scope.instance = pdf.Instance("viewer")
$scope.nextPage = function() {
$scope.instance.nextPage()
}
$scope.prevPage = function() {
$scope.instance.prevPage()
}
$scope.gotoPage = function(page) {
$scope.instance.gotoPage(page)
}
$scope.pageLoaded = function(curPage, totalPages) {
$scope.currentPage = curPage
$scope.totalPages = totalPages
}
$scope.loadProgress = function(loaded, total, state) {
console.log('loaded =', loaded, 'total =', total, 'state =', state)
}
}]);
Here is the final outcome of it:
Source : click here
Thats it folks,
Happy Hacking !!