整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

网页转pdf,这个工具真好用

两天有个客户需要把网页转为pdf,之前也没开发过类似的工具,就在百度搜索了一波,主要有下面三种

  1. 在线转pdf
  2. 使用浏览器打印功能转pdf
  3. 使用本地软件工具转pdf

在线转pdf

在百度(我一般用必应)搜索“在线网页转pdf”就有很多可以做这个事的网站,免费的如

  • PDF24Tools

各种pdf的操作都有,免费使用,速度一般。

官网地址https://tools.pdf24.org/zh

PDF24 Tools

  • doctron

开源免费项目,使用golang写的,提供在线转

官网地址http://doctron.lampnick.com/

doctron在线体验demo

还有挺多其他的,可以自己搜索,但是都不符合我的预期。

使用浏览器打印功能转pdf

  1. 在浏览器右键,点击打印或者ctrl+p
  2. 在弹出的打印对话框中找到目标打印机选择“另存为PDF”
  3. 点击“保存”按钮即可下载pdf了

使用本地软件工具转pdf

Doctron,这是我今天要介绍的重头戏。

Doctron是基于Docker、无状态、简单、快速、高质量的文档转换服务。目前支持将html转为pdf、图片(使用chrome(Chromium)浏览器内核,保证转换质量)。支持PDF添加水印。

  • 使用chrome内核保证高质量将HTML转为pdf/图片。
  • 简易部署(提供docker镜像,Dockerfile以及k8s yaml配置文件)。支持丰富的转换参数。转为pdf和图片支持自定义大小。
  • 无状态服务支持。

管他的,先把代码下载下来再说

git clone https://gitcode.net/mirrors/lampnick/doctron.git

仓库

运行

go build
./doctron --config conf/default.yaml

运行截图

转pdf,访问http://127.0.0.1:8080/convert/html2pdf?u=doctron&p=lampnick&url=<url>,更换链接中的url为你需要转换的url即可。

转换效果

然后就可以写程序去批量转换需要的网页了,但是我需要转换的网页有两个需求

1、网站需要会员登录,不然只能看得到一部分

2、需要把网站的头和尾去掉的

这就为难我了,不会go语言啊,硬着头皮搞了,肯定有个地方打开这个url的,就去代码慢慢找,慢慢调试,功夫不负有心人,终于找到调用的地方了。

第一步:添加网站用户登录cookie

添加cookie之前

添加cookie之后

第二步:去掉网站头尾

chromedp.Evaluate(`$('.header').css("display" , "none");
		$('.btn-group').css("display" , "none");
		$('.container .container:first').css("display" , "none");
		$('.breadcrumb').css("display" , "none");
		$('.footer').css("display" , "none")`, &ins.buf),

打开网页后执行js代码把头尾隐藏掉

第三步:程序化,批量自动生成pdf

