要求:

把.md格式转为.pdf格式,并批量处理,最后将多个pdf文件合并为一个pdf并以文件名作为书签名

解决思路:

1.md格式的markdown文件转为html

为了将 md 格式转换成 html 文件,我们需要用到 markdown 和 codecs 这两个库。

pip install markdown

完整代码如下:

importmarkdownimportosimportcodecs

head= """

code {

color: inherit;

background-color: rgba(0, 0, 0, 0.05);

}

"""filepath= "E:/Data/RenZhengfei-master/ALL"savepath= "E:/Data/RenZhengfei-master/ALL-html"

if notos.path.isdir(savepath):

os.mkdir(savepath)

os.chdir(savepath)

i=0

pathDir=os.listdir(filepath)for allDir inpathDir:if (allDir == "pdf"):continuename=allDirprint(name)

os.chdir(filepath)

fp1= codecs.open(name, mode="r", encoding="utf-8")

text=fp1.read()

html=markdown.markdown(text)

fp1.close()#print(html)

fname= name.replace('md', 'html')#f2 = '%s.html' % (fname)

os.chdir(savepath)

fp2= codecs.open(fname, "w", encoding="utf-8", errors="xmlcharrefreplace")

fp2.write(head+ html +foot)

fp2.close()print(i)

MdToHtml

2.html格式文件转为pdf

wkhtmltopdf 是一个开源、简单而有效的命令行 shell 程序,它可以将任何 HTML (网页)转换为 PDF 文档或图像(jpg、png 等)。

我们首先需要去官网去下载对应的程序到本地环境中 :https://wkhtmltopdf.org/downloads.html

也可以直接使用pip安装

pip install pdfkit

完整代码如下:

importtimeimportpdfkitimportos

wk_path= r'E:/wkhtmltox/bin/wkhtmltopdf.exe'config= pdfkit.configuration(wkhtmltopdf=wk_path)

filepath= "E:/Data/RenZhengfei-master/ALL-html"savepath= "E:/Data/RenZhengfei-master/ALL-pdf"time1=time.time()

pathDir=os.listdir(filepath)for allDir inpathDir:if (allDir == "pdf"):continuename=allDirprint(name)

htmlpath=filepath+"\\"+nameprint(htmlpath)

name= name.replace('html', 'pdf')

os.chdir(savepath)

pdfkit.from_url(htmlpath, name, configuration=config)#pdfkit.from_url(url, name, configuration=config)

time2 =time.time()print(str(time2 - time1)+"s")

HtmlToPdf

3.合并多个pdf文件

#!/usr/bin/env python3#-*- coding: utf-8 -*-

'''本脚本用来合并pdf文件,支持带一级子目录的

每章内容分别放在不同的目录下,目录名为章节名

最终生成的pdf,按章节名生成书签'''

importos, sys, codecsfrom PyPDF2 importPdfFileReader, PdfFileWriter, PdfFileMergerimportglobdefgetFileName(filepath):'''获取当前目录下的所有pdf文件'''file_list= glob.glob(filepath+"/*.pdf")#默认安装字典序排序,也可以安装自定义的方式排序

#file_list.sort()

returnfile_listdef get_dirs(filepath='', dirlist_out=[], dirpathlist_out=[]):#遍历filepath下的所有目录

for dir inos.listdir(filepath):

dirpathlist_out.append(filepath+ '\\' +dir)returndirpathlist_outdefmerge_childdir_files(path):'''每个子目录下合并生成一个pdf'''dirpathlist=get_dirs(path)if len(dirpathlist) ==0:print("当前目录不存在子目录")

sys.exit()for dir indirpathlist:

mergefiles(dir, dir)def mergefiles(path, output_filename, import_bookmarks=False):#遍历目录下的所有pdf将其合并输出到一个pdf文件中,输出的pdf文件默认带书签,书签名为之前的文件名#默认情况下原始文件的书签不会导入,使用import_bookmarks=True可以将原文件所带的书签也导入到输出的pdf文件中

merger=PdfFileMerger()

filelist=getFileName(path)if len(filelist)==0:print("当前目录及子目录下不存在pdf文件")

sys.exit()for filename infilelist:

f=codecs.open(filename,'rb')

file_rd=PdfFileReader(f)

short_filename=os.path.basename(os.path.splitext(filename)[0])if file_rd.isEncrypted==True:print('不支持的加密文件:%s'%(filename))continuemerger.append(file_rd,bookmark=short_filename,import_bookmarks=import_bookmarks)print('合并文件:%s'%(filename))

f.close()#out_filename=os.path.join(os.path.abspath(path),output_filename)

merger.write(output_filename+".pdf")print('合并后的输出文件:%s'%(output_filename))

merger.close()if __name__ == "__main__":#每个章节一个子目录,先分别合并每个子目录文件为一个pdf,然后再将这些pdf合并为一个大的pdf,这样做目的是想生成每个章节的书签

#1.指定目录

#原始pdf所在目录

path = "E:\Data\RenZhengfei-master\ALL-pdf"

#输出pdf路径和文件名

output_filename = "E:\Data\RenZhengfei-master"

#2.生成子目录的pdf

#merge_childdir_files(path)

#3.子目录pdf合并为总的pdf

