Windows下实现PHP转PDF为图片

前提为已配置好PHP环境, 本文以PHP7.4为例,

需要在Windows上安装这3个软件: PHP的imagick扩展, ImageMagick, GhostScript

下文会提及安装方法或下载地址

具体步骤如下

Step1 安装Imagick扩展, 方法见这篇文章

Step2 安装ImageMagick

请在其官网下载, 安装时注意勾选以下3项

Step3 安装GhostScript

目前这个页面可以下载, 可以下载GPL版, 然后安装

Step4 将GhostScript添加到PATH

打开 此电脑

->右键属性

->高级系统设置

->高级

->环境变量

->系统变量里找到Path

->编辑

->新建, 然后添加GhostScript安装目录下的bin目录, 如下图

->然后一路确定保存

Step5 重启计算机

Step6 测试pdf转为png

Step6.1建立文件夹如下文件夹

d:\test
d:\test\image

Step6.2在d:\test里放一个1.pdf

Step6.3运行如下代码实现转换

<?php

/**
 * PDF2PNG
 * @param $pdf  待处理的PDF文件
 * @param $path 待保存的图片路径
 * @param $page 待导出的页面 all为全部 1为第一页 2为第二页
 * @param $pixel 分辨率, 像素 
 * @return   保存好的图片路径和文件名
 */
function pdf2png($pdf, $path, $page = 'all', $pixel = 120)
{
    if (!extension_loaded('imagick')) {
        echo '未加载imagick扩展';
        return false;
    }

    if (!file_exists($pdf)) {
        echo '未找到pdf源文件';
        return false;
    }


    $im = new Imagick();

    $im->setResolution($pixel, $pixel);
    $im->setCompressionQuality(100);

    if ($page !== 'all') {
        $key = $page - 1;
        $pdf .= "[$key]";
    }

    $im->readImage($pdf);

    foreach ($im as $k => $v) {
        $v->setImageFormat('png');
        $filename = $path . "/" . md5($k . time()) . '.png';
        if ($v->writeImage($filename) == true)
            $return[] = $filename;
    }

    return $return;
}

$pdf = "d:/test/1.pdf"; //pdf源文件
$path = "d:/test/image"; //保存png的文件夹, 须先行建立, 以免报错

$res = pdf2png($pdf, $path);

echo '<pre>';
print_r($res);

需要注意的是: imagick的转换需要使用绝对路径, 我还没有找到使用相对路径进行转换的方法

这样就可以在Windows下用PHP将PDF转为图片啦

参考文献:

https://www.cnblogs.com/xiaqiuchu/p/12545168.html

IIS7.5转发至Apache, 共用80端口

一些情况下, 我们需要同时使用IIS和Apache, 那么需要满足以下条件

同时启动IIS和Apache 且

(用Apache代理IIS

用IIS代理Apache)

本文介绍用IIS代理Apache的方法

Step1 配置Apache和域名, 且使用非80端口, 使得以如下uri可以访问到你的网站

http://www.domain.com:81

Step2 为IIS正确安装”URL重写”重写模块(已安装则略过)

这个模块某些版本有bug, 在Windows Server 2008 R2+IIS7.5环境下, 可使用这个.

Step3 安装Application Request Routing(已安装则略过)

网址: https://www.iis.net/downloads/microsoft/application-request-routing

Step4 打开IIS管理器

->点击 Application Request Routing Cache

-> 点击 Server Proxy Settings

-> 勾选 Enable Proxy

-> 应用, 如下图

Step5 新建IIS站点, 并为其绑定你要用的域名, 以及80端口, 目录随便指向一个目录即可, 如下图

为什么要新建站点?

在IIS全站设置URL转发, 也可以实现IIS代理Apache;

但是IIS代理Apache是要损耗一定性能的.

在全站设置会影响到服务器上其他IIS网站

Step6 在该”转发站”里点”URL重写”, 并添加空白规则, 如下图

Step7 在”入站规则”里如下图这么写

如此用来实现将 www.domain.com的80端口指向由Apache管理的81端口

以上, 曾实例化于Windows Server 2008 R2 + IIS7.5

IIS7.5中禁止某User Agent

本文以Windows Server 2008 R2为例

Step1 重新安装”URL重写模块”(可正常使用则略过)

微软”URL重写模块”有bug, 若不能正常使用请先重装

在Windows Server 2008 R2+IIS7.5中可以用的好像是这个 https://www.microsoft.com/zh-cn/download/details.aspx?id=7435

Step2 在IIS管理器中打开你的网站->点”URL重写”, 如下图

Step3 在”入站规则”上点右键->点”添加规则”->点”请求阻止”, 如我们要禁止UA中包含”OPPO”的客户端访问网站, 可以像下面这么写

确定后即生效