public static void createPDF(String folder , String cl ,  String pdfFile, String urlhref) {
        try {
            String fileName = pdfFile.replace("/", ":");
            String filePath = folder + fileName;
            File srcFile = new File(filePath);
            File newFolder = new File("/Volumes/disk2/myproject" + File.separator + cl);
            File destFile = new File(newFolder, fileName);
            if(destFile.exists()){
                return;
            }
            if(srcFile.exists()){
                //移动到对应目录
                if(!newFolder.exists()){
                    newFolder.mkdirs();
                }
                FileUtils.moveFile(srcFile , destFile);
                return;
            }
            if(!newFolder.exists()){
                newFolder.mkdirs();
            }
            String url = "http://127.0.0.1:8888/convert/html2pdf?u=doctron&p=lampnick&url="+urlhref;
            HttpEntity<String> entity = new HttpEntity<String>(null, null);
            RestTemplate restTemplate = new RestTemplate();
            ResponseEntity<byte[]> bytes = restTemplate.exchange(url, HttpMethod.GET, entity, byte[].class);
            if (bytes.getBody().length <= 100) {
                if(urlList.containsKey(urlhref)){
                    Integer failCount = urlList.get(urlhref);
                    if(failCount > 3){
                        System.out.println("下载失败:" + cl + " / " + pdfFile +"  " + urlhref);
                        return;
                    }
                    failCount++;
                    urlList.put(urlhref , failCount);
                }else{
                    urlList.put(urlhref , 1);
                }

                createPDF(folder , cl ,  pdfFile , urlhref);
            }else{
                if (!destFile.exists()) {
                    try {
                        destFile.createNewFile();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                try (FileOutputStream out = new FileOutputStream(destFile);) {
                    out.write(bytes.getBody(), 0, bytes.getBody().length);
                    out.flush();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

最终成果:


文件夹分类存放

pdf文件



排提示:本期内容所用软件为“Adobe Acrobat Pro DC 2019”

写在前面

再看到喜欢的网页时,我们可能会想要收藏,也可能使用OneNote或者印象笔记转存这些网页。

而在碰到Acrobat之后,我们又多了另外一个选择。

将网页直接转存为PDF。

Acrobat将网页转存为PDF有两种方法。

下面我们来逐一介绍。

方法一:根据网页地址创建PDF

功能位置:工具 >> 创建PDF >> 网页


点击“创建PDF”工具,切换页面后,点击左侧的“网页”选项。


根据网页创建PDF

Acrobat提示我们输入一个URL地址,将某个网页链接复制到这里。

可以勾选“捕捉多层”,软件会展开更多选项。

  • “获取N层”和“获取整个网站”只能二选一。因为某个网站会包含多个超链接,前者可限制转换的超链接数量,后者会获取全部网站的超链接。(毫无疑问,网页在转换PDF时,后者会花费更多的时间)
  • 勾选“停留在同一路径”的话,软件仅转换“隶属于所填URL的网页”;
  • 勾选“停留在同一服务器”的话,软件仅转换“同一服务器上的网页”;
  • “高级设置”可以对转换后的PDF,进行页面大小,缩放等等参数的设置,不再赘述。

转换网页参数

参数设置完毕,点击“创建”即可。

等待数秒,Acrobat会自动打开转换成功的PDF。

软件在识别网页CSS样式时,会存在一定的缺陷,但网页主体内容可以被完美转换。

转换效果

方法二:使用浏览器插件转换PDF

安装Acrobat DC时,会自动为IE、Google Chrome 和Firefox这三款浏览器添加“Adoba Arcobat”这款插件。(限Windows系统)


下面以Firefox浏览器为例,利用插件将某个网页转存为PDF。

首先在右上角的选项菜单中找到“附件组件”。


附件组件

确保“Adoba Arcobat”插件为启用状态。


启用Adobe Acrobat

这时在工具栏就可以看到插件图标了。


通过浏览器随便访问一个网站,在右键菜单中就会发现“Adobe Acrobat” >> “将网页转换为Adobe PDF”选项。


点击后,只需要选择一个存储路径,等待数秒转换即可完成。

不需要人为再次介入,要比第一种方法更加高效。


这种方式有点类似于“网页内容转存至云笔记”。

一册君在测试知乎的网页时,有的内容可以转存成功,而有的不可以。

希望大家留意到这一点。

总结

今天,我们介绍了使用“Acrobat”转存网页为PDF文件的方法。

  • 通过“工具 >> 创建PDF >> 网页”,在软件内部通过网页链接直接转存;
  • 安装“Acrobat”后,IE,Chrome,Firefox三款浏览器会安装“Acrobat插件”,插件提供了“将网页转换为Adobe PDF”功能。此方式更加简单直观,但支持的浏览器有限;

以上。

如果你喜欢“一册笔记”,请记得分享,点赞和关注。

未完待续。。。

TML即超文本标记语言是一种用于创建网页的标准标记语言。对于初学者来说一般可以使用工具来生成html,如:DW,HB等,这些都是所见即所得的工具,在设计视图将需要展现的文字、段落、图片等内容通过软件排好版,在代码视图将由软件自动生成对应的HTML代码,这些代码由客户电脑上的浏览来解析执行。

HTML语言是一种优美的语言,几乎所有的标记都是成对出现的,配合CSS样式和JS脚本来控制页面显示的样式及效果。有一定开发经验的高手往往可以直接用代码视图来编写网页,不管是软件生成html还是手写HTML代码最终显示的效果都是一致的。如下图是由DW设计的网页,下方代码对应的就是HTML代码,视图效果和代码是一一对应的。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">