PHP 使用html创建PDF并设置水印

news2024/11/14 8:36:32

使用TCPDF库给PDF文件加水印,需要注意无法直接使用文本,需要创建水印图片后,通过图片来设置水印效果。

 

目录

创建PDF

创建合同模板

创建pdf文件

简单创建

设置文档信息

去掉默认页头脚

设置间距

设置字体支持中文

设置图片比例因子

设置自动分页

写入内容(插入图片使用)

设置水印

简单水印

每页水印

获取总页数

循环设置水印

旋转水印

总结


创建PDF

创建合同模板

创建使用制作pdf文档的html合同模板。

注意:css部分样式pdf不支持,比如浮动、悬浮等,只支持一些基本的样式设置。

内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>购销合同</title>
</head>
<body>
<div class="content">
    <h3 align="center">购销合同</h3>
    <p>(供方)(以下简称乙方):</p>
    <p>经协商同意,根据中华人民共和国经济法的规定,订立合同如下:</p>
    <p>一、 产品名称、商标、型号、厂家、数量、价格、供货时间:</p>
    <p>二、 质量要求技术标准、供方对质量负责的条件和期限:按技术协议</p>
    <p>三、 交(提)货地点、方式:使用快递</p>
    <p>四、 运输方式及到达站港和费用负担:送货上门、供方负担</p>
    <p>五、 合理损耗及计算方法:无</p>
    <p>六、 包装标准、包装物的供应与回收:原包装、不回收。</p>
    <p>七、 验收标准、方法及提出异议期限:按原厂技术标准验收,需方收到货后提出异议期限为十五天。</p>
    <p>八、 结算方式及期限:货到验收合格、发票到后一周内付款。</p>
    <p>九、 违约责任:如发生质量问题,需方将提出索赔。具体事宜协商解决。</p>
    <p>十、 解决合同纠纷的方式:合同发生争议时,双方应协商解决,协商不成时,任何一方可向经济合同仲裁委员会申请仲裁,或直接向人民法院起诉。</p>
    <p>十一、 其它事项:本合同一式两份,双方各执一份,经双方签字盖章有效,均有法律效力。</p>
    <p>&nbsp;&nbsp;</p>
    ..........
</div>
</body>
</html>

 

创建pdf文件

调用tcpdf来创建pdf文件并加入通过laravel获取的动态html字符串内容。

简单创建

$pdf = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);


//设置字体 stsongstdlight支持中文
$pdf->SetFont('msyh', '', 10);

// 第一页
$pdf->AddPage();

// 这里获取html内容
$html = file_get_contents('./test.html');
$pdf->writeHTML($html, $ln = true, $fill = false, $reseth = false, $cell = false, $align = '1');


// 四种模式 I输出、D下载、F保存本地、S输出二进制字符串
$pdf->Output('test.pdf', 'I');

设置文档信息

$pdfName = '测试合同';
$pdf->SetCreator($pdfName);
$pdf->SetAuthor('YJL');
$pdf->SetTitle($pdfName);
$pdf->SetSubject($pdfName);

去掉默认页头脚

$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
$pdf->setFontSubsetting(false);

设置间距

$pdf->SetMargins(10, 5, 10, true);

设置字体支持中文

$pdf->SetFont('stsongstdlight', '', 10);

设置图片比例因子

$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

设置自动分页

即距离底部多少进行分页

$pdf->SetAutoPageBreak(true, PDF_MARGIN_BOTTOM);

写入内容(插入图片使用)

writeHTML方法也可插入html内容到pdf,但是插入图片需要改为writeHTMLCell方法

$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '1', true);

设置水印

简单水印

可通过设置图片透明度和插入图片来设置水印

参数1-2:xy轴坐标

参数3-4:图片宽高,不设置为图片默认宽高

$pdf->SetAlpha(0.4);
$pdf->Image('./images/water_img.png', 50, 100, 0, 0);

每页水印

获取总页数

$page_num = $pdf->getPage();

或者

$page_num = $pdf->PageNo();

循环设置水印

以总页数为条件进行循环,在每一页(50, 100)坐标处 ,设置透明度和水印图片。

for ($i = 1; $i <= $page_num; $i++) {
    $pdf->setPage($i);
    $pdf->SetAlpha(0.3);
    $pdf->Image('./images/water_img.png', 50, 100);
}

