laravel使用snappy生成pdf问题及过程(本地环境)
1.安装过程可以按照这里进行https://packagist.org/packages/barryvdh/laravel-snappy
其中要按装好
),如下:
1.检查是否安装了wkhtmltopdf 2.若安装,检查是否配置了path的环境变量。可通过cmd输入 wkhtmltopdf -V 来尝试。 3.若环境变量以配置,测试下wkhtmltopdf是否能正常使用。可在cmd命令中输入 wkhtmltopdf www.baidu.com aaaaaa.pdf 点击回车,cmd面板会显示生成100%并且success,可以在user目录下搜索aaaaaa.pdf,看是否存在。注意这里命令的第二个是网址,页可以指定html文件,第三个是要生成的pdf名字,不要写路径,有时候路径会生成失败。 4.若以上都没有问题,那么存在一个非常恶心的清空,就是IDEA检测不到wkhtmltopdf的环境变量。可以在IDEA的Terminal中输入 wkhtmltopdf -V 命令来检查是否检测到了环境变量。若是没有那么就需要修改代码了。 核心代码如下: String jsonData = JsonUtil.toJson(data);
String htmlStr = ResourceUtil.getResourceAsString("/import/import_preview_tpl.html");
htmlStr = htmlStr.replace("@{cdn}", mediaServer);
htmlStr = htmlStr.replace("@{data}", jsonData);
String htmlPath = FileUtil.randomTempFilePath(".html");
FileUtil.createStringFile(htmlPath, htmlStr); // generate pdf
String pdfPath = FileUtil.randomTempFilePath(".pdf");
List<String> cmd = new ArrayList<>();
cmd.add("D:\\wkhtmltopdf\\bin\\wkhtmltopdf");//注意这里要指定自己的安装目录了
cmd.add("-s");
cmd.add("letter");
cmd.add("-T");
cmd.add("0");
cmd.add("-B");
cmd.add("0");
cmd.add("-L");
cmd.add("0");
cmd.add("-R");
cmd.add("0");
cmd.add(htmlPath);
cmd.add(pdfPath);
CmdUtil.executeCmd(cmd);
CmdUtil中的executeCmd方法: public static void executeCmd(List<String> cmd) {
try {
ProcessBuilder pb = new ProcessBuilder(cmd);
pb.redirectErrorStream(true);
Process process = pb.start();
BufferedReader errStreamReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = errStreamReader.readLine();
while (line != null) {
logger.info(line);
line = errStreamReader.readLine();
}
process.waitFor();
} catch (IOException e) {
throw new LearningGenieRuntimeException("Execute cmd failed.", e);
} catch (InterruptedException e) {
throw new LearningGenieRuntimeException("Execute cmd failed.", e);
}
}
2.问题一,The exit status code '1' says something went wrong:\nstderr:
wkhtmltopdf -V //允许该程序执行之后再执行下面清楚缓存
)
php artisan view:clear
php artisan route:clear
php artisan cache:clear
php artisan config:clear
之后再重新生成pdf就可以了
malformed utf-8 characters, possibly incorrectly encoded
电脑的语言设置问题:https://blog.csdn.net/qq_36025814/article/details/103439186
printItem(item){
webServices.get('/packaged',{responseType:'arraybuffer'}) //responseType: `arraybuffer` //一定要写
.then(res => {
if (res.status == "200") {
let pdfUrl = window.URL.createObjectURL(new Blob([res.data], { type: `application/pdf` }));//word文档为msword,pdf文档为pdf
let fname = 'Invoice'; // 下载文件的名字
const link = document.createElement('a'); //创建一个a标签
link.href = pdfUrl;
link.setAttribute('download', fname);
document.body.appendChild(link);
link.click(); //自动下载下载
// console.log(res.data)
}
})
}
这是新建的blade视图,即生成pdf的内容(pdf.blade.php)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<table class="table table-striped">
<tr>
<th>Row No.</th>
<th>Entry ID</th>
<th>DC</th>
<th>Customer Name</th>
<th>ID No.</th>
<th>Referance No.</th>
<th>Entry Purpose</th>
<th>Time In</th>
<th>Time Out</th>
<th>Card No.</th>
<th>Cabinets</th>
<th>APC Card</th>
<th>Key</th>
</tr>
@foreach ($assignees as $assignee)
<tr>
<td>{{ ++$i }}</td>
<td>{{ $assignee->id }}</td>
<td>{{ $assignee->datacenter }}</td>
<td>{{ $assignee->cust->idnumber }}</td>
<td>{{ $assignee->custidno}}</td>
<td>{{ $assignee->refnumber }}</td>
<td>{{ $assignee->entrypurpose}}</td>
<td>{{ $assignee->timein }}</td>
<td>{{ $assignee->timeout }}</td>
<td>{{ $assignee->cardno }}</td>
<td>{{ $assignee->cabinet }}</td>
<td>{{ $assignee->apccard }}</td>
<td>{{ $assignee->key }}</td>
</tr>
@endforeach </table>
<div class="pull-right">
<strong> Report Generated on {{ date("d.m.Y") }} at {{date("h:i:sa")}} </strong>
</body>
</html>
后端:
use Barryvdh\Snappy\Facades\SnappyPdf as PDF;
$pdf = PDF::loadView('pdf',$data); //$data是pdf需要的一些数据值,即传递到pdf的变量
return $pdf->setPaper('a4')->download('test.pdf'); //download可以在前端浏览器下载,save可以保存到磁盘,默认路径是public文件夹中,使用stream()方法显示在浏览器中
//使用save()的时候,在windows环境保存到具体位置时就没有保存到,但是在网上查时说linux可以,
//在windows想保存到具体位置可以这样
$pdf = PDF::loadView('pdf.invoice', $data); Storage::put('public/pdf/invoice.pdf', $pdf->output()); //$pdf->output()为pdf文件流public/pdf/invoice.pdf具体路径
return $pdf->download('invoice.pdf');
laravel使用snappy生成pdf问题及过程(本地环境)的更多相关文章
- java生成PDF,并下载到本地
1.首先要写一个PDF工具类,以及相关工具 2.PDF所需jar包 iText是一种生成PDF报表的Java组件 freemarker是基于模板来生成文本输出 <dependency> & ...
- linux下编译bib、tex生成pdf文件
实验: 在linux环境下,编译(英文)*.bib和*.tex文件,生成pdf文件. 环境: fedora 20(uname -a : Linux localhost.localdomain 3.19 ...
- 生成 PDF 全攻略【1】初体验
经历过多少踩坑,翻看过多少类似博客,下载过多少版本的Jar,才能摸索出正确的代码书写方式,才能实现项目经理需求分析书中的功能点. 本文借一次 JavaEE 生成PDF的颠簸的实现过程,描述中小公司程序 ...
- Django中生成PDF(一)
Django中生成PDF(一) 需求描述: 某网站与其用户达成一致的协议,每份协议中都有用户相关的独特信息,且还需要生成PDF并存档.PDF文件中需要有企业LOGO.文字描述等信息.其展现形式 ...
- 利用ItextPdf、core-renderer-R8 来生成PDF
近期因为工作上的须要,须要做一个简历产品的下载功能,而下载的形式要去为PDF,内容要求为整个简历的内容,并且格式上要求和简历的格式排版时一致的!前期调研.开发,最后測试上线.差点儿相同花了7天的时间. ...
- wkhtmltopdf 生成pdf
public class PdfHelper { static string RootPath { get { string AppPath = ""; HttpContext H ...
- 【原创】岁月如歌 一款网易歌单生成pdf的软件
介绍 这是一款可以将网易云音乐的歌单中所有歌词输出为pdf的软件. 项目持续维护地址 http://brightguo.com/song-list-to-pdf/ 目前没有搜到相关网易歌单导出为pdf ...
- 根据PDF模板生成PDF文件(基于iTextSharp)
根据PDF模板生成PDF文件,这里主要借助iTextSharp工具来完成.场景是这样的,假如要做一个电子协议,用过通过在线填写表单数据,然后系统根据用户填写的数据,生成电子档的协议.原理很简单,但是每 ...
- laravel中使用的PDF扩展包——laravel-dompdf和laravel-snappy
这两天项目中需要将HTML页面转换为PDF文件方便打印,我在网上搜了很多资料.先后尝试了laravel-dompdf和laravel-snappy两种扩展包,个人感觉laravel-snappy比较好 ...
随机推荐
- 这届 Showgirl行不行?AI告诉你谁是ChinaJoy上最漂亮的小姐姐
摘要: CJ开幕,顶着三伏天的酷暑高温,暴走一整天,就为了拍点漂亮小姐姐给大家看看. 一年一度的游戏视觉盛宴又来了! 作为一个游戏动漫控的肥宅,去CJ现场是必须的.除了看看游戏和动漫,各大游戏展台漂亮 ...
- Python机器学习——预测分析核心算法PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书
点击获取提取码:7qi1 在学习和研究机器学习的时候,面临令人眼花缭乱的算法,机器学习新手往往会不知所措.本书从算法和Python语言实现的角度,帮助读者认识机器学习. 本书专注于两类核心的" ...
- hashMap在jdk1.7与jdk1.8中的原理及不同
在分析jdk1.7中HashMap的hash冲突时,不知大家是否有个疑问就是万一发生碰撞的节点非常多怎么版?如果说成百上千个节点在hash时发生碰撞,存储一个链表中,那么如果要查找其中一个节点,那就不 ...
- python1.1列表知识点:
#定义列表[]a=[1,2,3,4,5,6,7,"hello","world"]#列表索引从0开始,指定位置提取元素print(a[3])print(a) #列 ...
- java_List、Set、Conllections工具类
List接口 java.util.List 接口继承自 Collection 接口 List接口特点: 它是一个元素存取有序的集合.例如,存元素的顺序是11.22.33.那么集合中,元素的存储就是按照 ...
- SpringBoot常用配置,引入外部配置文件信息,热加载
SpringBoot的配置文件格式 yml规范 SpringBoot的配置文件支持properties和yml,甚至还支持json. 更推荐使用yml文件格式: yml文件,会根据换行和缩进帮助咱们管 ...
- 面试官:怎么做JDK8的垃圾收集器的调优?
面试官:怎么做JDK8的垃圾收集器的调优? 看着面试官真诚的眼神,心中暗想看起来年纪轻轻却提出如此直击灵魂的问题.擦了擦额头上汗,我稍微调整了一下紧张的情绪,对面试官说: 在JDK8中有Serial收 ...
- python设计模式之模板模式
python设计模式之模板模式 编写优秀代码的一个要素是避免冗余.在面向对象编程中,方法和函数是我们用来避免编写冗余代码的重要工具. 现实中,我们没法始终写出100%通用的代码.许多算法都有一些(但并 ...
- 图论算法(五)最小生成树Prim算法
最小生成树\(Prim\)算法 我们通常求最小生成树有两种常见的算法--\(Prim\)和\(Kruskal\)算法,今天先总结最小生成树概念和比较简单的\(Prim\)算法 Part 1:最小生成树 ...
- 【期外】(三)Linux下集成开发环境Geany
今天小编发现了一个很好的软件,它的名字就叫做Geany. 这是Linux系统中的开发工具,相当的好用. Linux与windows最大的不同正是不是集成开发环境,所以写起代码来总是用文档写好后,然后再 ...