使用Python操作PDF
在之前的教程中,我们讨论了使用Python编程语言的不同包和模块可以对PDF文件进行的各种操作。我们学习了使用Python提取文本、图像、表格和URL的方法。
接下来的教程将涵盖一些其他操作来操作PDF文件,包括创建PDF文件,向PDF文件添加文本、图像和表格,以及其他更多操作。
那么,让我们开始吧。
使用Python创建PDF文件
Python提供了一个功能,程序员可以直接从代码中创建PDF文件。我们可以直接从Python代码向PDF文件插入文本、图像、表格和表单。为了实现这一点,Python编程语言提供了一个名为reportlab**的库。
但在我们开始使用该库之前,我们需要安装它。
安装reportlab库
我们可以使用以下命令通过pip安装reportlab**库:
语法:
$ pip install reportlab
现在,让我们开始实施部分;我们可以执行以下操作:
示例:
from reportlab.lib.pagesizes import LETTER
from reportlab.pdfgen.canvas import Canvas
# creating a new pdf file
my_canvas = Canvas("newfile.pdf", pagesize = LETTER)
my_canvas.save()
说明:
在上面的代码片段中,我们从各自的模块中导入了所需的函数。然后,我们创建了一个名为 newfile.pdf 的PDF文件。 在 Canvas() 函数中,我们将PDF页面的大小设置为 LETTER 大小,这是由 reportlab 库提供的预定义大小。然后,我们使用 save() 函数保存创建的PDF文件。
使用Python在PDF上添加文本
我们可以使用 reportlab 库很容易地添加一个PDF文件。让我们考虑以下示例以了解相同:
示例:
from reportlab.lib.pagesizes import LETTER
from reportlab.lib.units import inch
from reportlab.pdfgen.canvas import Canvas
from reportlab.lib.colors import purple
# creating the pdf file
my_canvas = Canvas("textfile.pdf", pagesize = LETTER)
# setting up the font and the font size
my_canvas.setFont("Courier", 18)
# setting up the color of the font as red
my_canvas.setFillColor(purple)
# writing this text on the PDF file
my_canvas.drawString(2 * inch, 8 * inch, "Welcome to Javatpoint for Python Tutorial")
my_canvas.save()
输出:
解释:
在上面的代码片段中,我们再次从各自的模块中导入函数。然后,我们创建了一个名为 textfile.py 的PDF文件。我们正在设置字体和字体大小,因为我们即将在PDF文件上写入一些文本。我们使用 reportlab 库的预定义函数设置了PDF的大小为 LETTER, 字体为 Courier, 字体大小为 18 。然后,我们使用 setFillColor 函数选择了 紫色 作为文本的颜色。之后,我们在PDF文件上写入了一些文本,指定了文本在PDF页面上的位置。最后,我们使用 save() 函数保存了创建的PDF文件。因此,我们成功创建了一个PDF文件。
使用Python在PDF上添加图像
我们可以利用Python的 reportlab 库将图像插入PDF文件中。与在PDF文件上插入文本相比,插入图像可能更费事。图像具有其独特的尺寸,PDF文件也是如此。因此,管理图像的大小并找到最佳位置可能是一项繁琐的工作。
让我们看下面的示例,了解如何在PDF文件上添加图像:
示例:
from reportlab.lib.pagesizes import LETTER
from reportlab.pdfgen.canvas import Canvas
my_canvas = Canvas("imgfile.pdf", pagesize = LETTER)
my_canvas.drawInlineImage("my_image.jpg", 100, 450)
my_canvas.save()
输出:
说明:
在上面的代码片段中,我们导入了所需的函数。然后我们使用 Canvas() 函数创建了一个新的PDF文件。然后我们使用 drawInlineImage() 函数来插入图像到创建的PDF文件中。我们指定了图像在目录中的位置以及图像在PDF文件上的位置, 即 (100, 450) 。reportlab库将PDF文件的左下位置视为 (0, 0) ,并以类似的方式管理图像的位置。信纸大小的PDF文件的尺寸为 612×792, 而 (100, 450) 将是图像在PDF文件上的位置。
使用Python在PDF中添加表格
我们还可以使用reportlab库向PDF文件添加表格。让我们考虑以下示例来了解如何在PDF文件中添加表格。
示例:
from reportlab.lib import colors
from reportlab.lib.pagesizes import letter, inch
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle
# creating a pdf file to add tables
my_doc = SimpleDocTemplate("table.pdf", pagesize = letter)
my_obj = []
# defining Data to be stored on table
my_data = [
["ID", "1234"],
["Name", "Den Arthur"],
["Profession", "Software Developer"],
["Age", "28"],
["Sex", "Male"]
]
# Creating the table with 5 rows
my_table = Table(my_data, 1 * [1.6 * inch], 5 * [0.5 * inch])
# setting up style and alignments of borders and grids
my_table.setStyle(
TableStyle(
[
("ALIGN", (1, 1), (0, 0), "LEFT"),
("VALIGN", (-1, -1), (-1, -1), "TOP"),
("ALIGN", (-1, -1), (-1, -1), "RIGHT"),
("VALIGN", (-1, -1), (-1, -1), "TOP"),
("INNERGRID", (0, 0), (-1, -1), 1, colors.black),
("BOX", (0, 0), (-1, -1), 2, colors.black),
]
)
)
my_obj.append(my_table)
my_doc.build(my_obj)
输出:
解释:
在上述代码片段中,我们创建了一个新的PDF文件,尺寸为信纸大小。要存储在表格上的数据在列表 “my_data” 中提供。在这里,列表的形状是 5×2 。有五行和两列。因此,这是将在PDF文件上形成的表格。之后,我们定义了表格的边距、网格线、它们的大小和形状。我们还使用了 setStyle 函数。您也可以参考 reportlab 库的官方文档来创建表格。如果没有定义这些网格线,PDF上将只有按照顺序排列的详细信息,但没有通过网格线或边框进行分隔。
使用Python在PDF上突出显示文本
Python还为我们提供了一种突出显示PDF文件中文本内容的功能,称为 “fitz” 。Fitz是我们可以用来在PDF文件上执行文本突出显示的最简单的库。正如我们已经讨论过的,关于fitz库的安装过程,让我们直接进入使用fitz库来突出显示PDF上的文本的实现。
示例:
import fitz
# opening the pdf file
my_pdf = fitz.open("my_file.pdf")
# input text to be highlighted
my_text = "Boring"
# iterating through pages for highlighting the input phrase
for n_page in my_pdf:
matchWords = n_page.search_for(my_text)
for word in matchWords:
my_highlight = n_page.add_highlight_annot(word)
my_highlight.update()
# saving the pdf file as highlighted.pdf
my_pdf.save("highlighted_text.pdf")
输出:
解释:
在上面的代码片段中,我们导入了 fitz 库。然后,我们使用 open() 函数加载PDF文件 my_file.pdf ,该文件需要进行高亮显示。要高亮显示的短语在text变量中给出。我们正在突出显示单词 “Boring” 。然后,我们遍历每个页面,查找是否存在与该词匹配的潜在结果。如果找到与该词匹配的结果,我们使用 fitz 库中的 add_highlight_annot 函数来进行高亮显示。因此,通过这种方式,我们可以在PDF文件中获得突出显示的文本。
使用Python调整PDF页面大小
调整页面大小是使用Python操作PDF文件的另一个示例。有时,需要调整PDF页面的大小,Python提供了一个称为 PyPDF2 的库,程序员可以使用该库执行页面调整功能。让我们考虑以下示例以了解详细信息:
示例:
import PyPDF2
myPDF = "my_file.pdf"
myPDF = PyPDF2.PdfFileReader(myPDF)
my_page = myPDF.getPage(0)
# Resizing the first page
my_page.scaleBy(0.5)
my_resized = PyPDF2.PdfFileWriter()
my_resized.addPage(my_page)
with open("resizedFile.pdf", "wb+") as f:
my_resized.write(f)
输出:
解释:
在上述的代码片段中,我们导入了所需的库。然后,我们开始读取需要调整大小的输入PDF文件。然后,我们读取了它的页面。在这里,我们只调整了第一页,所以getPage函数提供了值0,代表初始页面。现在,为了调整页面大小,我们使用了scaleBy函数,并将第0页按0.5进行了缩放。因此,第一页的尺寸缩小了实际页面尺寸的一半。然后,我们将页面保存到了一个新的PDF文件”resizedFile.pdf”中。通过这种方式,我们成功地使用Python进行了页面调整大小。
使用Python将PDF文件转换为CSV格式
有时,表格数据也以PDF格式存在。然而,这些类型的信息不能直接解析。例如,我们无法直接使用pandas库处理带有数据框的PDF文件,因此必须在处理之前将它们转换为CSV或Excel格式。由于这是一个相当重要的过程,我们将了解如何将PDF文件转换为CSV格式。
让我们开始安装Python库称为tabula。
安装tabula库
我们可以使用以下命令使用pip安装tabula库:
语法:
$ pip3 install tabula-py
现在,让我们通过以下示例了解在将PDF文件转换为CSV格式中使用 tabula 库的实现:
示例:
import tabula
tabula.convert_into(
"tableFile.pdf",
"tableFile.csv",
output_format = "csv",
pages = "all"
)
解释:
在下面的代码片段中,我们导入了 tabula 库。然后,我们使用了一个名为 “convert_into” 的一行函数,指定了参数:输入PDF文件的路径、要转换文件的路径、输出文件的格式以及要转换的页面数。通过这种方式,我们可以轻松有效地将PDF文件转换为CSV格式。
使用像Python这样的编程语言,我们可以执行许多其他操作来处理PDF文件。可以参考官方文档以获取更多信息。