最简单的epub文件转换为pdf文件的方法为使用电子书管理工具calibre,但是calibre要将文件添加到书库才能进行转换,添加到书库时会创建冗余的文件夹和文件,让人多少有点不爽。calibre工具套件里有epub文件编辑工具The Calibre e-book Editor,利用这个工具可以将epub文件中的资源文件导出到本地目录,导出到本地目录后就可以使用python包pdfkit转换为pdf文件。

上述方法需要三个准备工作:

1、安装wkhtmltopdf工具,pdfkit包装了这个工具。下载安装方法问度娘即可。

2、使用The Calibre e-book Editor将epub文件中的html文件里的层叠样式表、图片等外部文件的引用替换为绝对路径,如果不转换,程序执行过程中有很大概率发生OSError。批量转换HTML文件中资源链接的相对路径为绝对路径的参考方法如下图(具体查找正则表达式要看html文件中的链接格式而定,下图适用于用../引用到根目录的情形):

图中替换路径file:///代表协议,e:/book是epub文件中的资源将要导出的目录。导出资源文件后的目录典型结构如下图:

其中,images文件夹中保存的是图片等资源,text文件夹中保存的是html文件。

3. 安装pdfkit包:pip install pdfkit

完成以上准备工作后,我们可以用pdfkit将text文件夹中的html文件转换为一个pdf文件:

import pdfkit
from pathlib import Pathinput_path = Path(r"E:\book\text")
output_path = r'E:\book'
#指定wkhtmltopdf安装路径,或者将wkhtmltopdf.exe添加到path环境变量中
config_pdf = pdfkit.configuration(wkhtmltopdf=r'd:\programs\wkhtmltopdf\bin\wkhtmltopdf.exe')options ={'encoding':'UTF-8','page-size':'A4','margin-top':'0.75in','margin-right':'0.75in','margin-bottom':'0.75in','margin-left':'0.75in','no-outline':False,#允许wkhtmltopdf.exe访问本地资源'enable-local-file-access': True
}input_files = list(str(o) for o in input_path.glob("*.html"))pdfkit.from_file(input = input_files,output_path=output_path + '\\pdf文件名.pdf',options=options,configuration=config_pdf)print('Done!')

上述代码中,'enable-local-file-access'选项默认情况下为False,不修改在转换时会导致ProtocolUnknownError,具体信息如下:

OSError: wkhtmltopdf reported an error:
Exit with code 1 due to network error: ProtocolUnknownError

如果不在html文件中连接层叠样式表,或者想为html文件使用另外的层叠样式表,那么有个限制,那就是层叠样式表只能为单个html输入文件添加。也就是说,只能将每个html文件转换成对应的pdf文件,然后再用其他工具或者用python代码将这些pdf文件合并(使用pypdf2软件包是个不错的选择)。将html文件分别转换成对应的pdf文件代码如下:

