美文网首页
给pdf添加来自excel(xls)的分级书签

给pdf添加来自excel(xls)的分级书签

作者: 汪浩瀚 | 来源:发表于2018-02-03 15:13 被阅读0次

    很多参考用数据或者工具书要真的用起来,好的书签必不可少。但是pdf中添加书签比较慢,于是做一个python的小程序,用excel(仅支持xls格式)中的数据为pdf添加书签。

    excel中的数据格式要满足图片中的格式。由于要做分级书签,因此excel中用“:”(英文输入法的冒号)作为书签名和书签对应页码的符号。

    excel数据和pdf书签的对应关系看图。

    要注意的是:excel中页码不能超过pdf总页数。

    python版本3.6.2

    from PyPDF2 import PdfFileWriter, PdfFileReader

    import xlrd

    用的时候直接改代码中的路径

    input_pdf_name= 'GBT 26119-2010 绿色制造 机械产品生命周期评价 总则.pdf'

    output_pdf_name= '带标签.pdf'

    xls_name= '111.xls'

    所有代码:

    '''

    pdf添加标签代码,需要复制出一个新的pdf,原有pdf不变,原标签不会影响结果也不受影响

    created 20180203

    by wanghaohan

    '''

    from PyPDF2import PdfFileWriter, PdfFileReader

    import xlrd

    # 输入相关文件路径

    input_pdf_name= 'GBT 26119-2010 绿色制造 机械产品生命周期评价 总则.pdf'

    output_pdf_name= '带标签.pdf'

    xls_name= '111.xls'

    # 创建新的pdf类,并把原有pdf复制进去

    output_pdf= PdfFileWriter()

    input_pdf= PdfFileReader(open(input_pdf_name, 'rb'))

    for pdf_pagein input_pdf.pages:

        output_pdf.addPage(pdf_page)

    xls_data= xlrd.open_workbook(xls_name)

    sheet= xls_data.sheet_by_index(0)

    first_col= sheet.col_values(0)

    parents= [None]* sheet.ncols# 一开始时,None表示为一级书签

    for item_row_numin range(sheet.nrows):    # 遍历每列的每一个值,相当于所有一级书签

        item_row= sheet.row_values(item_row_num)

    parents[-1]= None  # 每一行的第一个单元都是一级标签,他的父标签是None

        for item_cellin item_row:  # 遍历当前行的每一个单元,相当于一级书签的所有子书签(也可能为空)

            if item_cell!= '':

                mark_name, mark_page= item_cell.split(':')

    cell_num= item_row.index(item_cell)

    parents[cell_num]= output_pdf.addBookmark(mark_name, int(mark_page)-1, parents[cell_num-1] )# add parent bookmark

    output_pdf.write(open(output_pdf_name, 'wb'))

    相关文章

      网友评论

          本文标题:给pdf添加来自excel(xls)的分级书签

          本文链接:https://www.haomeiwen.com/subject/vyyuzxtx.html