批量TXT文本转PDF-PYTHON

最近眼睛不好,想着少看着点手机,于是将闲置吃灰好多年的kindle4拿出来,这个电纸书是kindle是淘宝上买的,美版,在阅读TXT时碰到很多问题,多次前后翻页后页码会乱,有时文本里有非法字符,会直接崩溃退出,体验感不好,于是想着将TXT文本转为PDF。

一、思路

不用python的话,TXT转文本最方便的就是使用WPS,免费且够用,也就是用WPS打开文本文件,然后另存为PDF格式就行。所以,这里就用python自动执行这个过程,而且加上批量功能,将一个文件夹中的TXT文本全转为PDF。为方便起见,将这个过程分割为多个过程:列出文件夹所有TXT文件、得到TXT文件编码、读入DOC文档并排版保存、将DOC文档转换为PDF。

二、代码

import os
import datetime
from docx import Document
from docx.shared import Cm
from win32com import client
import codecs
import chardet

def Txt2Doc(txtFile,docFile,txtencoding):  #文本转DOC函数
    if txtencoding == "GB2312":
        txtencoding = "GB18030"    #GB2312字库比较小,网上下载的GB2312文本经常有其他编码中文,所以用GB18030打开,出错会少一点。
    document = Document()
    ms = open(txtFile,"r",encoding=txtencoding,errors = 'ignore')  #指定编码打开,出错时选择忽略错误
    for line in ms.readlines():  #读入所有行
        paragraph = document.add_paragraph(line)   #写入DOC文档
    sections = document.sections  #得到文档中的section,进行页面设置
    margin = 0.5  #上下左右边距都设为0.5cm
    for section in sections:
        section.top_margin = Cm(margin)
        section.bottom_margin = Cm(margin)
        section.left_margin = Cm(margin)
        section.right_margin = Cm(margin)
        section.page_width = Cm(8)  #6寸kindle屏幕宽8cm,长10cm
        section.page_height = Cm(10)
    document.save(docFile)    #保存为DOC文档

def doc2pdf(docFile,pdfFile):    #doc转存为PDF
    word = client.Dispatch("Kwps.Application")  # 打开wps应用程序
    doc = word.Documents.Open(docFile)  # 打开docx文件
    doc.SaveAs(pdfFile, 17)  # 另存为后缀为".pdf"的文件,其中参数17表示为pdf
    doc.Close()  # 关闭原来word文件
    word.Quit()# 退出WPS

def detectCode(path):#检测文件编码,path为全路径文件名,返回编码类型
    with open(path, 'rb') as file:
        data = file.read(2000)  # 最多2000个字符
        dicts = chardet.detect(data)
    return dicts

if __name__ == '__main__':#主程序
    path = 'D:\\Temp'#也可以用argv[1]取代D:\\Temp
    print(datetime.datetime.now())#打印程序开始时间
    for file_name in os.listdir(path):#列出所有文件
        if os.path.isdir(path + "\\" + file_path):#跳过子文件夹
            continue
        filename, file_type = os.path.splitext(file_path)#分割文件名及后缀
        if file_type == '.txt':#对TXT文件处理
            dicts = detectCode(path + "\\" + file_path)#检测文件编码
            try:
                Txt2Doc(path + "\\" + file_path, path + "\\" + filename + ".docx",dicts['encoding'])#TXT转为DOC
                doc2pdf(path + "\\" + filename + ".docx", path + "\\" + filename + ".pdf")#DOC转PDF
            except Exception as e:#exception处理
                print(e)
                break
    print(datetime.datetime.now())#显示完成时间

三、不足

本程序能满足一些TXT文本转PDF的需求,但存在比较多不足:

1、正如程序中加的两个显示时间,使用win32com调用WPS的最大问题是慢,我转换100个文件的时间大约有2个小时,少量文件转换是可以的,文件量一大就够呛。

2、win32com调用WPS还有个问题,就是无法处理较大文件,几MB的文件就无法处理了,程序经常会处于无响应状态。

3、从网上下载的TXT文本有时会有一些乱码,文件读入时会出错,需要优化,增加文件内容编码转换。

4、Win32com只能在windows平台使用,linux平台需采用其他方法。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
批量PDF文件换为文本文件,可以使用Python的OCR(Optical Character Recognition)功能。OCR是一种将图像中的文本换为可编辑文本的技术。 首先,需要安装Python的OCR库。一个常用的OCR库是Tesseract,可以使用pip命令进行安装。 ``` pip install pytesseract ``` 安装完成后,还需要安装Tesseract OCR引擎。可以在Tesseract官方网站上下载并安装。 接下来,导入所需的库并编写Python脚本。使用`os`库来获取文件列表并遍历文件夹中的每个PDF文件。使用`pytesseract`库中的`image_to_string`函数将PDF文件换为文本。 以下是一个简单的示例代码: ```python import os import pytesseract from pdf2image import convert_from_path # 设置Tesseract OCR引擎的路径 pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe" # 输入PDF文件夹路径和输出文本文件夹路径 pdf_folder = "path/to/pdf/folder" txt_folder = "path/to/txt/folder" # 遍历PDF文件夹中的每个PDF文件 for filename in os.listdir(pdf_folder): if filename.endswith(".pdf"): pdf_path = os.path.join(pdf_folder, filename) # 将PDF文件换为图像 images = convert_from_path(pdf_path) # 逐页进行OCR并将文本保存到txt文件中 txt_filename = filename.replace(".pdf", ".txt") txt_path = os.path.join(txt_folder, txt_filename) with open(txt_path, "w", encoding="utf-8") as f: for i, image in enumerate(images): text = pytesseract.image_to_string(image, lang="eng") f.write(text) ``` 以上代码将遍历指定的PDF文件夹,并将每个PDF文件中的文本换为一个文本文件。可以根据需求修改输入和输出文件夹的路径,以及选择不同的OCR语言(在`lang="eng"`中指定)。 运行脚本后,就可以将PDF文件批量换为文本文件,并保存到指定的输出文件夹中了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值