重新修订了自述文件,修复了pdf无法查看的bug

add-license-1
青阳龙野 2018-02-28 16:44:01 +08:00
parent 0d99947257
commit a060aafad8
16 changed files with 922 additions and 4 deletions

210
README.html Normal file
View File

@ -0,0 +1,210 @@
<h1>KIFT——快捷、强大、小巧的开源网盘系统</h1>
<h2>【青阳网络文件系统自述文档】</h2>
<hr />
<h3>简介</h3>
<p><strong>本应用是一款快捷的网络文件分享工具——您可以把它看成是一款简化的“网盘”它可以运行在普通的家用PC上而且即使是没有什么经验的用户也能成功安装并使用它。它具备很多高级功能例如视频的在线播放而且还在不断地添加新功能。</strong></p>
<p>本应用的作者相信不仅仅是他本人还有很多人需要在局域网内搭建起一个简便的网盘系统以便让所有在同一局域网内的同事或同学都能够使用随处可见的浏览器去访问、上传或下载若干文件——无论是不足1MB的文本还是超过4GB的1080p视频而且它最好安装简单界面便捷还要有必备的管理功能。实际上kiftd的设计初衷正是为了满足这一需求。作者最初编写它的目的是能够在办公室和教室内将自己的资料快速分发给学生或其他老师在作者成功弄丢了几次U盘之后便萌生了设计这样一款应用的想法。 本应用使用java开发因此可以部署在windows/Linux/Unix(包括Mac os X)之中的任意系统上只要安装java 8及以上环境。</p>
<h4>kift有哪些亮点</h4>
<ul>
<li>kift是一款使用简单、功能齐全的小型网盘搭建系统(解压即用版本叫做kiftd)。只需一个浏览器,您就可以在您的办公室内、家中或小型局域网内共享您的任何文件,甚至是让您的朋友在线播放其中的视频而无需下载。</li>
<li>kift是一款功能齐全的网盘。您只想将删除文件的权利给与您信任的人您想让您的学生只能上传自己的作业而不能下载抄袭其他人的作业kitf的权限管理能力能轻松完成您的需求。</li>
<li>kift还是一款开源免费的网盘。您无需任何投入您需要做的仅仅是下载解压然后开始使用。就是这么简单。害怕它隐藏不知名的代码偷用您的资源“挖矿”现在您可以在github上随时查看和拷贝本应用的全部源代码并自己动手编译它。您还可以根据自己的喜好随意修改它无论如何一切任由您操作。</li>
</ul>
<hr />
<h3>资源导航</h3>
<a href="https://github.com/KOHGYLW/kiftd/wiki">立即搭建一个网盘您可以阅读github上的快速开始https://github.com/KOHGYLW/kiftd/wiki</a>
<p>如果您无法访问互联网,也可以阅读下面的<a href="#quickstart">现在开始使用!</a>一章。
</p>
<p>如果需要查看各项设置的设置方式,请参阅<a href="#baseconf">基本设置</a>一章。 </p>
<em>作为开发者:下载源代码请前往这个地址:<a href="https://github.com/KOHGYLW/KohgylwIFT">https://github.com/KOHGYLW/KohgylwIFT</a></em>
<hr />
<h3 id="quickstart">现在开始使用!</h3>
<p>
<strong>如果您使用本应用,即视为同意下列条款:</strong>
<ul>
<li>本应用无使用限制,但使用本应用所造成的任何后果需由使用者本人承担(包括但不限于:非法传播文件导致的后果)。</li>
<li>任何人均可以复制、修改和编译本应用的源代码,但所造成的任何后果均由修改者本人自行承担。</li>
</ul>
</p>
<h3>1分钟快速部署</h3>
<p>第一步首先您需要在您的计算机上安装java 8或以上版本的java环境这是本应用运行的先决条件。java的安装并不麻烦您可以很快完成它。</p>
<p>第二步:按照下列操作启动您的服务器:
<ol>
<li>首先,进入本应用的主目录。</li>
<li>进入bin目录以管理员权限运行startup.bat文件(适用于windows用户)/在终端执行命令:<code>$ sudo ./startup.sh</code> (适用于Linux、Unix、Mac OS X用户)。这一步会启动服务器。</li>
<li>如果服务器启动成功则可以使用浏览器推荐使用Chrome或FireFox或其内核的浏览器访问127.0.0.1进入到本应用主页。<em>如果您用的是360安全浏览器那么您应该使用“极速模式”访问本应用</em></li>
</ol>
<em><small>注:部署过程毫无难度,而且即使失败了也不会对您的系统产生任何负面影响,您可以放心大胆地多次尝试。</small></em>
</p>
<p>如果您访问成功,会看到如下效果:</p>
<div style="text-align:center"><img width="900" src="./img/mainpage.png" /></div>
<p>现在,您已经可以让他人访问您的网盘了。就是这么简单。</p>
<p>*如何让他人访问如果您需要他人访问您的网盘请在局域网内其他主机上使用浏览器访问您本机IP地址即可进入本系统。 例如 http://192.168.1.2/ 其中IP地址部分需根据您的计算机IP地址进行替换。</p>
<p>*如何使用上传、修改等功能:您可以先使用内置用户(admin,000000)进行登录并进行全部权限的操作。至于如何修改用户密码或添加更多的用户,请阅读后面的
<a>《用户授权》</a>部分。</p>
<hr />
<h3>如何关闭服务器</h3>
<p>如果您需要关闭本应用请bin目录运行shutdown.bat文件适用于windows用户/在终端执行命令:<code>$ ./shutdown.sh</code> (适用于Linux、Unix、Mac OS X用户)。这一步会关闭服务器。</p>
<hr />
<h3>查看运行日志</h3>
<p>本应用记录的日志文件存放在“~/文档/KohgylwIFT/log”路径下。日志文件的标题为日志产生的日期以“klog”作为后缀。日志文件的内容以纯文本格式进行记录您可以使用文本编辑器例如“记事本”打开它们并查看其内容。</p>
<hr />
<h3 id="mf">主要功能介绍及展示</h3>
<h4>各种文件的上传、下载、删除和管理</h4>
<p>这些都是一个网盘最基本的功能, 本系统尽可能的将它们做的简单易用,让您在使用部署时几乎没有学习成本。 界面简单高效也是本系统的特色之一:本人相信对于大多数喜欢体验开源技术的用户而言,一个高速、流畅、干净又足够硬派的系统远比一个界面华丽却相应缓慢的系统更具有吸引力。如下图,这是文件列表的基本效果,其中可以点击的是文件夹,不可点击的为文件。
</p>
<div style="text-align:center"><img width="900" src="./img/filesystem.png" /></div>
<h4>mp4与webm格式资源在线播放</h4>
<p>上传至本系统的全部mp4资源和webm资源均可使用在线播放功能用户需具备[下载]权限才可播放视频),不限大小和长度。操作方式为:点击文件后方操作栏中的“播放”按钮,会自动打开播放页面并在线播放。点击页面右上方“关闭”按钮停止播放并关闭播放页面。效果如下:</p>
<div style="text-align:center"><img width="900" src="./img/palymovie.png" /></div>
<h4>PDF文档在线预览</h4>
<p>您可以直接查看PDF文档的内容而无需下载它。在线查看提供了页数跳转、旋转、搜索等功能。这个功能是为了方便办公环境下更好的区分不同版本的PDF文档有些文档可能看上去很像但是内容有细微差别例如不同日期的工作报表。这种情况下使用在线预览功能会方便许多。效果如下</p>
<div style="text-align:center"><img width="900" src="./img/seepdf.png" /></div>
<h4>图片在线查看</h4>
<p>本应用也支持bmp、jpg、jpeg、png、gif五种常见图片格式的在线查看。您可以通过它快速查找全部文件列表中您所中意的那张图片。效果如下</p>
<div style="text-align:center"><img width="900" src="./img/showpicture.png" /></div>
<hr />
<h3 id="baseconf">基本设置</h3>
<p>为了方便个人操作,本应用的全部设置都基于文件配置。您可能对这种配置方式不太熟悉甚至觉得它很高深,不过不用担心,请跟着下面的说明大胆尝试一下,之后,您可能会喜欢上这种配置方式并体会到它的优点。</p>
<h4>增加用户</h4>
<ol>
<li>请进入:“ 应用主目录/webapps/ROOT/etc ”这个目录。</li>
<li>使用文本编辑器(例如记事本)打开名为“ configure.properties ”的文件。</li>
<li>在该文件中找到如下内容:</li>
<pre>
...
#[Set the account(who can login) list]
#Example:
#account.list = user1,user2,user3...
accounts.list = admin
...
</pre>
<li>增加一个用户名为“test”</li>
<pre>
...
accounts.list = admin,test
...
</pre>
<em>注意:分割两个用户名的逗号必须是英文逗号</em>
</ol>
<p>至此一个名为test的用户已经创建完毕。</p>
<h4>设置用户密码</h4>
<ol>
<li>在该文件中找到如下内容:</li>
<pre>
...
#[Set the password for every account]
#Example:
#pwd.user1 = 123456
#pwd.user2 = abcdef
#...
pwd.admin = 000000
...
</pre>
<li>为“test”用户设置登录密码为“123456”</li>
<pre>
...
pwd.test = 123456
...
</pre>
</ol>
<p>现在用户test可以使用密码123456进行登陆了。</p>
<h4>设置用户操作权限</h4>
<ol>
<li>在该文件中找到如下内容:</li>
<pre>
#[Set the permission for accounts]
#c = Create the new folder
#u = Upload files
#d = Delete files or folders
#r = Rename files or folders
#l = downLoad files
#Defult setting:l
#Example:
#auth.admin = cudr
#auth.user1 = u
#...
auth.admin = cudr
#overall -- this value set the permission for all user (include visitor who not login)
#Example:
#authOverall = none
authOverall = l
</pre>
<li>设置test用户除了可以下载文件之外还可以上传文件但他无法创建文件夹无法进行删除操作也无法对已有文件进行重命名</li>
<pre>
...
auth.admin = cudr
auth.test = u (增加这一行)
...
</pre>
</ol>
<p>最终我们新创建的用户test就可以在登陆后进行上传操作了<em>authOverall一项设置的是匿名用户和全部用户共有的基本权限例如默认设置为l的意思是所有用户和匿名用户均可执行下载操作</em></p>
<p>注:各个字母代表的权限如下:</p>
<ul>
<li>c 创建文件夹</li>
<li>u 上传文件</li>
<li>d 删除文件或整个文件夹</li>
<li>r 对已经存在的文件或文件夹进行重命名</li>
<li>l 下载文件</li>
</ul>
<h4>修改下载缓冲区大小</h4>
<p>所谓下载缓冲区:它的设置决定了服务器为每位执行下载的用户开辟多大的内存作为其下载数据的缓冲区。默认情况下您无需修改这个值,除非您的内存过小或者您需要同时服务规模庞大的用户。</p>
<ol>
<li>还是在配置文件“ configure.properties ”中,找到以下内容:</li>
<pre>
...
#[Set the size of the buffer memory for file download by byte]
#This value depending on your network speed and your memory size
#Example:
#buff.size=1048576
#Default value:1048576
#Bigger buffer size will use bigger memory and provide users faster download speed(No faster than network speed)
buff.size=1048576
...
</pre>
<li>将每位用户的下载缓冲区改为512KB</li>
<pre>
...
buff.size = 524288
...
</pre>
</ol>
<P>该值越大,对内存的需求量就越高,同时硬盘的读取次数就越低,您应该根据您的硬盘性能、内存大小和网络速度三者进行综合考虑,并设置该值。如果您对此不了解,请勿修改默认值。</P>
<h4>设置日志记录方式</h4>
<p>本日志分为两种类型,分别为“异常”和“事件”。其中,“异常”记录的是服务器运行中产生的意外错误,“事件”记录的是用户的操作历史。</p>
<ol>
<li>在配置文件中找到如下内容:</li>
<pre>
...
#[Set the logging level]
#This setting determines what info need to log.
#R = Runtime exception only.
#E = important Events include runtime exception,operation of delete download rename and upload(create).
#N = No activity will be logged.
#default setting(if program not found this setting):R.
#Example:
#log=E
log=E
...
</pre>
<li>将日志记录方式改为不记录任何信息:</li>
<pre>
...
log=N
...
</pre>
</ol>
<p>我们推荐使用默认的日志记录方式,它会记录所有异常信息和用户的操作过程,您可以通过这些记录更好地进行管理。</p>
<hr />
<em>@kohgylw 青阳龙野</em>