import pdfkit
from pathlib import Pathinput_path = Path(r"E:\book\text")
output_path = r'E:\book\pdf'config_pdf = pdfkit.configuration(wkhtmltopdf=r'd:\programs\wkhtmltopdf\bin\wkhtmltopdf.exe')options ={'encoding':'UTF-8','page-size':'A4','margin-top':'0.75in','margin-right':'0.75in','margin-bottom':'0.75in','margin-left':'0.75in','no-outline':False,'enable-local-file-access': True
}
#使用多个层叠样式表时应以数组形式提供
css=[r'E:\book\page_styles.css',r"E:\book\stylesheet.css"]input_files = list(input_path.glob("*.html"))for f in input_files:o_f = str.format(output_path + '\\' + f.stem + '.pdf')pdfkit.from_file(input = str(f),output_path=o_f,css=css,#指定层叠样式表,不能对多个输入文件指定层叠样式表options=options,configuration=config_pdf)
print('Done!')

pdfkit批量转换html文件为pdf相关推荐

  1. python办公自动化实例(一):批量转换word文件为PDF

    场景:有大批word文件需要转PDF,手动word转pdf速度很慢,尤其当word文件很大的时候,这时候就可以使用程序高效批量转换word文件了. 实现效果如下图所示 代码如下: #!user/bin ...

  2. Python - 批量转换Word文件为PDF文件

    1,目的 通过万能的Python把一个目录下的所有Word文件转换为PDF文件. 2,遍历目录 作者总结了三种遍历目录的方法,分别如下. 2.1,调用glob 遍历指定目录下的所有文件和文件夹,不递归 ...

  3. Python+pywin32批量转换Word文件为PDF文件

    代码功能:把当前文件夹中多个Word文件批量转换为PDF文件 技术原理:代码实际上是调用了Word的"导出"功能,模拟了手工转换的操作并实现了自动化,要求已正确安装Python扩展 ...

  4. python批量pdf转word,python批量实现Word文件转换为PDF文件

    本文为大家分享了python批量转换Word文件为PDF文件的具体方法,供大家参考,具体内容如下 1.目的 通过万能的Python把一个目录下的所有Word文件转换为PDF文件. 2.遍历目录 作者总 ...

  5. python批量操作word文档实战_python批量实现Word文件转换为PDF文件

    本文为大家分享了python批量转换Word文件为PDF文件的具体方法,供大家参考,具体内容如下 1.目的 通过万能的Python把一个目录下的所有Word文件转换为PDF文件. 2.遍历目录 作者总 ...

  6. python编辑svg文件_使用Python批量转换SVG文件为PNG或PDF文件

    使用Python批量转换SVG文件为PNG或PDF文件 使用Python批量转换SVG文件为PNG或PDF文件 使用模块 1 模块单独使用 2 模块用于代码 实例 1 命令行方式 2 python脚本 ...

  7. labelme 批量转换json文件 详细步骤

    在run maskrcnn代码时,训练自己数据需要批量转换json文件,下面是详细步骤: cd 到/usr/local/lib/python3.6/dist-packages/labelme/cli路 ...

  8. 【使用ChatGPT自动化】批量转换.csv文件为.xlsx文件

    第1次提问: 我:我想使用Python批量转换.csv文件为.xlsx文件,请你提供代码 它:好的,以下是使用Python批量转换.csv文件为.xlsx文件的代码: import os import ...

  9. 轻松转换CAJ文件为PDF格式:免费工具和技巧

    在处理中国知网(CNKI)数据库中的CAJ文件时,将其转换为更常用的PDF格式可以提供更广泛的共享和便捷的阅读体验.本文将介绍一种免费的工具和一些技巧,帮助您轻松地将CAJ文件转换为PDF格式.我们将 ...

最新文章

  1. python中if语句中可用break_【第四篇】Python的if语句/for..in循环/while循环/break和continue...
  2. 报名开启 | 神策 2019 数据驱动大会「矩·变」等你!
  3. 腾讯AI开放平台的接口调用指南
  4. 15个基本的C#面试问题
  5. 【PostgreSQL-9.6.3】约束
  6. hdu 敌兵布阵(线段树之单点更新)
  7. Linux的原子操作与同步机制
  8. 导出excel乱码问题
  9. struts如何使用命名空间_Python基础篇:作用域和命名空间
  10. 日报系统、周报系统如何便捷使用?——领导篇
  11. JavaScript - OOP编程思想
  12. 软件安全测试是为了什么,一航软件测评有这些见解
  13. 自建CA 颁发证书
  14. 突变瀑布图及亚型突变瀑布
  15. libusb win32简介以及应用
  16. C语言 存储类型关键字详解
  17. python中国最好大学排名_三分钟实现爬取中国前20大学排名
  18. x64环境下_findnext()函数报错——0xC0000005: 写入位置 0xFFFFFFFFDF47C5A0 时发生访问冲突
  19. IT 专业人士的必备远程工具——radmin
  20. 服务器间文件同步工具Syncthing配置注意点汇总

热门文章

  1. 数字孪生 应急管理可视化决策系统
  2. Arduino 中String 与char *,char[]之间赋值
  3. Carsim-simulink联合仿真注意事项
  4. 燕东微在科创板上市:市值263亿元,北京电控、亦庄国投等为股东
  5. superset安装踩坑过程总结
  6. asp.net中@Register指令
  7. 【信号去噪】基于小波阈值实现心电信号去噪附matlab代码
  8. 应用计算机测定线性电阻电路图和实物图,PC817中文数据摘要_PC817引脚图和功能_工作原理_特性参数及典型应用电路...
  9. Polar SC的C++实现
  10. 神秘贼掉包二维码,支付宝赔偿200多,烧烤小哥为何还骂支付宝没良心?