暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

用 Python 和 LaTeX 把图片转 pdf 样式再合并

狗头Rser 2021-10-20
1372

用 Python 和 LaTeX 把图片转 pdf 再合并

  脑洞大开录个视频,就是今天 Boss 让俺把公众号里面的图片做成 ppt 转 pdf ,懒得慢慢手点,就自己写了个代码,用 Python + LaTeX 批量完成呗。

  就是里面有一堆图片呗,不过科研的 PPT 确实比较规整,生成的 pdf 大小比较均一,这些图这是从小甲鱼的公众号里面盗出来的。

  其实就是读图片数目写一堆 *.tex
 文件,然后用 latexmk -pdf
生成一下,然后,然后做一些简单的移动。一共16张图片。

import os
import shutil
import glob
from PyPDF2 import PdfFileMerger

首先把包给导好呗

def get_number_move(jpg_dir):
    """
    参数:输入的是图片的目录
    返回图片的数目
    """

    jpg_files = os.listdir(jpg_dir)
    jpg_files_number = len(jpg_files)
    return jpg_files_number
def write_texfile(number):
    """
    参数:输入的是图片的数目
    写出图片数量的 tex 的文件,编译
    """

    for i in range(1,number+1):
        file_after_name = str(i) + '.tex'
        file_name = os.path.join(tex_files_dir,file_after_name)
        file = open(file_name,'w'
        string5 = r'\includegraphics{'+ str(i) + '.jpg}'
        true_string = [string1,string2,string3,string4,string5,string6]
        for j in range(6):
            file.writelines(true_string[j] + '\n')

然后上面的代码计算图片数目,写出 tex 文件。

def move_pdf_files(tex_dir,new_pdf_dir):
    """
    参数:输入 tex 文件所在的目录,和新的文件夹所在的目录
    把 pdf 移动到一个新的文件夹,之后用 combine_pdf_files 函数合并起来
    """

    os.chdir(tex_dir)
    f = glob.glob(r'./*.pdf')
    for files in f:
        new_dst = os.path.join('..',new_pdf_dir)
        shutil.copy(files,new_dst)
    os.chdir('../')

再把 LaTeX 编译生成的 pdf 移动到新的 pdf 文件中,然后合并一下。

# 合并 pdf
def combine_pdf_files(pdf_dir):
    pdf_files = os.listdir(pdf_dir)
    pdf_files.sort(key = lambda x: int(x[:-4]))
    file_merger = PdfFileMerger()
    for pdf in pdf_files:
        pdf_name = os.path.join(pdf_dir,pdf)
        file_merger.append(pdf_name)     # 合并pdf文件
    file_merger.write('../combine.pdf')

if __name__ == '__main__':
    jpg_dir = './jpgfiles'
    tex_files_dir = './texfiles'
    new_pdf_dir = './all_pdf'
    string1 = r'\documentclass{standalone}'
    string2  = r'\usepackage{graphicx} '
    string3 =  r'\graphicspath{{D:/jpgfiles/}}'
    string4 = r'\begin{document}' 
    string6 = r'\end{document}'
    # 函数执行:
    number = get_number_move(jpg_dir)
    write_texfile(number)
    #之后去终端执行 latexmk 

生成了 16 个 tex 文件,用 latexmk -pdf
 命令编译一下。

由于用的是 standalone
 所以图片整张图占了整个页面。

已经生成了合并的 pdf 文件,然后去清理一下 LaTeX 的多余文件!

move_pdf_files(tex_files_dir,new_pdf_dir)
combine_pdf_files(new_pdf_dir)

不要和我说什么苹果可以直接图片转 pdf ,要合并起来。最主要的是!代码就是一次又一次的写才能熟练!



文章转载自狗头Rser,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论