mergefiles(path, output_filename)

AllPdf

java markdown 转 pdf_markdown转为pdf文件相关推荐

  1. java网页保存pdf_JavaScript+Java实现HTML页面转为PDF文件保存的方法

    JavaScript+Java实现HTML页面转为PDF文件保存的方法 发布于 2017-02-27 09:58:50 | 160 次阅读 | 评论: 0 | 来源: 网友投递 JavaScript客 ...

  2. java 网页保存为pdf文件怎么打开方式_js相关:JavaScript+Java实现HTML页面转为PDF文件保存的方法...

    js相关:JavaScript+Java实现HTML页面转为PDF文件保存的方法 发布于 2020-8-12| 复制链接 借助iText这个Java库,我们可以将HTML文件保存为图片文件进而转换成P ...

  3. java实现excel表格转为pdf文件

    import com.aspose.cells.Workbook; import com.aspose.cells.PdfSaveOptions;/**excelFileDir:excel文件路径pd ...

  4. java将HTML文件转化为pdf文件,如何使用Java将HTML网页转换为PDF文件

    我一直在互联网上搜索如何使用Java将HTML页面转换为PDF文件.我发现了很多指针,简而言之,它们不起作用或难以实现.我也下载了一个商业产品,pdf4ml;该API是我很乐意与之合作的,除了当我在维 ...

  5. java在linux生成pdf文件,从 Java 应用程序动态生成 PDF 文件

    简介: 如果您的应用程序需要动态生成 PDF 文档,那么您需要 iText 库.开源的 iText 库使得 PDF 的创建变得轻松易行.本文介绍了 iText 并提供了一个使用它从 Java 技术应用 ...

  6. 超星阅读器文件转为PDF文件

    写在开头:打印是核心要义. 通过打印将'超星阅读器.pdz'文件转为'.oxps'文件: 再通过打印将'.oxps'文件转为'.pdf'文件: 步骤: 1.在超星阅读器中打开书籍文件后,右键选择打印, ...

  7. Java 将网络图片URL 转为file文件

    Java 将网络图片URL 转为file文件;某个需求要求将图片一起导出,图片只有地址,这里将图片先转为file,然后导出excel 代码示例 /*** 将图片转为file** @param url ...

  8. java使用itext生成表格pdf文件

    以下主要讲解的是java使用itext生成表格pdf文件,话不多说,直接上代码 一.首先引入itext所使用的包 <dependency><groupId>com.itextp ...

  9. 代码示例:使用Java以编程方式拆分PDF文件

    有时需要将一个PDF拆分为多个PDF文件时,可能会有多种情况.例如,可能必须分割包含发票/收据的PDF的每一页,并将它们另存为单独的文件.另一方面,可能要从PDF文件中拆分页面的特定集合.为了解决上述 ...

  10. php把excel转换成pdf文件下载,laravel怎么可以把excel文件转为pdf文件?

    laravel怎么可以把excel文件转为pdf文件? 尝试用PHPOffice/PhpSpreadsheet转换,写了个函数,如下: 备注:PhpSpreadsheet是PHPExcel的新版,ht ...

最新文章

  1. python广告刷量_Python一日一练05----怒刷点击量
  2. 一次性给予硕士35万,博士50万房补,浙江这个市出台硬核政策引才!
  3. 67 亿美金搞个图,创建知识图谱的成本有多高你知道吗?
  4. Cocos2d-x的坐标系统
  5. mysql中update實現子查詢的方法
  6. sqlserver存储过程入门之 游标
  7. mysql otter 数据同步_MySQL数据同步之otter
  8. 甜甜圈和拓扑学也有关系,你想的到吗?
  9. [Postman使用]请求与响应
  10. linux查看ip命令_不可不知的Linux文本查看命令
  11. vscode+leetcode环境配置
  12. {MySQL数据库初识}一 数据库概述 二 MySQL介绍 三 MySQL的下载安装、简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 初识sql语句...
  13. java 反编译 报错_java反编译后再编译成class时提示缺少包
  14. 于仕琪老师的人脸检测库
  15. 订单明细升级版、淘宝erp、淘宝打单发货接口
  16. 报错command line option ‘-std=c11‘ is valid for C/ObjC but not for C++
  17. 不小心格式化硬盘,重新分区了硬盘的恢复方法
  18. 绝无仅有!绝无仅有的史上最好shell替代工具
  19. 图片怎么转换成PDF格式?这两种方法赶紧记下
  20. java12/13新特性

热门文章

  1. JVM——Java类加载机制总结
  2. 用户登录项目第二期——HTML登录页面实现
  3. android设备当广告屏使用方法,Android手机与电视无线HDMI同屏器使用教程
  4. python 知乎 sklearn_最全知乎专栏合集:编程、python、爬虫、数据分析、挖掘、ML、NLP、DL......
  5. java动态生成HTML文件
  6. stm32实用技巧:JLINK接口定义和使用JTAG或SW下载程序
  7. jlink接口定义接stm32_图解Stm32使用jlink程序时jtag接口(SW和JTAG模式)的简化方法
  8. 分享WEB快速开发工具
  9. 京东架构专家分享京东架构之路
  10. 机器学习:决策树算法案例(西瓜数据集3.0)