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

使用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文档关键字坐标,但是还是尺寸问题无法换算。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要实现在Winform中查看PDF并添加水印,您可以使用iTextSharp库来实现。iTextSharp是一个用于生成PDF文件的.NET库,它也可以用于在PDF文件中添加文本和图像。 以下是实现步骤: 1. 首先,您需要从NuGet包管理器中安装iTextSharp库。 2. 创建一个Winform应用程序,并添加一个WebBrowser控件和一个按钮控件。 3. 在按钮的Click事件中,添加以下代码: ``` private void btnAddWatermark_Click(object sender, EventArgs e) { // 打开PDF文件 OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.Filter = "PDF Files|*.pdf"; openFileDialog1.Title = "Select a PDF File"; if (openFileDialog1.ShowDialog() == DialogResult.OK) { // 读取PDF文件 PdfReader reader = new PdfReader(openFileDialog1.FileName); // 创建输出文件流 SaveFileDialog saveFileDialog1 = new SaveFileDialog(); saveFileDialog1.Filter = "PDF Files|*.pdf"; saveFileDialog1.Title = "Save a PDF File"; if (saveFileDialog1.ShowDialog() == DialogResult.OK) { // 创建新的PDF文件 using (FileStream fs = new FileStream(saveFileDialog1.FileName, FileMode.Create, FileAccess.Write, FileShare.None)) { PdfStamper stamper = new PdfStamper(reader, fs); // 添加水印 string watermarkText = "Confidential"; PdfContentByte cb = stamper.GetOverContent(1); BaseFont font = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); cb.SaveState(); cb.SetColorFill(BaseColor.GRAY); cb.BeginText(); cb.SetFontAndSize(font, 40); cb.SetTextMatrix(100, 100); cb.ShowTextAligned(Element.ALIGN_CENTER, watermarkText, 300, 400, 45); cb.EndText(); cb.RestoreState(); // 关闭PDF文件 stamper.Close(); reader.Close(); // 在WebBrowser中显示新的PDF文件 webBrowser1.Navigate(saveFileDialog1.FileName); } } } } ``` 在此代码中,我们首先打开PDF文件,然后创建一个新的PDF文件以保存添加了水印PDF。我们使用PdfStamper类来添加水印,该类允许我们在PDF文件的页上添加文本和图像。在此示例中,我们将“Confidential”文本添加为水印,并将其旋转45度。最后,我们关闭PDF文件并在WebBrowser控件中显示新的PDF文件。 这就是如何在Winform中查看PDF并添加水印的基本步骤。您可以根据需要对代码进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JSON_L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值