java可以利用iText(也有其他语言的)来加入:
PdfReader reader = new PdfReader("c://1.pdf");
PdfStamper stamper = new PdfStamper(reader,new FileOutputStream(“c://new1.pdf”), '\0',true);
PdfWriter writer = stamper.getWriter();
PushbuttonField button = new PushbuttonField(writer, new Rectangle(450, 750, 530, 800), "post");
PdfFormField submit = button.getField();
submit.setAction( PdfAction.javaScript("app.alert(‘hello,lec’)", writer));
stamper.addAnnotation(submit, 1);
具体就可以去查看iText是怎么使用的
② nodejs读取pdf并翻转内容保存pdf
nodejs读取pdf并翻转内容保存pdf需以下几个步骤。
1、启动windows命令行工具(windows下启巧坦动系统搜索功能,输入cmd回车就出来了)。穗没
2、查看环境变量是否已经自动配置,在命令行工具中输入node-v,如果出现v10字段,则说明成功安装Node.js。
3、在第三步发现输入node-v还是没有出现对应的字段,那么重启电脑即可。
4、打开本项目文件夹,打开命令行工具(孝族桐windows系统中直接在文件的url地址栏输入cmd就可以打开了),输入npmicnpmnodemon-g。
5、下载puppeteer爬虫包,在完成第五步后,使用cnpmipuppeteer--save命令下载。
6、完成第六步下载后,打开本项目的url.js,将您需要爬虫爬取的网页地址替换上去。
7、在命令行中输入nodemonindex.js即可爬取对应的内容,并且自动输出到当前文件夹下面的index.pdf文件中。
③ 如何创建pdf的buffer,让pdf.js实现预览pdf文件
PDF.js 是基于开放的 HTML5 及 JavaScript 技术实现的开源产品。简单说就是一个 PDF 解析器。运用HTML5JavaScript(即pdf.js仅使用安全的web语言,不包含任何攻击者可以用的本地代码块)的PDF阅读器pdf.js,直接在标准的HTML页面上载入和渲染PDF文件, 还可以提高安全性(不需要安装第三方插件,安全性由浏览器保证),浏览器所做的安全措施已经为pdf.js提供了安全的运行环境。其对IE和 FireFox浏览器的要求是IE9+, FireFox19+。
在线示例: http://jsbin.com/pdfjs-helloworld-v2/1/edit , http://jsbin.com/pdfjs-prevnext-v2/1/edit
源码:https://github.com/mozilla/pdf.js
官网:http://mozilla.github.io/pdf.js/
pdf.js VS 传统浏览器读取pdf
一般来说,PDF档案格式都是在浏览器中由外挂程式来描绘,通常是Adobe自己的PDF reader或来自其他供应商的描绘工具,但这些外挂通常无法充分运用PDF的特点,而且由于含有大量的受信任代码,使得Google Chrome浏览器必须运用SandBox沙箱原理,来检查PDF描绘工具是否遭到未知病毒感染。
使用adobe,必须在本地安装软件才能使用,而pdf.js不依赖环境、渲染速度快(测试过,确实很快)、安全性高。
pdf.js渲染PDF文件
pdf.js渲染PDF文件的流程:Fetch pdf (url / buffer) ——> canvas ——> 渲染
如果要深入pdf的渲染,需要去研究pdf.js源代码。pdf.js可通过pdf文件的地址或pdf数据流获取pdf,具体实现是调用接口函数 PDFJs.getDoc(url/buffer)将pdf载入html,通过canvas处理, 然后渲染pdf文件。网上给出的都是通过url来获取pdf的例子,而我在做项目的时候,后台(python)要求是发pdf的数据流给前台,前台接收pdf的buffer,然后通过pdf.js来渲染。当然最初尝试buffer出现了很多问题,具体问题总结如下:
1)如何通过$.ajax接收后台发给前台的buffer数据;
2)如何将buffer传给pdf.js来处理(这里我使用了viewer.js, 所以需要考虑的是如何将buffer传给viewer.js来处理);
3)如何将pdf.js转换成pdf.js可以接收的buffer格式;
(对应问题解决见代码注释)
注:viewer.js是pdf.js的扩展,其将打印、翻页、缩放等功能进行了实现,且界面非常好看。也就是说如果你引入了viewer.js,pdf的渲染和渲染之后的功能界面都已经帮你实现了,你不用自己去写界面。
先从官网:http://mozilla.github.io/pdf.js/ 下载代码,然后使用文件viewer.html , 我的html就是在viewer.html 的基础上修改的,下面我给出buffer的例子:
<!DOCTYPE html>
<html dir="ltr" mozdisallowselectionprint moznomarginboxes>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="google" content="notranslate">
<title>在线预览</title>
{% load static %}{% get_static_prefix as STATIC_URL %}
<link href="{{STATIC_URL}}css/preview.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" href="{{STATIC_URL}}pdfjs/web/viewer.css"/>
<script type="text/javascript" src="{{STATIC_URL}}pdfjs/web/compatibility.js"></script>
<link rel="resource" type="application/l10n" href="{{STATIC_URL}}pdfjs/web/locale/locale.properties"/>
<script type="text/javascript" src="{{STATIC_URL}}pdfjs/web/l10n.js"></script>
<script type="text/javascript" src="{{STATIC_URL}}pdfjs/build/pdf.js"></script>
<script type="text/javascript" src="{{STATIC_URL}}pdfjs/web/debugger.js"></script>
<script src="{{STATIC_URL}}js/jquery-1.8.3.js" type="text/javascript"></script>
<script type="text/javascript">
//convertDataURIToBinary()
//不知道什么原因如果后台直接将pdf的数据流发给前台,得到的是乱码,将数据转换成 Uint8Array始终不成功
//所以就让后台将发送之前的数据流做 了base64编码发给前台,前台再解码得到的数据就不是乱码了。
var BASE64_MARKER = ';base64,';
var preFileId = {{mark}};
//viewer.js全局变量,传入buffer,回答问题2
var DEFAULT_URL
$(document).ready(function(){
$.ajax({
type:"post",
async: false,
//ajax接收pdf数据流,注意dataType值的设置是否有错,如果不指定,jQuery将自动根据HTTP包MIME信息返回
//responseXML或responseText . 回答问题1
contentType:"application/pdf;charset=utf-8",
url:"{% url netPan.File.views.browserFuf%}",
data:{
id: preFileId
},
success:function(data){
var pdfAsDataUri = data;
//如果引入了viewer.js , 处理方法
var pdfAsArray = convertDataURIToBinary(pdfAsDataUri);
DEFAULT_URL = pdfAsArray;
// 只引入了pdf.js, 未引入viewer.js, 处理方法
// var pdfAsArray = convertDataURIToBinary(pdfAsDataUri);
// PDFJS.getDocument(pdfAsArray).then(); 自己写pdf的处理函数
}
});
});
function convertDataURIToBinary(dataURI) { //编码转换,回答问题3
var base64Index = dataURI.indexOf(BASE64_MARKER) + BASE64_MARKER.length;
var base64 = dataURI.substring(base64Index);
var raw = window.atob(base64);
var rawLength = raw.length;
//转换成pdf.js能直接解析的Uint8Array类型,见pdf.js-4068
var array = new Uint8Array(new ArrayBuffer(rawLength));
for(i = 0; i < rawLength; i++) {
array[i] = raw.charCodeAt(i);
}
return array;
}
</script>
<!--先设置全局变量DEFAULT_URL 的值,所以要后调入viewer.js -->
<script type="text/javascript" src="{{STATIC_URL}}pdfjs/web/viewer.js"></script>
</head>
<body>
省略内容
</body>
</html>
④ jsPDF.js插件,微信端下载不了,有没有大神有解决办法
问题:转换后,能生成一个PDF文件,在浏览器上能正常解析出来,但是使用Adobe的阅读器时,提示读取文档出现问题,文档解析不成功。
⑤ pdfh5.js不显示pdf水印
水印设置了透明度。pdf是由Adobe Systems用于与应用程序、操作系统、硬件无关的方式进行文件交换所发展出的文件格式。不显示水印是因为设置了透明度。解决方法:
1、首先在电脑上安装好梁源纤PDF编辑器后,鼠裂清标右键点击要编辑的PDF文件,在打开方式中选择使用PDF编辑器打开。
2、其次在菜单栏中,依次点击“文档”-“水印”-“管理”,编辑水印,在“管理水印”对话框中,选择需要编辑的水印,点击“编辑”。
3、最后在弹出的“编辑水印橡仿”对话框中,可以在外观选项中设置PDF水印的透明度,在页面范围选项中设置好使用范围,点击“确定”即可。