php 生成打印送货单,PHP输出PDF打印HTML5+CSS3打印格式控制

ERP系统进入尾声,各种送货单、退货单、合同、对账单等等一系列的东东排着队调打印格式。HTML5+CSS3已经这样流行,然则眼下,基于CSS3的打印控制,居然还处于原始部落阶段,Chrome、Firefox、Edge等连简单的@page都支持得不完善。经过一番折腾,终于找到好的解决方案,即借道输出PDF,先让PHP抓取目标的HTML代码,然后输出到指定解析器,生成PDF内容,最终打印。

实际上,这个模式里:

1. HTML5+CSS3,只是输出内容的调节环节,需要确保CSS3 @page的全特性支持无误。尤其是长文章(合同)分页,和长表格自动分页(最好是thead和tfoot能分页重复显示)。

2. PDF预览时,实际上就是打印前的排版预览,之后就直接输出打印即可。

3. PDF可供用户自行下载成本地文件做备份。

4. HTML内容(PDF内容),可以通过缓存类库进行缓存,自己调控周期、压缩存储即可。

于是打印问题迎刃而解。

本文推荐两个可用的类库:Prince和wkhtmltopdf。这两位都是跨平台系统支持,并且不需要内嵌于php,不需要有任何担心。

这两货都需要在官网下载安装,如果是windows,记得安装的时候别放在C盘,不然会无法执行。

php调用:

Prince:下载他官方的这个类库:Prince for php。顺带说,Prince的类库里支持.net、Java、Python、Prel等等。

Snappy:这个是国外某开发者基于wkhtmltopdf的php composer扩展,直接在你项目中执行:composer require knplabs/knp-snappy,即可。Snappy github地址。

Prince和wkhtmltopdf,实际上就是一个html5+css3的解析器,并且是完整支持css3 @page部分的打印特性的功能。并且具备生成PDF的功能。其中Prince是收费的,但他提供免费使用License,美中不足的地方就是生成PDF预览时,第一页右上角会有一个P字的icon,不过在打印的时候就会消失掉。

两者比较,Prince对中文样式的支持更好(可能wkhtmltopdf是因为我的CSS写法有问题,没有针对@media print),修改中文字体,wkhtmltopdf还是会用默认的宋体输出,而Prince则是你指定的字体。

两者的调用代码都很简单。

Prince部分:

require '../bootstrap.php';

$prince = new \xErp\Helper\Prince('D:\\prince\\prince-10r7-win64\\bin\\prince.exe');

header('Content-Type: application/pdf');

header('Content-Disposition: inline; filename="foo.pdf"');

$prince->convert_file_to_passthru('http://www.163.com');

Snappy部分:

require '../bootstrap.php';

use Knp\Snappy\Pdf;

$snappy = new Pdf('D:\xampp\wkhtmltopdf\bin\\wkhtmltopdf.exe');

header('Content-Type: application/pdf');

//header('Content-Disposition: attachment; filename="file.pdf"');

print $snappy->getOutput('http://www.163.com');

就是这样酸爽,再也不用怕客户改打印格式了,随便改吧,亲。

无图无真相,来个截图

a21fdfa1500b8464c5aa3c5a77990f14.png

好像这样的页面,实际上是基于HTML生成的,调试只需调试HTML+CSS即可,截图如下:

154700cb96f5ed7d91d4042e51349929.png

用HTML+CSS调打印,基本上一个格式,最多不超过1个小时,基本上就能调完。这样后期,管你有多少分报表,我统一用http://erp/print/报名类型/报表ID.ext的url,.html就是请求普通的html输出,.pdf就是请求将html输出pdf,真是要多快有多快啊!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550808.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

备案php代码,备案查询API PHP代码

在线演示http://tool.ayangw.com/beian/?urlqq.com使用方法1.创建一个php文件&#xff0c;比如beian.php&#xff0c;将下方代码复制2.访问接口域名/beian.php?urlqq.comPHP代码<?php /*** 0en.cn*/error_reporting(0);$u $_GET[url];var_dump();if(!isset($u)){echo ?…