旋转水印

通过pdf Rotate方法来设置图片旋转

三个参数:

Angle:旋转角度

x:横坐标

y:纵坐标

代码如下:

// 获取pdf文档页数
$page_num = $pdf->getPage();
// 设置水印
for ($i = 1; $i <= $page_num; $i++) {
    $pdf->setPage($i);
    $pdf->SetAlpha(0.4);
    // 旋转角度
    $pdf->Rotate(20, 30, 50);
    $pdf->Image('./images/water_img.png', 30, 50, 0, 10);
    $pdf->Image('./images/water_img.png', 10, 150, 0, 10);
    $pdf->Image('./images/water_img.png', -10, 250,0, 10);
}

效果:

总结

研究tcpdf应用pdf有很长一段时间了,还是有一个问题没法解决,就是如何获取pdf关键字坐标?倒是用python可以获取pdf文档关键字坐标,但是还是尺寸问题无法换算。

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

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

相关文章

JMeter-BeanShell预处理程序和BeanShell后置处理程序的应用

目录 引言 一、什么是BeanShell&#xff1f; 二、BeanShell Preprocessor&#xff08;BeanShell预处理程序&#xff09;的基本应用 引言 你知道吗&#xff0c;JMeter不仅能够进行压力测试和性能分析&#xff0c;还可以使用BeanShell预处理程序和BeanShell后置处理程序来优化…

【C/C++】关键字nullptr详解 | NULL与nullptr的区别

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

AI产业应用再提速,AI基础软件发挥巨擎作用

5月31日&#xff0c;由中国信息通信研究院、中国人工智能产业发展联盟主办&#xff0c;北京九章云极科技有限公司联合主办的【创造智能探索未知】杭州通用人工智能论坛-AI基础软件前沿技术分论坛在杭州成功举办。大会聚焦AI基础软件前沿技术&#xff0c;挖掘人工智能基础软件大…

Spark大数据处理学习笔记(3.2.2)掌握RDD算子

衔接上文&#xff1a;http://t.csdn.cn/Z0Cfj 文章目录 三、掌握行动算子3.1 归约算子 - reduce()3.2 采集算子 - collect()3.3 首元素算子 - first()3.4 计数算子 - count()3.5 按键计数算子 - countByKey()3.6 前截取算子 - take(n)3.7 排序前截取算子 - takeOrdered(n)[(ord…

自动测试LeetCode用例方法

自动合并测试LeetCode解题方法 在leetcode.com上答题&#xff0c;Run Code或者Sumbmit通常要Spending一会&#xff0c;如果提交一次就Accepted那还好&#xff0c;如果反复Wrong Answer&#xff0c;很耽误时间。为了调高效率和减少挫折(来回提交&#xff0c;一直Wrong Answer倍…

数字化时代,在一系列数据技术中浅谈商业智能BI

BI&#xff0c;Business Intelligence的简称&#xff0c;顾名思义&#xff0c;也叫做商业智能。其主要价值&#xff0c;在于通过一系列的数据技术&#xff0c;从数据中挖掘隐藏的客观规律&#xff0c;总结这些规律背后的原因&#xff0c;并用于指导公司业务的发展。 大多数情况…

Rust in Action笔记 第五章 深入理解数据

如果希望看到f32类型的数转换成整型数字u32类型&#xff0c;需要在unsafe包裹下调用std::mem::transmute(data)&#xff0c;因为在安全的Rust语法中没有把整型数据按照bit转换成浮点数据的实现&#xff0c;如果想要看到浮点数的二进制输出&#xff08;通过{:b}&#xff09;&…

huggingface lfs下载小技巧

先clone下来&#xff0c;然后再git lfs pull 明显要快得多。

NLP学习笔记九-机器翻译-seq2seq模型

NLP学习笔记九-机器翻译-seq2seq模型 seq2seq模型是做机器翻译任务的&#xff0c;根据名字其实我们也能有一些推测seq 2 seq&#xff0c;其实就是sequence to sequence&#xff0c;从一个序列到另一个序列&#xff0c;所以seq2seq模型其实不止可以做机器翻译&#xff0c;还可以…

跟国内这几个名校MBA项目学费比,浙大就是小弟弟……

