美文网首页
Python + pdflatex 给PDF文件添加页眉页脚(制

Python + pdflatex 给PDF文件添加页眉页脚(制

作者: 一纸素笺凝笑语 | 来源:发表于2019-11-24 22:31 被阅读0次

    一批pdf文件需要加上页脚和页码等(论文,做成论文集)
    原料:LaTex模板、PDFs
    要求:无所谓程序效率,自动化取代人力

    1. 先放LaTeX模板

    懒得再读文件了,直接用多行字符串。 其中中文自行替换。
    其中__page_cnt__rawpdf分别用于后面替换为记录 页码原PDF文件名字 的变量。

    texfile = """
    \\documentclass[12pt]{article}
    \\usepackage[utf8]{inputenc}
    \\usepackage[a4paper, margin=2cm]{geometry}    
    \\usepackage{fancyhdr}
    \\usepackage{pdfpages}
    \\usepackage{afterpage}
    \\usepackage{ifthen}
    \\usepackage{intcalc}
    
    
    \\newcommand\\blankpage{%
        \\null
        \\thispagestyle{empty}%
        \\addtocounter{page}{-1}%
        \\newpage}
        
    
    \\fancypagestyle{mypagestyle1}{% The first page 
      \\fancyhf{}% Clear header/footer
      \\fancyhead[L]{\\scriptsize 会议XXX, 地点, 日期月日, 年}%   
      \\fancyfoot[L]{\\footnotesize ISBN书号\\$31.00 ©2019 IEEE}
      \\fancyfoot[C]{\\footnotesize \\thepage}
      \\renewcommand{\\headrulewidth}{0pt}
    }
    
    \\fancypagestyle{mypagestyle2}{% The other pages
      \\fancyhf{}% Clear header/footer
      \\fancyfoot[C]{\\footnotesize  会议名称 (会议缩写) }
      \\fancyfoot[R]{\\footnotesize \\thepage}
      \\renewcommand{\\headrulewidth}{0pt}
    }
    
    %%%%%%%%%%
    
    \\begin{document}
    
    \\setcounter{page}{__page_cnt}
    \\pagestyle{mypagestyle1}
    \\includepdf[pages=1,pagecommand={\\pagestyle{mypagestyle1}}]{__rawpdf}
    \\pagestyle{mypagestyle2}
    \\includepdf[pages=2-,pagecommand={\\pagestyle{mypagestyle2}}]{__rawpdf}
    %\\afterpage{\\blankpage}
    
     
    \\end{document}
    
    """
    

    2.使用PyPDF2获取PDF文件的页码->生成tex文件-> pdflatex编译

    import os, sys
    import subprocess
    from PyPDF2 import PdfFileReader
    
    def gen_new_texfile(page, paper):
        global texfile
        paper_id = paper.split('.')[0]
    
        new_texfile = texfile.replace("__page_cnt", f"{page}").replace("__rawpdf", f"../raw_pdfs/{paper}")
    
        new_texfile_path = f"./texes/XXXX2019_{paper_id}.tex"
        with open(new_texfile_path, 'w', encoding="utf8") as f:
            f.write(new_texfile)
    
        return new_texfile_path
    
    
    def build_tex(tex_path):
        # print(os.getcwd())
        cur_path = os.getcwd()
        os.chdir("./texes")
        tex_path = tex_path[8:] # 改变了工作目录,需修改路径
        os.system(f"pdflatex {tex_path}")
    
        os.chdir(cur_path)
    
    
    def get_pdfpagenum(path):
        reader = PdfFileReader(path)
        return reader.getNumPages()
    
    
    # 这个是文章标题入口
    def process():
        raw_pdf_path = "./raw_pdfs"
        # print(os.listdir(raw_pdf_path))
        pdfs = os.listdir(raw_pdf_path)
        page = 1
        for paper in pdfs:
            tex_path = gen_new_texfile(page, paper)
            page += get_pdfpagenum(raw_pdf_path+"/"+paper)
            build_tex(tex_path)
            # if page > 20:
            #     print("debug ....")
            #     break
        print("Done")
    
    
    def rename_raw_pdf():
        raw_pdf_path = "./raw_pdfs" 
        # print(os.listdir(raw_pdf_path))
        pdfs = os.listdir(raw_pdf_path)
    
        cur_path = os.getcwd()
        os.chdir(raw_pdf_path)
    
        for pdf in pdfs:
            pid, _ = pdf.split('.')
            new_name = f"{int(pid):03d}.pdf"
            # print(new_name)
            os.rename(pdf,new_name)
    
        os.chdir(cur_path)
    
    # 整个文件夹的所有文件批量改名
    def rename_processed_pdfs(path=None):
        pdf_path = path 
    
        pdfs = os.listdir(pdf_path)
    
        os.chdir(pdf_path)
    
        for pdf in pdfs:
            new_name = pdf.split("_")[-1]
            os.rename(pdf, new_name)
        print("Done")
    
    if __name__ == "__main__":
        # build_tex(gen_new_texfile(1, "2.pdf"))
        # process()
        # rename_raw_pdf()
        rename_processed_pdfs("./Papers_with_headerfooter")
    

    2019-11-24

    相关文章

      网友评论

          本文标题:Python + pdflatex 给PDF文件添加页眉页脚(制

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