php转盘中奖率,PHP大转盘中奖概率算法实例_PHP

本文实例讲述了PHP大转盘中奖概率算法的实现方法&#xff0c;分享给大家供大家参考。具体如下&#xff1a;大转盘是最近很多线上网动中一个比较有意思的东西了&#xff0c;下面我们就来看看这个大转盘中奖概率算法与例子&#xff0c;希望对各位有所帮助。这是一个APP客户端有大…

php 发送delete请求,PHP中使用CURL实现GET、POST、PUT、DELETE请求

/*** param $url* param $data* param string $method* param string $type* return bool|string*/function curlData($url,$data,$method GET,$typejson){//初始化$ch curl_init();$headers [form-data > [Content-Type: multipart/form-data],json > [Content-Type:…

帝国cms php替换,帝国CMS内容关键字替换图片标签解决方法

1、在 e/class/userfun.php 里面增加//替换正文IMG里的ALT内容functionuser_imgalt($mid,$f,$isadd,$isq,$value,$cs){$title$_POST[title];$htmls$value;$pattern "/]>/";preg_match_all($pattern, $htmls, $matches);for($i0; $i<count($matches[0]); $i) {p…

同时运行两个PHP吗,PHP-避免由两个工作人员同时运行后台作业

我有一个守护程序,运行我们的Web服务请求的后台作业.我们有4个工人同时运行.有时,一个作业同时执行两次,因为两个工人决定运行该作业.为了避免这种情况,我们尝试了几件事&#xff1a;>因为我们的工作来自数据库,所以我们添加了一个称为execute的标志,该标志防止其他工作获得…

php类的举例,用类来代替递归方法,用php举例_php _ 搞代码

问题&#xff1a;一个楼梯有n个台阶&#xff0c;每次上一个或两个台阶&#xff0c;共有多少种上法, 每种走法的步骤是什么样的&#xff1f;这个简单问题&#xff0c;我们通常的方法是写一个递归调用&#xff0c;简单明了。但是&#xff0c;这里通过类的叠加来实现&#xff0c;虽…

mysql创建多实例,mysql 单服务器创建多实例

mysql单服务器启动多个实例实际有两种方式第一种方式就是使用mysql mysqld_multi第二种方式就是分别使用不同的目录端口启动不同的实例第一种方式&#xff1a;1、数据库实例目录data3306data3307data33082、创建实例/usr/local/mysql//scripts/mysql_install_db –basedir/usr…

matlab st变换,ST转换(matlab代码)

【实例简介】【实例截图】【核心代码】samplingrate 0.00005;[s,t,f]st(amplitude,0,0.5/samplingrate,samplingrate,1);Tmax(t);subplot(3,1,1),plot(t,amplitude,color,k,linewidth,1)xlabel(时间/s);ylabel(幅值/V);xlim([0 T]);% title(微震波形,FontName,Times New Roman…

easyexcel安全扫描报php,easyExcel使用以及踩过的坑

easyExcel介绍:Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存&#xff0c;poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题&#xff0c;但POI还是有一些缺陷&#xff0c;比如07版Excel解压缩以及解压后存储都是…

python selenium下载,在python中通过Selenium Webdriver下载文件

在使用新的FirefoxProfile时&#xff0c;使用set_preference方法来配置配置文件&#xff0c;这样就可以单击Save和{}&#xff0c;并且在下载过程中不会被中断。您可以按如下方式设置配置&#xff1a;profile webdriver.FirefoxProfile()profile.set_preference("browser.…

用python做人脸识别的程序怎么做,10分钟学会使用python实现人脸识别(附源码)

前言今天&#xff0c;我们用Python实现简单的人脸识别技术&#xff01;Python里&#xff0c;简单的人脸识别有很多种方法可以实现&#xff0c;依赖于python胶水语言的特性&#xff0c;我们通过调用包可以快速准确的达成这一目的。这里介绍的是准确性比较高的一种。一、首先梳理…

matlab是那个国家,这是一个老外写的利用曲率来识别硬币的MATLAB程序。作者所在国家的硬币偏黄色,拍摄的时候反光比较少...

这是一个老外写的利用曲率来识别硬币的MATLAB程序。作者所在国家的硬币偏黄色&#xff0c;拍摄的时候反光比较少2016-08-22 0 0 0 暂无评分其他1积分下载如何获取积分&#xff1f;这是一个老外写的利用曲率来识别硬币的MATLAB程序。作者所在国家的硬币偏黄色&#xff0c;拍摄的…

oracle中12523,【Oracle】静态监听导致的ORA-12523错误

今天配置完共享服务器模式之后发现登录过程中报错ORA-12523&#xff0c;排查错误之后发现是静态监听惹的祸。本机之上有两个监听&#xff0c;一个静态监今天配置完共享服务器模式之后发现登录过程中报错ORA-12523&#xff0c;排查错误之后发现是静态监听惹的祸。本机之上有两个…

线性回归中oracle性质,66.Oracle数据库SQL开发之 高级查询——使用线性回归函数...

66.Oracle数据库SQL开发之 高级查询——使用线性回归函数线性回归函数可以用普通最小平方回归曲线拟合一组数值对。线性回归函数可用于聚合、串口或报表函数。如下图1&#xff1a;例如&#xff1a;storePDB1> selectprd_type_id,regr_avgx(amount,month) as avgx,regr_avgy(…

angularjs php 实例下载,AngularJS Eclipse 1.2.0 插件下载

【实例简介】AngularJS Eclipse 插件为Eclipse提供对AngularJS的支持【实例截图】【核心代码】org.eclipse.angularjs.category-1.2.0├── artifacts.jar├── content.jar├── features│ ├── angularjs-eclipse-feature.source_1.2.0.201606160950.jar│ ├── …

oracle asm磁盘回收步骤,【翻译自mos文章】回收 asm磁盘空间的方法

回收 asm磁盘空间的方法参考原文&#xff1a;How To Reclaim Asm Disk Space? (Doc ID 351866.1)适用于&#xff1a;Oracle Database - Enterprise Edition - Version 10.2.0.1 and laterInformation in this document applies to any platform.***Checked for relevance on 1…

Oracle 4dae,如何处理Python-CXOracle中未知词的错误报告问题,pythoncxOracle,查询,到,生僻字,报错...

关于编码GBK编码是GB2312编码的超集&#xff0c;向下完全兼容GB2312&#xff0c;同时GBK收录了Unicode基本多文种平面中的所有CJK汉字。GB18030编码向下兼容GBK和GB2312&#xff0c;兼容的含义是不仅字符兼容&#xff0c;而且相同字符的编码也相同。GB18030收录了所有Unicode3.…

impala写入oracle,dataframe 写入 impala 语法错误,怎么解决?

dataframe写入impala出现语法错误&#xff0c;错误&#xff1a;Exception in thread "main" java.sql.SQLException: [Simba]ImpalaJDBCDriver ERROR processing query/statement. Error Code: 0, SQL state: TStatus(statusCode:ERROR_STATUS, sqlState:HY000, erro…

php windows 64下载地址,VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器教程&#xff1a;其它版本推荐&#xff1a;vscode简介&#xff1a;vscode是一个运行于 Mac OS X、Windows和 Linux 之上的&#xff0c;针对于编写现代 Web 和云应用的跨平台源代码编辑器。该编辑器也集成了所有一款现代编辑器所应该具备…

linux 源码目录结构,分析Android 源代码编译前后的目录结构

我们看没有编译前的项目目录大致的情况如下 &#xff1a;在树结构中我们可以了解的有如下一些信息分析&#xff1a;1. getSplashy 项目名称&#xff1b;2. src 项目程式&#xff1b;3. com 早…