PHP+JS实现PC端+移动端PDF手写签名合并

1年前

阅读 3029

评论 0

喜欢 0

前端插件:`jSignature.js`

PHP插件:`FPDF+FPDI`

`index.html`代码:

```html

测试PDF手写签名

html,body{padding: 0;margin: 0;width: 414px;overflow: hidden}

input {

padding: .5em;

margin: .5em;

}

select {

padding: .5em;

margin: .5em;

}

#signatureparent {

color:#000;

padding:20px;

}

/*This is the div within which the signature canvas is fitted*/

#signature {

border: 1px solid #eee;

background-color:#fff;

}

/* Drawing the 'gripper' for touch-enabled devices */

html.touch #content {

float:left;

width:92%;

}

html.touch #scrollgrabber {

float:right;

width:4%;

margin-right:2%;

background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAFCAAAAACh79lDAAAAAXNSR0IArs4c6QAAABJJREFUCB1jmMmQxjCT4T/DfwAPLgOXlrt3IwAAAABJRU5ErkJggg==)

}

html.borderradius #scrollgrabber {

border-radius: 1em;

}

请在此手签自己的签名

同意签授

jQuery.noConflict()

(function($){

$(document).ready(function() {

var $sigdiv = $("#signature").jSignature({'UndoButton':true})

, $extraarea = $('#displayarea')

, pubsubprefix = 'jSignature.demo.'

// 提交给后端保存

$('#check').bind('click', function(e){

var base64 = $("#signature").jSignature("getData");

$.ajax({

type: 'post',

data:{'base64':base64},

url: "php/savePdf.php",

success: function(data) {

//var array = eval('('+data+')');

alert(data);

}

});

});

})

})(jQuery)

```

`savePdf.php`代码:

```php

error_reporting (E_ALL);

$root = dirname(dirname(__FILE__));

require_once($root.'/vendor/fpdf/fpdf.php');

require_once($root.'/vendor/fpdi/fpdi.php');

require_once($root.'/vendor/function.php');

# 1、保存图片

$path = $root.'/public/data/';

$img = $_POST['base64'];// 前端将图片转base64传递过来的参数

$img = str_replace('data:image/png;base64,', '', $img);// 得将头信息删除掉

$img = str_replace(' ', '+', $img);// 再把空替换成+号

$data = base64_decode($img);// 执行base64序列号

# 生成唯一文件名

$file_name = uniqid().'.png';

$img_path = $path.'img/'.$file_name;

# 保存到本地

$success = file_put_contents($img_path, $data);

# 2、圖片太大了等比例縮放

zipImg($img_path);

# 3、PDF合并图片成新的PDF

$file = $path.'pdf/';

$pdf_file = $root.'/public/pdf/test.pdf';

$pdf = new FPDI();

$pageCount = $pdf->setSourceFile($pdf_file);

for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++)

{

$templateId = $pdf->importPage($pageNo);

$size = $pdf->getTemplateSize($templateId);

if ($size['w'] > $size['h']) $pdf->AddPage('L', array($size['w'], $size['h']));

else $pdf->AddPage('P', array($size['w'], $size['h']));

$pdf->useTemplate($templateId);

if($pageNo==$pageCount){

// 00表示原尺寸寫入

$pdf->Image($img_path, 70, 250, 0, 0);

}

}

$pdf->Output($file.time().'.pdf', 'F');

```

