识别pdf标题并重命名pdf

最新改进版:
https://blog.csdn.net/weixin_44751432/article/details/135247984

已导出为可执行文件
下载链接在评论区
此为改进版
解决了期刊名可能是最大字体的问题:
思路 识别字符串的空格>3则为标题

import os
import PyPDF2

import fitz

def find_largest_font_sentence(pdf_path):
    largest_font_size = 0
    largest_font_sentence = ''
    maxsize=0
    # 打开PDF文件
    document = fitz.open(pdf_path)

    for page_number in range(document.page_count):
        page = document.load_page(page_number)
        blocks = page.get_text("dict")["blocks"]

        for block in blocks:
            if "lines" in block:  # 检查是否存在 lines 字段
                for line in block["lines"]:
                    for span in line["spans"]:
                        if span["size"] > largest_font_size:
                            largest_font_size = span["size"]
                            largest_font_sentence = span["text"]
        maxsize=largest_font_size
        for block in blocks:
            if "lines" in block:  # 检查是否存在 lines 字段
                for line in block["lines"]:
                    for span in line["spans"]:
                        if span["size"] ==maxsize:
                            if largest_font_sentence!=span["text"]:
                                largest_font_sentence = largest_font_sentence+' '+span["text"]

        if largest_font_sentence.count(' ')<4:
            largest_font_sentence=''
            largest_font_size=0
            for block in blocks:
                if "lines" in block:  # 检查是否存在 lines 字段
                    for line in block["lines"]:
                        for span in line["spans"]:
                            if span["size"] > largest_font_size and span["text"].count(' ')>3:
                                largest_font_size = span["size"]
                                largest_font_sentence = span["text"]
            maxsize = largest_font_size
            for block in blocks:
                if "lines" in block:  # 检查是否存在 lines 字段
                    for line in block["lines"]:
                        for span in line["spans"]:
                            if span["size"] == maxsize:
                                if largest_font_sentence != span["text"]:
                                    largest_font_sentence = largest_font_sentence + ' ' + span["text"]

    return largest_font_sentence

# 用于测试的PDF文件路径



def rename_pdfs(directory):
    for filename in os.listdir(directory):
        if filename.endswith(".pdf"):
            filepath = os.path.join(directory, filename)
            filepath=filepath.strip()
            largest_font_sentence = find_largest_font_sentence(filepath)
            title=largest_font_sentence
            if  ":" in title:
                title = title.replace(":", ":")
            new_filename = title.strip() + ".pdf"
            new_filepath = os.path.join(directory, new_filename)
            os.rename(filepath, new_filepath)
            print(f"Renamed {filename} to {new_filename}")


# 指定包含英文论文PDF的目录路径
pdf_directory = "PDF文件目录"


# 调用函数进行重命名
rename_pdfs(pdf_directory)

再次更新
import os
import time
import PyPDF2

import fitz

def find_largest_font_sentence(pdf_path):

largest_font_size = 0

largest_font_sentence = ''

maxsize=0

# 打开PDF文件

document = fitz.open(pdf_path)



for page_number in range(1):

    page = document.load_page(page_number)

    blocks = page.get_text("dict")["blocks"]



    for block in blocks:

        if "lines" in block:  # 检查是否存在 lines 字段

            for line in block["lines"]:

                for span in line["spans"]:

                    if span["size"] > largest_font_size:

                        largest_font_size = span["size"]

                        largest_font_sentence = span["text"]

    maxsize=largest_font_size

    for block in blocks:

        if "lines" in block:  # 检查是否存在 lines 字段

            for line in block["lines"]:

                for span in line["spans"]:

                    if span["size"] ==maxsize:

                        if largest_font_sentence!=span["text"]:

                            largest_font_sentence = largest_font_sentence+' '+span["text"]



    if largest_font_sentence.count(' ')<4 or "arXiv" in largest_font_sentence:

        largest_font_sentence=''

        largest_font_size=0

        for block in blocks:

            if "lines" in block:  # 检查是否存在 lines 字段

                for line in block["lines"]:

                    for span in line["spans"]:

                        if span["size"] > largest_font_size and span["text"].count(' ')>3 and "arXiv" not in span["text"]:

                            largest_font_size = span["size"]

                            largest_font_sentence = span["text"]

        maxsize = largest_font_size

        for block in blocks:

            if "lines" in block:  # 检查是否存在 lines 字段

                for line in block["lines"]:

                    for span in line["spans"]:

                        if span["size"] == maxsize:

                            if largest_font_sentence != span["text"]:

                                largest_font_sentence = largest_font_sentence + ' ' + span["text"]



return largest_font_sentence

用于测试的PDF文件路径

def rename_pdfs(directory):

for filename in os.listdir(directory):

    if filename.endswith(".pdf"):

        filepath = os.path.join(directory, filename)

        filepath=filepath.strip()

        largest_font_sentence = find_largest_font_sentence(filepath)

        title=largest_font_sentence

        if  ":" in title:

            title = title.replace(":", ":")

        new_filename = title.strip() + ".pdf"

        new_filepath = os.path.join(directory, new_filename)

        os.rename(filepath, new_filepath)

        print(f"Renamed {filename} to {new_filename}")

指定包含英文论文PDF的目录路径

#比如pdf文件在 D:\学习\论文

#那么引号内需要输入的是 D:\学习\论文
print(“请输入论文的存放目录”)
a=input(“输入路径”)
a=a.replace(“\”,“/”)
pdf_directory = a

调用函数进行重命名

rename_pdfs(pdf_directory)
time.sleep(5)

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
批量获取Word标题重命名是指通过程序自动读取一系列Word文件的标题内容并将其用作文件名进行重命名。这个过程可以大大提高工作效率,尤其是在处理大量文件时。 要实现批量获取Word标题重命名,我们可以使用Microsoft Office自带的VBA技术:首先在Word中打开VBA编辑器,然后创建一个宏,编写相关代码。具体步骤如下: 1. 打开Word,然后按下Alt+F11进入VBA编辑器。 2. 在“工具”菜单下选择“引用”,勾选“Microsoft Scripting Runtime”和“Microsoft Word”。 3. 在左侧项目窗口中选择“Normal.dotm”。 4. 在菜单栏中依次选择“插入”→“模块”,创建一个新的模块。 5. 在新建的模块中编写相关代码,如下: Sub RenameFilesWithTitle() Dim MyPath As String, MyName As String, strTitle As String Dim MyFile As Object, MyFSO As Object, MyFolder As Object Set MyFSO = CreateObject("Scripting.FileSystemObject") MyPath = "C:\MyFiles\" '这里需修改为你的文件夹路径 Set MyFolder = MyFSO.GetFolder(MyPath) For Each MyFile In MyFolder.Files If Right(MyFile.Name, 4) = ".doc" Or Right(MyFile.Name, 5) = ".docx" Then Documents.Open FileName:=MyFile.Path, ReadOnly:=True strTitle = ActiveDocument.BuiltInDocumentProperties("Title") MyName = MyPath & strTitle & ".docx" '生成新的文件名 Name MyFile.Path As MyName '重命名文件 ActiveDocument.Close SaveChanges:=False '关闭文档 End If Next MyFile End Sub 6. 修改代码中MyPath的值为需要批量修改文件名称的文件夹路径,运行程序即可。 以上就是实现批量获取Word标题重命名的具体方法,经测试是可行的,可以大大提高我们处理文件的效率。需要注意的是,程序中的文件路径、文件格式及代码细节可能因不同的环境而有所不同,需仔细检查和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值