BIN
img/filesystem.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

BIN
img/mainpage.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

BIN
img/palymovie.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

BIN
img/seepdf.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

BIN
img/showpicture.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

BIN
webapps/ROOT/.DS_Store vendored

Binary file not shown.

View File

@ -1,5 +1,5 @@
#Generated by Maven Integration for Eclipse
#Fri Feb 23 08:33:45 CST 2018
#Wed Feb 28 14:53:51 CST 2018
version=0.0.1-SNAPSHOT
groupId=kohgylw
m2e.projectName=KohgylwIFT

View File

@ -0,0 +1,214 @@
/*
* Generated by the Jasper component of Apache Tomcat
* Version: Apache Tomcat/9.0.0.M17
* Generated at: 2018-02-28 07:02:04 UTC
* Note: The last modified time of this file was set to
* the last modified time of the source file after
* generation to assist with modification tracking.
*/
package org.apache.jsp.WEB_002dINF;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
public final class picture_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent,
org.apache.jasper.runtime.JspSourceImports {
private static final javax.servlet.jsp.JspFactory _jspxFactory =
javax.servlet.jsp.JspFactory.getDefaultFactory();
private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;
private static final java.util.Set<java.lang.String> _jspx_imports_packages;
private static final java.util.Set<java.lang.String> _jspx_imports_classes;
static {
_jspx_imports_packages = new java.util.HashSet<>();
_jspx_imports_packages.add("javax.servlet");
_jspx_imports_packages.add("javax.servlet.http");
_jspx_imports_packages.add("javax.servlet.jsp");
_jspx_imports_classes = null;
}
private volatile javax.el.ExpressionFactory _el_expressionfactory;
private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager;
public java.util.Map<java.lang.String,java.lang.Long> getDependants() {
return _jspx_dependants;
}
public java.util.Set<java.lang.String> getPackageImports() {
return _jspx_imports_packages;
}
public java.util.Set<java.lang.String> getClassImports() {
return _jspx_imports_classes;
}
public javax.el.ExpressionFactory _jsp_getExpressionFactory() {
if (_el_expressionfactory == null) {
synchronized (this) {
if (_el_expressionfactory == null) {
_el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
}
}
}
return _el_expressionfactory;
}
public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() {
if (_jsp_instancemanager == null) {
synchronized (this) {
if (_jsp_instancemanager == null) {
_jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());
}
}
}
return _jsp_instancemanager;
}
public void _jspInit() {
}
public void _jspDestroy() {
}
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException {
final java.lang.String _jspx_method = request.getMethod();
if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSPs only permit GET POST or HEAD");
return;
}
final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
javax.servlet.jsp.JspWriter _jspx_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null;
try {
response.setContentType("text/html; charset=UTF-8");
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
out.write('\n');
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ path + "/";
out.write("\n");
out.write("<!doctype html>\n");
out.write("<html>\n");
out.write("<head>\n");
out.write("<base href=\"");
out.print(basePath);
out.write("\">\n");
out.write("<meta charset=\"UTF-8\">\n");
out.write("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n");
out.write("<title>KViewer</title>\n");
out.write("<link rel=\"stylesheet\" href=\"css/bootstrap.min.css\">\n");
out.write("<link rel=\"stylesheet\" href=\"css/overrall.min.css\">\n");
out.write("<link rel=\"icon\" type=\"image/x-icon\" href=\"css/picture.png\" />\n");
out.write("</head>\n");
out.write("\n");
out.write("<body>\n");
out.write("\t");
out.write("\n");
out.write("\t<div class=\"container\">\n");
out.write("\n");
out.write("\t\t");
out.write("\n");
out.write("\t\t<div class=\"row\">\n");
out.write("\t\t\t<div class=\"col-md-12\">\n");
out.write("\t\t\t\t<div class=\"titlebox\">\n");
out.write("\t\t\t\t\t<span class=\"titletext\"><em> 青阳图片查看器 <small><span\n");
out.write("\t\t\t\t\t\t\t\tclass=\"graytext\">KIFT-Viewer</span></small></em></span>\n");
out.write("\t\t\t\t\t<button class=\"btn btn-link rightbtn\" onclick=\"reMainPage()\">\n");
out.write("\t\t\t\t\t\t关闭 <span class=\"glyphicon glyphicon-share-alt\" aria-hidden=\"true\"></span>\n");
out.write("\t\t\t\t\t</button>\n");
out.write("\t\t\t\t</div>\n");
out.write("\t\t\t\t<hr />\n");
out.write("\t\t\t</div>\n");
out.write("\t\t</div>\n");
out.write("\t\t");
out.write("\n");
out.write("\n");
out.write("\t\t");
out.write("\n");
out.write("\t\t<div class=\"row\">\n");
out.write("\t\t\t<div class=\"col-md-12\">\n");
out.write("\t\t\t\t<p class=\"subtitle\">图片名称:");
out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${picture.fileName }", java.lang.String.class, (javax.servlet.jsp.PageContext)_jspx_page_context, null));
out.write("</p>\n");
out.write("\t\t\t\t<p class=\"subtitle\">");
out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${picture.fileCreator }", java.lang.String.class, (javax.servlet.jsp.PageContext)_jspx_page_context, null));
out.write('/');
out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${picture.fileCreationDate }", java.lang.String.class, (javax.servlet.jsp.PageContext)_jspx_page_context, null));
out.write('/');
out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${picture.fileSize }", java.lang.String.class, (javax.servlet.jsp.PageContext)_jspx_page_context, null));
out.write("\n");
out.write("\t\t\t\t\tMB</p>\n");
out.write("\t\t\t\t<br />\n");
out.write("\t\t\t\t<!-- 图片窗口组件位置 -->\n");
out.write("\t\t\t\t<img id=\"kiftpicture\" class=\"video-js col-md-12\"\n");
out.write("\t\t\t\t\tsrc=\"fileblocks/");
out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${picture.filePath }", java.lang.String.class, (javax.servlet.jsp.PageContext)_jspx_page_context, null));
out.write("\" name=\"");
out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${picture.fileName }", java.lang.String.class, (javax.servlet.jsp.PageContext)_jspx_page_context, null));
out.write("\"\n");
out.write("\t\t\t\t\talt=\"错误:图片无法正常显示\" />\n");
out.write("\t\t\t</div>\n");
out.write("\t\t</div>\n");
out.write("\t\t");
out.write("\n");
out.write("\n");
out.write("\t</div>\n");
out.write("\t");
out.write("\n");
out.write("\n");
out.write("</body>\n");
out.write("<script type=\"text/javascript\" src=\"js/jquery-3.3.1.min.js\"></script>\n");
out.write("<script type=\"text/javascript\" src=\"js/bootstrap.min.js\"></script>\n");
out.write("<script type=\"text/javascript\">\n");
out.write("\tfunction reMainPage() {\n");
out.write("\t\twindow.opener = null;\n");
out.write("\t\twindow.open('', '_self');\n");
out.write("\t\twindow.close();\n");
out.write("\t}\n");
out.write("</script>\n");
out.write("</html>");
} catch (java.lang.Throwable t) {
if (!(t instanceof javax.servlet.jsp.SkipPageException)){
out = _jspx_out;
if (out != null && out.getBufferSize() != 0)
try {
if (response.isCommitted()) {
out.flush();
} else {
out.clearBuffer();
}
} catch (java.io.IOException e) {}
if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
else throw new ServletException(t);
}
} finally {
_jspxFactory.releasePageContext(_jspx_page_context);
}
}
}