MBA学费这些年来一直都是牵绊考生心绪的一个重要因素&#xff0c;在每年此起彼伏的调价声浪中&#xff0c;上岸时间的早或晚往往意味着成本方面看得见的增加&#xff0c;在去年的MBA招录过程中&#xff0c;部分院校也调整了相关学费&#xff0c;浙大MBA项目以33.6万的学费也跻身…

【从零开始学Django篇001】从创建一个新的Django项目开始

&#x1f341;前言 &#x1f451;作者主页&#xff1a;&#x1f449;CSDN丨博客园 &#x1f3c6;学习交流&#xff1a;&#x1f449;在下周周ovoの社区 &#x1f48e;从零开始学Django系列专栏&#xff1a;&#x1f449;Django系列专栏 ​ 在这个专栏&#xff0c;大概会从零开始…

后端-基于JdbcTemplate的数据库连接和使用

1、application.properties中进行数据库配置 spring.datasource.single.urlxxxx?useUnicodetrue&characterEncodingutf-8 spring.datasource.single.usernamexxx spring.datasource.single.passwordxxx spring.datasource.single.typecom.alibaba.druid.pool.DruidDataSou…

如何通过自养号测评在TEMU跨境电商平台中获取更大市场份额

2023年可谓是TEMU跨境电商平台的元年。自从2022年8月17日拼多多宣布将筹备跨境电商平台以来&#xff0c;TEMU犹如烈火燎原&#xff0c;迅速蔓延全球。9月1日&#xff0c;首站TEMU在北美市场正式上线&#xff0c;平台名称取意“Team Up&#xff0c;Price Down”&#xff0c;紧扣…

Easyui05补充

1.后台. 今天我们的主要任务是完成增加功能&#xff1b; 1.1BookDao. 1.2BookAddServlet. 注意&#xff0c;这里创建 Book对象赋值的时候&#xff0c;如果调用构造函数&#xff0c;那么所调用的构造函数里面 bookName属性赋值的时候必须调用 setBookName方法进行赋值&#xf…

从零开始Vue项目中使用MapboxGL开发三维地图教程(二)Mapbox地图样式

Mapbox地图样式 1、Mapbox地图样式定义2、Mapbox默认地图样式3、Mapbox地图样式对象4、切换地图样式的案例 1、Mapbox地图样式定义 Mapbox地图样式&#xff1a;按照Mapbox地图样式规范中描述的模式定义的一个JSON对象&#xff0c;或者是此类JSON的URL。可以接受null值以允许手动…

【图像处理】图像白平衡处理

一、说明 这就是我们今天要说的——图像增强&#xff01;图像增强由一组用于优化图像的技术组成。这样&#xff0c;图像在视觉上变得更容易被人类感知&#xff0c;这反过来将进一步促进改进的图像处理分析。图像增强处理技术包括以下几种&#xff1a; 傅里叶变换 白平衡 直方…

python开发的连连看小游戏

说明&#xff1a; 1.在网上找了一个基础版本改进而来&#xff0c;大概增加了200行代码&#xff0c;相对原版要复杂了一些&#xff1b; 2.界面采用tkinter开发&#xff0c;比较简单&#xff1b; 3.新增了连接连功能&#xff1b; 4.新增了积分功能&#xff1b; 5.新增了陷入…

python套接字(一):socket的使用

文章目录 前言一、什么是套接字&#xff1f;二、python中套接字的常用方法三、使用1、服务器端代码2、客户端代码 前言 最近研究了一下python的socket的使用&#xff0c;特此记录下来&#xff0c;方便以后参考。 一、什么是套接字&#xff1f; 套接字(Socket)&#xff0c;就…

线上展览平台平台有哪些?蛙色3D虚拟展厅平台简介

导语&#xff1a; 随着科技的飞速发展和全球化的趋势&#xff0c;线上展览平台正日益受到关注和重视。它们成为了传统展览方式的有力补充&#xff0c;为各行业提供了一个全新的展示和交流平台。 我们将一起探索当今主流的线上展览平台&#xff0c;并重点介绍蛙色3D虚拟展厅平台…

jmeter如何将上一个请求的结果作为下一个请求的参数

目录 1、简介 2、用途 3、下载、简单应用 4、如何将上一个请求的结果作为下一个请求的参数 1、简介 在JMeter中&#xff0c;可以通过使用变量来将上一个请求的结果作为下一个请求的参数传递。 ApacheJMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测…