源码下载地址:[点击下载](https://blog.junphp.com/github/PHP实现PDF手签.zip "点击下载")

© 著作权归作者所有

php手写签名保存,PHP+JS实现PC端+移动端PDF手写签名合并相关推荐

  1. 天刀论剑显示服务器,天涯明月刀手游论剑机制大改革 论剑pc与移动端分开匹配...

    2月25日,即元宵节前夕,天涯明月刀手游迎来了元宵节版本更新,涉及竞技.玩法.节日活动以及商城外观等海量内容,都已在凌晨更新维护完成后,上线正式服. 公告显示,在新版本更新完成后,玩家登录游戏,还可领 ...

  2. 小手一敲,让JS Map现原形

    一.前言 文章主要讲JS Map对象的用法和如何手写Map,非常适合初步学习了JS的同学,适当的学会手写JS源码的技能,对JS理解和面试都有很大的帮助.大多数人都知道Map方法的使用,但是在网上对Ma ...

  3. node.js服务端笔记文档学会写接口,学习分类:path、包、模块化、fs、express、中间件、jwt、开发模式、cors。

    node.js 学习笔记 node.js服务端笔记文档学会写接口,path.包.模块化.fs.express.中间件.JWT.开发模式.cors. gitee:代码接口笔记 1什么是node.js n ...

  4. 【瑞数】维普期刊JS逆向4000字详细流程_1_获取接口签名

    文章目录 前言 过debugger 定时器debugger 死循环debugger 分析搜索接口 签名在何处生成? 中场休息 签名代码来源分析 签名代码在何处加载到内存? 注入代码 设置签名为全局变量 ...

  5. php滑动拼图验证,JS实现PC手机端和嵌入式滑动拼图验证码三种效果

    PC和手机端网站滑动拼图验证码效果源码,同时包涵了弹出式Demo,使用ajax形式提交二次验证码所需的验证结果值,嵌入式Demo,使用表单形式提交二次验证所需的验证结果值,移动端手动实现弹出式Demo ...

  6. Eclipse保存验证JS缓慢

    EclipseSave保存js文件的时候验证JS的时间很长( 使用extjs).Eclipse – Validation – JavaScript Validator 的 Manual和Build都没 ...

  7. 手写公式识别 :基于深度学习的端到端方法

    本文简要介绍2018年5月被TMM录用论文"Track,Attend and Parse (TAP): An End-to-end Framework for Online Handwrit ...

  8. php 手机端播放器,用JS代码适配电脑端和手机端播放器代码

    用JS代码适配电脑端和手机端播放器代码 蓝叶    网站设计    2016-08-10    10668    9评论 随着html5的崛起,很多网站都采用html5代码来设计,让网站美观大气,但是 ...

  9. php 鼠标 移动 手型,JS实现的鼠标跟随代码(卡通手型点击效果)

    这篇文章主要介绍了JS实现的鼠标跟随代码,带有卡通手型点击效果.涉及JavaScript鼠标事件的响应与页面元素的动态调用技巧,需要的朋友可以参考下,具体如下: 一个跟随鼠标的小手效果,鼠标移在哪里, ...

最新文章

  1. vs2010配置python_VS2010下python3的配置
  2. Redisson 管道批量发送命令流程分析
  3. SSH框架整合遇到的错误——org.springframework.beans.NotWritablePropertyException:
  4. The hierarchy of the type UserOperateLogAdvisor is inconsistent
  5. x3-02 java_Day13 -- Java流程控制02
  6. vue可编辑div_Vue实现MakeDown编辑器
  7. rocketmq4.x快速入门指南
  8. python求小于n的所有素数_关于求N以内素数的python实现以及优化方法
  9. spring相关记录
  10. 【超级鼠标键盘锁】之HOOK钩子屏蔽鼠标和Ctrl+Alt+Del、Win+L之外的按键
  11. win10用android手柄游戏手柄,win10系统使用游戏手柄的步骤
  12. 一个在线文字转语音工具
  13. 【上班摸鱼系列】文字选择类游戏:《职员默示录 - 启》末日丧尸爆发,你,是什么下场!?
  14. 汉语拼音分音节的程序
  15. java简述什么是事务_java什么是事务意思概念
  16. 【渝粤教育】国家开放大学2018年秋季 1318T社会统计学 参考试题
  17. Express 报错:Failed to lookup view error in views directory 处理
  18. 学习笔记:C++进阶【继承、多态、二叉树进阶、map和set、哈希、C++11、异常、智能指针、特殊类设计、C++的类型转换】
  19. java实现“两数之和”
  20. 论文数据获取工具——WebPlotDigitizer

热门文章

  1. 搭建BI平台之前的准备工作
  2. 圆满收官!2022 秋招总结与建议
  3. 机器视觉 | 光源照明综述(详细版)
  4. 数字图像处理基础(冈萨雷斯)一
  5. 细胞穿透肽八精氨酸、 H2N-RRRRRRRR-OH、 148796-86-5
  6. DBMS_REPAIR
  7. C++是什么?怎么学?
  8. 前端面试题库 面试题 JS难题,做对一半就是高手
  9. 知识回顾:什么是封装?封装的作用?如何封装?
  10. Android程序员的春天!Android项目开发如何设计整体架构?太香了