View File

@ -1,7 +1,7 @@
/*
* Generated by the Jasper component of Apache Tomcat
* Version: Apache Tomcat/9.0.0.M17
* Generated at: 2018-01-30 08:13:04 UTC
* Generated at: 2018-02-28 06:17:00 UTC
* Note: The last modified time of this file was set to
* the last modified time of the source file after
* generation to assist with modification tracking.
@ -142,7 +142,7 @@ public final class video_jsp extends org.apache.jasper.runtime.HttpJspBase
out.write("\t\t\t\t\t<span class=\"titletext\"><em> 青阳网络视频播放器 <small><span\n");
out.write("\t\t\t\t\t\t\t\tclass=\"graytext\">KIFT-Player</span></small></em></span>\n");
out.write("\t\t\t\t\t<button class=\"btn btn-link rightbtn\" onclick=\"reMainPage()\">\n");
out.write("\t\t\t\t\t\t返回 <span class=\"glyphicon glyphicon-share-alt\" aria-hidden=\"true\"></span>\n");
out.write("\t\t\t\t\t\t关闭 <span class=\"glyphicon glyphicon-share-alt\" aria-hidden=\"true\"></span>\n");
out.write("\t\t\t\t\t</button>\n");
out.write("\t\t\t\t</div>\n");
out.write("\t\t\t\t<hr />\n");
@ -195,7 +195,9 @@ public final class video_jsp extends org.apache.jasper.runtime.HttpJspBase
out.write("\t\tthis.play();\n");
out.write("\t});\n");
out.write("\tfunction reMainPage(){\n");
out.write("\t\twindow.location.href=\"home.jsp\";\n");
out.write("\t\twindow.opener = null;\n");
out.write("\t\twindow.open('', '_self');\n");
out.write("\t\twindow.close();\n");
out.write("\t}\n");
out.write("</script>\n");
out.write("</html>");

View File

@ -0,0 +1,492 @@
/*
* Generated by the Jasper component of Apache Tomcat
* Version: Apache Tomcat/9.0.0.M17
* Generated at: 2018-02-28 06:27:49 UTC
* Note: The last modified time of this file was set to
* the last modified time of the source file after
* generation to assist with modification tracking.
*/
package org.apache.jsp.pdfview.web;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
public final class viewer_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent,
org.apache.jasper.runtime.JspSourceImports {
private static final javax.servlet.jsp.JspFactory _jspxFactory =
javax.servlet.jsp.JspFactory.getDefaultFactory();
private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;
private static final java.util.Set<java.lang.String> _jspx_imports_packages;
private static final java.util.Set<java.lang.String> _jspx_imports_classes;
static {
_jspx_imports_packages = new java.util.HashSet<>();
_jspx_imports_packages.add("javax.servlet");
_jspx_imports_packages.add("javax.servlet.http");
_jspx_imports_packages.add("javax.servlet.jsp");
_jspx_imports_classes = null;
}
private volatile javax.el.ExpressionFactory _el_expressionfactory;
private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager;
public java.util.Map<java.lang.String,java.lang.Long> getDependants() {
return _jspx_dependants;
}
public java.util.Set<java.lang.String> getPackageImports() {
return _jspx_imports_packages;
}
public java.util.Set<java.lang.String> getClassImports() {
return _jspx_imports_classes;
}
public javax.el.ExpressionFactory _jsp_getExpressionFactory() {
if (_el_expressionfactory == null) {
synchronized (this) {
if (_el_expressionfactory == null) {
_el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
}
}
}
return _el_expressionfactory;
}
public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() {
if (_jsp_instancemanager == null) {
synchronized (this) {
if (_jsp_instancemanager == null) {
_jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());
}
}
}
return _jsp_instancemanager;
}
public void _jspInit() {
}
public void _jspDestroy() {
}
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException {
final java.lang.String _jspx_method = request.getMethod();
if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSPs only permit GET POST or HEAD");
return;
}
final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
javax.servlet.jsp.JspWriter _jspx_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null;
try {
response.setContentType("text/html; charset=UTF-8");
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
out.write('\n');
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ path + "/";
out.write("\n");
out.write("<!DOCTYPE html>\n");
out.write("<!--\n");
out.write("Copyright 2012 Mozilla Foundation\n");
out.write("\n");
out.write("Licensed under the Apache License, Version 2.0 (the \"License\");\n");
out.write("you may not use this file except in compliance with the License.\n");
out.write("You may obtain a copy of the License at\n");
out.write("\n");
out.write(" http://www.apache.org/licenses/LICENSE-2.0\n");
out.write("\n");
out.write("Unless required by applicable law or agreed to in writing, software\n");
out.write("distributed under the License is distributed on an \"AS IS\" BASIS,\n");
out.write("WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n");
out.write("See the License for the specific language governing permissions and\n");
out.write("limitations under the License.\n");
out.write("\n");
out.write("Adobe CMap resources are covered by their own copyright but the same license:\n");
out.write("\n");
out.write(" Copyright 1990-2015 Adobe Systems Incorporated.\n");
out.write("\n");
out.write("See https://github.com/adobe-type-tools/cmap-resources\n");
out.write("-->\n");
out.write("<html dir=\"ltr\" mozdisallowselectionprint moznomarginboxes>\n");
out.write(" <head>\n");
out.write(" <meta charset=\"utf-8\">\n");
out.write(" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n");
out.write(" <meta name=\"google\" content=\"notranslate\">\n");
out.write(" <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n");
out.write(" <title>PDF.js viewer</title>\n");
out.write("\n");
out.write("\n");
out.write(" <link rel=\"stylesheet\" href=\"viewer.css\">\n");
out.write("\n");
out.write("\n");
out.write("\n");
out.write("<!-- This snippet is used in production (included from viewer.html) -->\n");
out.write("<link rel=\"resource\" type=\"application/l10n\" href=\"locale/locale.properties\">\n");
out.write("<script src=\"../build/pdf.js\"></script>\n");
out.write("\n");
out.write("\n");
out.write(" <script src=\"viewer.js\"></script>\n");
out.write("\n");
out.write(" </head>\n");
out.write("\n");
out.write(" <body tabindex=\"1\" class=\"loadingInProgress\">\n");
out.write(" <div id=\"outerContainer\">\n");
out.write("\n");
out.write(" <div id=\"sidebarContainer\">\n");
out.write(" <div id=\"toolbarSidebar\">\n");
out.write(" <div class=\"splitToolbarButton toggled\">\n");
out.write(" <button id=\"viewThumbnail\" class=\"toolbarButton toggled\" title=\"Show Thumbnails\" tabindex=\"2\" data-l10n-id=\"thumbs\">\n");
out.write(" <span data-l10n-id=\"thumbs_label\">Thumbnails</span>\n");
out.write(" </button>\n");
out.write(" <button id=\"viewOutline\" class=\"toolbarButton\" title=\"Show Document Outline (double-click to expand/collapse all items)\" tabindex=\"3\" data-l10n-id=\"document_outline\">\n");
out.write(" <span data-l10n-id=\"document_outline_label\">Document Outline</span>\n");
out.write(" </button>\n");
out.write(" <button id=\"viewAttachments\" class=\"toolbarButton\" title=\"Show Attachments\" tabindex=\"4\" data-l10n-id=\"attachments\">\n");
out.write(" <span data-l10n-id=\"attachments_label\">Attachments</span>\n");
out.write(" </button>\n");
out.write(" </div>\n");
out.write(" </div>\n");
out.write(" <div id=\"sidebarContent\">\n");
out.write(" <div id=\"thumbnailView\">\n");
out.write(" </div>\n");
out.write(" <div id=\"outlineView\" class=\"hidden\">\n");
out.write(" </div>\n");
out.write(" <div id=\"attachmentsView\" class=\"hidden\">\n");
out.write(" </div>\n");
out.write(" </div>\n");
out.write(" </div> <!-- sidebarContainer -->\n");
out.write("\n");
out.write(" <div id=\"mainContainer\">\n");
out.write(" <div class=\"findbar hidden doorHanger\" id=\"findbar\">\n");
out.write(" <div id=\"findbarInputContainer\">\n");
out.write(" <input id=\"findInput\" class=\"toolbarField\" title=\"Find\" placeholder=\"Find in document…\" tabindex=\"91\" data-l10n-id=\"find_input\">\n");
out.write(" <div class=\"splitToolbarButton\">\n");
out.write(" <button id=\"findPrevious\" class=\"toolbarButton findPrevious\" title=\"Find the previous occurrence of the phrase\" tabindex=\"92\" data-l10n-id=\"find_previous\">\n");
out.write(" <span data-l10n-id=\"find_previous_label\">Previous</span>\n");
out.write(" </button>\n");
out.write(" <div class=\"splitToolbarButtonSeparator\"></div>\n");
out.write(" <button id=\"findNext\" class=\"toolbarButton findNext\" title=\"Find the next occurrence of the phrase\" tabindex=\"93\" data-l10n-id=\"find_next\">\n");
out.write(" <span data-l10n-id=\"find_next_label\">Next</span>\n");
out.write(" </button>\n");
out.write(" </div>\n");
out.write(" </div>\n");
out.write("\n");
out.write(" <div id=\"findbarOptionsContainer\">\n");
out.write(" <input type=\"checkbox\" id=\"findHighlightAll\" class=\"toolbarField\" tabindex=\"94\">\n");
out.write(" <label for=\"findHighlightAll\" class=\"toolbarLabel\" data-l10n-id=\"find_highlight\">Highlight all</label>\n");
out.write(" <input type=\"checkbox\" id=\"findMatchCase\" class=\"toolbarField\" tabindex=\"95\">\n");
out.write(" <label for=\"findMatchCase\" class=\"toolbarLabel\" data-l10n-id=\"find_match_case_label\">Match case</label>\n");
out.write(" <span id=\"findResultsCount\" class=\"toolbarLabel hidden\"></span>\n");
out.write(" </div>\n");
out.write("\n");
out.write(" <div id=\"findbarMessageContainer\">\n");
out.write(" <span id=\"findMsg\" class=\"toolbarLabel\"></span>\n");
out.write(" </div>\n");
out.write(" </div> <!-- findbar -->\n");
out.write("\n");
out.write(" <div id=\"secondaryToolbar\" class=\"secondaryToolbar hidden doorHangerRight\">\n");
out.write(" <div id=\"secondaryToolbarButtonContainer\">\n");
out.write(" <button id=\"secondaryPresentationMode\" class=\"secondaryToolbarButton presentationMode visibleLargeView\" title=\"Switch to Presentation Mode\" tabindex=\"51\" data-l10n-id=\"presentation_mode\">\n");
out.write(" <span data-l10n-id=\"presentation_mode_label\">Presentation Mode</span>\n");
out.write(" </button>\n");
out.write("\n");
out.write(" <button id=\"secondaryOpenFile\" class=\"secondaryToolbarButton openFile visibleLargeView\" title=\"Open File\" tabindex=\"52\" data-l10n-id=\"open_file\">\n");
out.write(" <span data-l10n-id=\"open_file_label\">Open</span>\n");
out.write(" </button>\n");
out.write("\n");
out.write(" <button id=\"secondaryPrint\" class=\"secondaryToolbarButton print visibleMediumView\" title=\"Print\" tabindex=\"53\" data-l10n-id=\"print\">\n");
out.write(" <span data-l10n-id=\"print_label\">Print</span>\n");
out.write(" </button>\n");
out.write("\n");
out.write(" <button id=\"secondaryDownload\" class=\"secondaryToolbarButton download visibleMediumView\" title=\"Download\" tabindex=\"54\" data-l10n-id=\"download\">\n");
out.write(" <span data-l10n-id=\"download_label\">Download</span>\n");
out.write(" </button>\n");
out.write("\n");
out.write(" <a href=\"#\" id=\"secondaryViewBookmark\" class=\"secondaryToolbarButton bookmark visibleSmallView\" title=\"Current view (copy or open in new window)\" tabindex=\"55\" data-l10n-id=\"bookmark\">\n");
out.write(" <span data-l10n-id=\"bookmark_label\">Current View</span>\n");
out.write(" </a>\n");
out.write("\n");
out.write(" <div class=\"horizontalToolbarSeparator visibleLargeView\"></div>\n");
out.write("\n");
out.write(" <button id=\"firstPage\" class=\"secondaryToolbarButton firstPage\" title=\"Go to First Page\" tabindex=\"56\" data-l10n-id=\"first_page\">\n");
out.write(" <span data-l10n-id=\"first_page_label\">Go to First Page</span>\n");
out.write(" </button>\n");
out.write(" <button id=\"lastPage\" class=\"secondaryToolbarButton lastPage\" title=\"Go to Last Page\" tabindex=\"57\" data-l10n-id=\"last_page\">\n");
out.write(" <span data-l10n-id=\"last_page_label\">Go to Last Page</span>\n");
out.write(" </button>\n");
out.write("\n");
out.write(" <div class=\"horizontalToolbarSeparator\"></div>\n");
out.write("\n");
out.write(" <button id=\"pageRotateCw\" class=\"secondaryToolbarButton rotateCw\" title=\"Rotate Clockwise\" tabindex=\"58\" data-l10n-id=\"page_rotate_cw\">\n");
out.write(" <span data-l10n-id=\"page_rotate_cw_label\">Rotate Clockwise</span>\n");
out.write(" </button>\n");
out.write(" <button id=\"pageRotateCcw\" class=\"secondaryToolbarButton rotateCcw\" title=\"Rotate Counterclockwise\" tabindex=\"59\" data-l10n-id=\"page_rotate_ccw\">\n");
out.write(" <span data-l10n-id=\"page_rotate_ccw_label\">Rotate Counterclockwise</span>\n");
out.write(" </button>\n");
out.write("\n");
out.write(" <div class=\"horizontalToolbarSeparator\"></div>\n");
out.write("\n");
out.write(" <button id=\"cursorSelectTool\" class=\"secondaryToolbarButton selectTool toggled\" title=\"Enable Text Selection Tool\" tabindex=\"60\" data-l10n-id=\"cursor_text_select_tool\">\n");
out.write(" <span data-l10n-id=\"cursor_text_select_tool_label\">Text Selection Tool</span>\n");
out.write(" </button>\n");
out.write(" <button id=\"cursorHandTool\" class=\"secondaryToolbarButton handTool\" title=\"Enable Hand Tool\" tabindex=\"61\" data-l10n-id=\"cursor_hand_tool\">\n");
out.write(" <span data-l10n-id=\"cursor_hand_tool_label\">Hand Tool</span>\n");
out.write(" </button>\n");
out.write("\n");
out.write(" <div class=\"horizontalToolbarSeparator\"></div>\n");
out.write("\n");
out.write(" <button id=\"documentProperties\" class=\"secondaryToolbarButton documentProperties\" title=\"Document Properties…\" tabindex=\"62\" data-l10n-id=\"document_properties\">\n");
out.write(" <span data-l10n-id=\"document_properties_label\">Document Properties…</span>\n");
out.write(" </button>\n");
out.write(" </div>\n");
out.write(" </div> <!-- secondaryToolbar -->\n");
out.write("\n");
out.write(" <div class=\"toolbar\">\n");
out.write(" <div id=\"toolbarContainer\">\n");
out.write(" <div id=\"toolbarViewer\">\n");
out.write(" <div id=\"toolbarViewerLeft\">\n");
out.write(" <button id=\"sidebarToggle\" class=\"toolbarButton\" title=\"Toggle Sidebar\" tabindex=\"11\" data-l10n-id=\"toggle_sidebar\">\n");
out.write(" <span data-l10n-id=\"toggle_sidebar_label\">Toggle Sidebar</span>\n");
out.write(" </button>\n");
out.write(" <div class=\"toolbarButtonSpacer\"></div>\n");
out.write(" <button id=\"viewFind\" class=\"toolbarButton\" title=\"Find in Document\" tabindex=\"12\" data-l10n-id=\"findbar\">\n");
out.write(" <span data-l10n-id=\"findbar_label\">Find</span>\n");
out.write(" </button>\n");
out.write(" <div class=\"splitToolbarButton hiddenSmallView\">\n");
out.write(" <button class=\"toolbarButton pageUp\" title=\"Previous Page\" id=\"previous\" tabindex=\"13\" data-l10n-id=\"previous\">\n");
out.write(" <span data-l10n-id=\"previous_label\">Previous</span>\n");
out.write(" </button>\n");
out.write(" <div class=\"splitToolbarButtonSeparator\"></div>\n");
out.write(" <button class=\"toolbarButton pageDown\" title=\"Next Page\" id=\"next\" tabindex=\"14\" data-l10n-id=\"next\">\n");
out.write(" <span data-l10n-id=\"next_label\">Next</span>\n");
out.write(" </button>\n");
out.write(" </div>\n");
out.write(" <input type=\"number\" id=\"pageNumber\" class=\"toolbarField pageNumber\" title=\"Page\" value=\"1\" size=\"4\" min=\"1\" tabindex=\"15\" data-l10n-id=\"page\">\n");
out.write(" <span id=\"numPages\" class=\"toolbarLabel\"></span>\n");
out.write(" </div>\n");
out.write(" <div id=\"toolbarViewerRight\">\n");
out.write(" <button id=\"presentationMode\" class=\"toolbarButton presentationMode hiddenLargeView\" title=\"Switch to Presentation Mode\" tabindex=\"31\" data-l10n-id=\"presentation_mode\">\n");
out.write(" <span data-l10n-id=\"presentation_mode_label\">Presentation Mode</span>\n");
out.write(" </button>\n");
out.write("\n");
out.write(" <button id=\"openFile\" class=\"toolbarButton openFile hiddenLargeView\" title=\"Open File\" tabindex=\"32\" data-l10n-id=\"open_file\" style=\"display: none\">\n");
out.write(" <span data-l10n-id=\"open_file_label\">Open</span>\n");
out.write(" </button>\n");
out.write("\n");
out.write(" <button id=\"print\" class=\"toolbarButton print hiddenMediumView\" title=\"Print\" tabindex=\"33\" data-l10n-id=\"print\" style=\"display: none\">\n");
out.write(" <span data-l10n-id=\"print_label\">Print</span>\n");
out.write(" </button>\n");
out.write("\n");
out.write(" <button id=\"download\" class=\"toolbarButton download hiddenMediumView\" title=\"Download\" tabindex=\"34\" data-l10n-id=\"download\" style=\"display: none\">\n");
out.write(" <span data-l10n-id=\"download_label\">Download</span>\n");
out.write(" </button>\n");
out.write(" <a href=\"#\" id=\"viewBookmark\" class=\"toolbarButton bookmark hiddenSmallView\" title=\"Current view (copy or open in new window)\" tabindex=\"35\" data-l10n-id=\"bookmark\">\n");
out.write(" <span data-l10n-id=\"bookmark_label\">Current View</span>\n");
out.write(" </a>\n");
out.write("\n");
out.write(" <div class=\"verticalToolbarSeparator hiddenSmallView\"></div>\n");
out.write("\n");
out.write(" <button id=\"secondaryToolbarToggle\" class=\"toolbarButton\" title=\"Tools\" tabindex=\"36\" data-l10n-id=\"tools\">\n");
out.write(" <span data-l10n-id=\"tools_label\">Tools</span>\n");
out.write(" </button>\n");
out.write(" </div>\n");
out.write(" <div id=\"toolbarViewerMiddle\">\n");
out.write(" <div class=\"splitToolbarButton\">\n");
out.write(" <button id=\"zoomOut\" class=\"toolbarButton zoomOut\" title=\"Zoom Out\" tabindex=\"21\" data-l10n-id=\"zoom_out\">\n");
out.write(" <span data-l10n-id=\"zoom_out_label\">Zoom Out</span>\n");
out.write(" </button>\n");
out.write(" <div class=\"splitToolbarButtonSeparator\"></div>\n");
out.write(" <button id=\"zoomIn\" class=\"toolbarButton zoomIn\" title=\"Zoom In\" tabindex=\"22\" data-l10n-id=\"zoom_in\">\n");
out.write(" <span data-l10n-id=\"zoom_in_label\">Zoom In</span>\n");
out.write(" </button>\n");
out.write(" </div>\n");
out.write(" <span id=\"scaleSelectContainer\" class=\"dropdownToolbarButton\">\n");
out.write(" <select id=\"scaleSelect\" title=\"Zoom\" tabindex=\"23\" data-l10n-id=\"zoom\">\n");
out.write(" <option id=\"pageAutoOption\" title=\"\" value=\"auto\" selected=\"selected\" data-l10n-id=\"page_scale_auto\">Automatic Zoom</option>\n");
out.write(" <option id=\"pageActualOption\" title=\"\" value=\"page-actual\" data-l10n-id=\"page_scale_actual\">Actual Size</option>\n");
out.write(" <option id=\"pageFitOption\" title=\"\" value=\"page-fit\" data-l10n-id=\"page_scale_fit\">Page Fit</option>\n");
out.write(" <option id=\"pageWidthOption\" title=\"\" value=\"page-width\" data-l10n-id=\"page_scale_width\">Page Width</option>\n");
out.write(" <option id=\"customScaleOption\" title=\"\" value=\"custom\" disabled=\"disabled\" hidden=\"true\"></option>\n");
out.write(" <option title=\"\" value=\"0.5\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 50 }'>50%</option>\n");
out.write(" <option title=\"\" value=\"0.75\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 75 }'>75%</option>\n");
out.write(" <option title=\"\" value=\"1\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 100 }'>100%</option>\n");
out.write(" <option title=\"\" value=\"1.25\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 125 }'>125%</option>\n");
out.write(" <option title=\"\" value=\"1.5\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 150 }'>150%</option>\n");
out.write(" <option title=\"\" value=\"2\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 200 }'>200%</option>\n");
out.write(" <option title=\"\" value=\"3\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 300 }'>300%</option>\n");
out.write(" <option title=\"\" value=\"4\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 400 }'>400%</option>\n");
out.write(" </select>\n");
out.write(" </span>\n");
out.write(" </div>\n");
out.write(" </div>\n");
out.write(" <div id=\"loadingBar\">\n");
out.write(" <div class=\"progress\">\n");
out.write(" <div class=\"glimmer\">\n");
out.write(" </div>\n");
out.write(" </div>\n");
out.write(" </div>\n");
out.write(" </div>\n");
out.write(" </div>\n");
out.write("\n");
out.write(" <menu type=\"context\" id=\"viewerContextMenu\">\n");
out.write(" <menuitem id=\"contextFirstPage\" label=\"First Page\"\n");
out.write(" data-l10n-id=\"first_page\"></menuitem>\n");
out.write(" <menuitem id=\"contextLastPage\" label=\"Last Page\"\n");
out.write(" data-l10n-id=\"last_page\"></menuitem>\n");
out.write(" <menuitem id=\"contextPageRotateCw\" label=\"Rotate Clockwise\"\n");
out.write(" data-l10n-id=\"page_rotate_cw\"></menuitem>\n");
out.write(" <menuitem id=\"contextPageRotateCcw\" label=\"Rotate Counter-Clockwise\"\n");
out.write(" data-l10n-id=\"page_rotate_ccw\"></menuitem>\n");
out.write(" </menu>\n");
out.write("\n");
out.write(" <div id=\"viewerContainer\" tabindex=\"0\">\n");
out.write(" <div id=\"viewer\" class=\"pdfViewer\"></div>\n");
out.write(" </div>\n");
out.write("\n");
out.write(" <div id=\"errorWrapper\" hidden='true'>\n");
out.write(" <div id=\"errorMessageLeft\">\n");
out.write(" <span id=\"errorMessage\"></span>\n");
out.write(" <button id=\"errorShowMore\" data-l10n-id=\"error_more_info\">\n");
out.write(" More Information\n");
out.write(" </button>\n");
out.write(" <button id=\"errorShowLess\" data-l10n-id=\"error_less_info\" hidden='true'>\n");
out.write(" Less Information\n");
out.write(" </button>\n");
out.write(" </div>\n");
out.write(" <div id=\"errorMessageRight\">\n");
out.write(" <button id=\"errorClose\" data-l10n-id=\"error_close\">\n");
out.write(" Close\n");
out.write(" </button>\n");
out.write(" </div>\n");
out.write(" <div class=\"clearBoth\"></div>\n");
out.write(" <textarea id=\"errorMoreInfo\" hidden='true' readonly=\"readonly\"></textarea>\n");
out.write(" </div>\n");
out.write(" </div> <!-- mainContainer -->\n");
out.write("\n");
out.write(" <div id=\"overlayContainer\" class=\"hidden\">\n");
out.write(" <div id=\"passwordOverlay\" class=\"container hidden\">\n");
out.write(" <div class=\"dialog\">\n");
out.write(" <div class=\"row\">\n");
out.write(" <p id=\"passwordText\" data-l10n-id=\"password_label\">Enter the password to open this PDF file:</p>\n");
out.write(" </div>\n");
out.write(" <div class=\"row\">\n");
out.write(" <input type=\"password\" id=\"password\" class=\"toolbarField\">\n");
out.write(" </div>\n");
out.write(" <div class=\"buttonRow\">\n");
out.write(" <button id=\"passwordCancel\" class=\"overlayButton\"><span data-l10n-id=\"password_cancel\">Cancel</span></button>\n");
out.write(" <button id=\"passwordSubmit\" class=\"overlayButton\"><span data-l10n-id=\"password_ok\">OK</span></button>\n");
out.write(" </div>\n");
out.write(" </div>\n");
out.write(" </div>\n");
out.write(" <div id=\"documentPropertiesOverlay\" class=\"container hidden\">\n");
out.write(" <div class=\"dialog\">\n");
out.write(" <div class=\"row\">\n");
out.write(" <span data-l10n-id=\"document_properties_file_name\">File name:</span> <p id=\"fileNameField\">-</p>\n");
out.write(" </div>\n");
out.write(" <div class=\"row\">\n");
out.write(" <span data-l10n-id=\"document_properties_file_size\">File size:</span> <p id=\"fileSizeField\">-</p>\n");
out.write(" </div>\n");
out.write(" <div class=\"separator\"></div>\n");
out.write(" <div class=\"row\">\n");
out.write(" <span data-l10n-id=\"document_properties_title\">Title:</span> <p id=\"titleField\">-</p>\n");
out.write(" </div>\n");
out.write(" <div class=\"row\">\n");
out.write(" <span data-l10n-id=\"document_properties_author\">Author:</span> <p id=\"authorField\">-</p>\n");
out.write(" </div>\n");
out.write(" <div class=\"row\">\n");
out.write(" <span data-l10n-id=\"document_properties_subject\">Subject:</span> <p id=\"subjectField\">-</p>\n");
out.write(" </div>\n");
out.write(" <div class=\"row\">\n");
out.write(" <span data-l10n-id=\"document_properties_keywords\">Keywords:</span> <p id=\"keywordsField\">-</p>\n");
out.write(" </div>\n");
out.write(" <div class=\"row\">\n");
out.write(" <span data-l10n-id=\"document_properties_creation_date\">Creation Date:</span> <p id=\"creationDateField\">-</p>\n");
out.write(" </div>\n");
out.write(" <div class=\"row\">\n");
out.write(" <span data-l10n-id=\"document_properties_modification_date\">Modification Date:</span> <p id=\"modificationDateField\">-</p>\n");
out.write(" </div>\n");
out.write(" <div class=\"row\">\n");
out.write(" <span data-l10n-id=\"document_properties_creator\">Creator:</span> <p id=\"creatorField\">-</p>\n");
out.write(" </div>\n");
out.write(" <div class=\"separator\"></div>\n");
out.write(" <div class=\"row\">\n");
out.write(" <span data-l10n-id=\"document_properties_producer\">PDF Producer:</span> <p id=\"producerField\">-</p>\n");
out.write(" </div>\n");
out.write(" <div class=\"row\">\n");
out.write(" <span data-l10n-id=\"document_properties_version\">PDF Version:</span> <p id=\"versionField\">-</p>\n");
out.write(" </div>\n");
out.write(" <div class=\"row\">\n");
out.write(" <span data-l10n-id=\"document_properties_page_count\">Page Count:</span> <p id=\"pageCountField\">-</p>\n");
out.write(" </div>\n");
out.write(" <div class=\"buttonRow\">\n");
out.write(" <button id=\"documentPropertiesClose\" class=\"overlayButton\"><span data-l10n-id=\"document_properties_close\">Close</span></button>\n");
out.write(" </div>\n");
out.write(" </div>\n");
out.write(" </div>\n");
out.write(" <div id=\"printServiceOverlay\" class=\"container hidden\">\n");
out.write(" <div class=\"dialog\">\n");
out.write(" <div class=\"row\">\n");
out.write(" <span data-l10n-id=\"print_progress_message\">Preparing document for printing…</span>\n");
out.write(" </div>\n");
out.write(" <div class=\"row\">\n");
out.write(" <progress value=\"0\" max=\"100\"></progress>\n");
out.write(" <span data-l10n-id=\"print_progress_percent\" data-l10n-args='{ \"progress\": 0 }' class=\"relative-progress\">0%</span>\n");
out.write(" </div>\n");
out.write(" <div class=\"buttonRow\">\n");
out.write(" <button id=\"printCancel\" class=\"overlayButton\"><span data-l10n-id=\"print_progress_close\">Cancel</span></button>\n");
out.write(" </div>\n");
out.write(" </div>\n");
out.write(" </div>\n");
out.write(" </div> <!-- overlayContainer -->\n");
out.write("\n");
out.write(" </div> <!-- outerContainer -->\n");
out.write(" <div id=\"printContainer\"></div>\n");
out.write(" </body>\n");
out.write("</html>\n");
} catch (java.lang.Throwable t) {
if (!(t instanceof javax.servlet.jsp.SkipPageException)){
out = _jspx_out;
if (out != null && out.getBufferSize() != 0)
try {
if (response.isCommitted()) {
out.flush();
} else {
out.clearBuffer();
}
} catch (java.io.IOException e) {}
if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
else throw new ServletException(t);
}
} finally {
_jspxFactory.releasePageContext(_jspx_page_context);
}
}
}