请耐着性子看完再上手,不难的,全实战干货分享,超详细教程,所见即所得 (pc端和移动端都可以!!!亲测 超给力)

来,咱们看图说事

按钮1,2是pdf.js自带的,分别对应顺时针旋转90度,逆时针旋转90度。于是乎又要我做一个旋转180度的按钮,诺!按钮3来了。

1.别怂,干!首先顺藤摸瓜,看按钮1,2的html是怎么写的 (这是在viewe.html里面改的,别搞错,汗!!!)

2.中文语言包:                        英文语言包:

3.3.1还是顺藤摸瓜,看按钮1,2的js源码是怎么写的(在viewer.js文件里面改)

3.2

3.3

3.4

3.5

好了,该加的基本都加了。可以去页面看看效果,如果旋转之后的数据流不需要保存进数据库,那到这就算是搞定了

可是我还没完(靓仔在流泪 (╥╯^╰╥)),这个旋转只是pdf.js把缓存的数据流在前端做了旋转,而我是要把旋转之后的数据流存到数据库里面去,其实也不难

思路就是在你点击旋转180度按钮的时候触发一个事件去请求后台接口,只需要传一个180度到后台,用后台的代码来实现旋转,旋转之后在把数据保存进数据库,这样就保持前后端的数据保持一致了,下次再打开这个文件就是旋转之后的效果了

<script src="../build/pdf.js"></script>

注意啊!!! 2标注的红色区域一定要写在这个里面(就是在<script src="viewer.js"></script>之前

<script src="viewer.js"></script>
-------------------------------end-------------------
现在再来说说按钮4:下载原文件
按钮4在viewer.html的改法跟按钮3一样(照葫芦画瓢),只是不需要在viewer.js里面改什么代码了。直接看代码吧

并附上后台java代码一份
@Autowired
protected HttpServletResponse response;
/**
* 下载原文件
*
* @param ArchiveDetailUUID
*/
@GetMapping(value = "getOriginalFile.do")
public void getOriginalFile(String ArchiveDetailUUID) {
try {
AfArchivedetail entity = afArchivedetailService.findDataOriginalFile(ArchiveDetailUUID);
if (entity != null) {
String filename = entity.getOriginalFileName() + entity.getOriginalSuffix();
//文件二进制数组
byte[] buffer = entity.getOriginalData();
// 设置response的Header
response.addHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(filename, "UTF-8"));
response.setContentType("application/octet-stream");
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
toClient.write(buffer);
toClient.flush();
toClient.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
最后来看一下gif图

随机推荐

  1. php设计模式之面向接口开发实例代码

    <?php header("Content-type:text/html;charset=utf-8"); /** * 共同接口 */ interface db { func ...

  2. 每天进步一点点------Allegro 布线时显示延迟以及相对延迟信息

    PROPAGATION_DELAYPROPAGATION_DELAY这个设定主要用来对Net绝对长度的设定,如要求设定一组Net的长度要在Min Mil到 Max Mil之间的话,就可以用这种设定来完 ...

  3. Python spyder-快捷键-多行注释

    选中多行后: Ctrl + 1: 注释/反注释 Ctrl + 4/5: 块注释/块反注释 Ctrl + L: 跳转到行号 Tab/Shift + Tab: 代码缩进/反缩进

  4. codeforces C. Primes and Multiplication(快速幂 唯一分解定理)

    题目链接:http://codeforces.com/contest/1228/problem/C 题解:给定一个函数f,g,题目有描述其中的表达式含义和两者之间的关系. 然后计算: 首先把给定的x用 ...

  5. codeforces A. Zoning Restrictions Again

    A. Zoning Restrictions Again ou are planning to build housing on a street. There are n spots availab ...

  6. python入门(十九讲):多进程

    1.进程概念 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动.是系统进行资源分配和调度的基本单位,是操作系统结构的基础. 狭义定义:进程是正在运行的程序的实例. 在早期面向进程设 ...

  7. 【做题笔记】[NOIOJ,非NOIp原题]装箱问题

    题意:给定一些矩形,面积分别是 \(1\times 1,2\times 2,3\times 3,4\times 4,5\times 5,6\times 6\).您现在知道了这些矩形的个数 \(a,b, ...

  8. Centos7 下mysql 密码重置

    Centos7 下mysql 密码重置 先停止mysql服务 mysqld_safe --skip-grant-tables & mysql mysql> use mysql;mysql ...

  9. @AliasFor 原理

      用法: import org.springframework.core.annotation.AliasFor; import java.lang.annotation.*; @Target(El ...

  10. AcWing 841. 字符串哈希

    //快速判断两次字符串是不是相等 #include<bits/stdc++.h> using namespace std ; typedef unsigned long long ULL; ...