PDF 文档中的文字水印是以半透明的形式显示在 PDF 页面上的文本。通过在 PDF 页面上展示版权、保密性、作者、公司或其他信息,水印能够保护文档的版权和信息安全,便于文档的识别和管理,同时也有助于品牌宣传。无论是公开发布的文档还是需要保密的文档,都可以通过在文档中添加文字水印来实现文档的保护和个性化。本文将介绍如何使用 Spire.PDF for Python 通过 Python 程序在 PDF 文档中添加文字水印。
本教程需要用到 Spire.PDF for Python 和 plum-dispatch v1.7.4。可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.PDF如果您不确定如何安装,请参考此教程:如何在 Windows 中安装 Spire.PDF for Python
单行文字水印是指只在页面中央倾斜单独显示的文字水印。以下是在 PDF 文档中添加单行文字水印的详细操作步骤:
from spire.pdf import *
from spire.pdf.common import *
import math
# 创建PdfDocument类的对象
pdf = PdfDocument()
# 加载PDF文档
pdf.LoadFromFile("示例.pdf")
# 创建PdfTrueTypeFont类的对象
font = PdfTrueTypeFont("HarmonyOS Sans SC", 48.0, 0, True)
# 指定水印文本并计算水印位置
text = "禁止复制"
set1 = float (font.MeasureString(text).Width * math.sqrt(2) / 4)
set2 = float (font.MeasureString(text).Height * math.sqrt(2) / 4)
# 遍历文档中的页面
for i in range(pdf.Pages.Count):
# 获取页面
page = pdf.Pages.get_Item(i)
# 设置水印的透明度
page.Canvas.SetTransparency(0.5)
# 将页面坐标系平移至指定位置
page.Canvas.TranslateTransform(page.Canvas.Size.Width / 2 - set1 - set2,
page.Canvas.Size.Height / 2 + set1 - set2)
# 逆时针旋转坐标系45度
page.Canvas.RotateTransform(-45.0)
# 在页面上绘制水印
page.Canvas.DrawString(text, font, PdfBrushes.get_Cyan(), 0.0, 0.0)
# 保存文档
pdf.SaveToFile("output/单行文本水印.pdf")
pdf.Close()

多行文字水印是指在 PDF 页面上有规律地重复多次的文字水印。用户可使用 PdfTillingBrush 对象插入多行文本水印,并可通过修改对象的大小来控制水印的重复次数。具体操作步骤如下:
from spire.pdf.common import *
from spire.pdf import *
# 创建PdfDocument类的对象
pdf = PdfDocument()
# 加载PDF文档
pdf.LoadFromFile("示例.pdf")
# 创建PdfTrueTypeFont类的对象
font = PdfTrueTypeFont("HarmonyOS Sans SC", 32.0, 0, True)
# 指定水印文本
text = "文旅中心"
# 遍历文档的每一页
for i in range(pdf.Pages.Count):
# 获取一页
page = pdf.Pages.get_Item(i)
# 创建PdfTilingBrush类的对象
brush = PdfTilingBrush(SizeF(page.Canvas.ClientSize.Width / float(3), page.Canvas.ClientSize.Height / float(3)))
# 设置水印的透明度
brush.Graphics.SetTransparency(0.3)
brush.Graphics.Save()
# 将画刷的坐标系平移到指定位置
brush.Graphics.TranslateTransform(brush.Size.Width / float(2), brush.Size.Height / float(2))
# 逆时针旋转坐标系45度
brush.Graphics.RotateTransform(-45.0)
# 在画刷上绘制水印文本
brush.Graphics.DrawString(text, font, PdfBrushes.get_Violet(), 0.0, 0.0, PdfStringFormat(PdfTextAlignment.Center))
brush.Graphics.Restore()
brush.Graphics.SetTransparency(1.0)
# 在页面上绘制水印
page.Canvas.DrawRectangle(brush, RectangleF(PointF(0.0, 0.0), page.Canvas.ClientSize))
# 保存PDF文档
pdf.SaveToFile("output/多行文本水印.pdf")
pdf.Close()

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
图像水印经常出现在共享的 PDF 文档中。与文本水印不同,图片水印通过显示公司标志、商标、警示图标等,以更直观的方式强调版权、所有权和保密性等信息。此外,将图片水印添加到 PDF 文档中还可以帮助进行品牌推广,以及增强文档的视觉效果等。本文将介绍如何使用 Spire.PDF for Python 在 Python 程序中在 PDF 文档中插入图像水印。
本教程需要用到 Spire.PDF for Python 和 plum-dispatch v1.7.4。可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.PDF如果您不确定如何安装,请参考此教程:如何在 Windows 中安装 Spire.PDF for Python
单一图像水印是在 PDF 页面中央单次显示的半透明图像。使用 Spire.PDF for Python,用户可以将指定图像作为水印绘制在任意 PDF 页面上。具体步骤如下:
from spire.pdf import *
from spire.pdf.common import *
# 创建 PdfDocument 类的对象
pdf = PdfDocument()
# 加载 PDF 文档
pdf.LoadFromFile("示例.pdf")
# 加载水印图像
image = PdfImage.FromFile("水印.png")
# 获取图像的宽度和高度
imageWidth = float(image.Width)
imageHeight = float(image.Height)
# 循环遍历文档中的页面
for i in range(pdf.Pages.Count):
# 获取页面
page = pdf.Pages.get_Item(i)
# 设置水印的透明度
page.Canvas.SetTransparency(0.3)
# 获取页面的宽度和高度
pageWidth = page.ActualSize.Width
pageHeight = page.ActualSize.Height
# 在页面上绘制水印图像
page.Canvas.DrawImage(image, pageWidth/2 - imageWidth/2, pageHeight/2 - imageHeight/2, imageWidth, imageHeight)
# 保存文档
pdf.SaveToFile("output/单一图像水印.pdf")
pdf.Close()

重复图像水印是在 PDF 页面上有规律地重复显示的图像。使用 Spire.PDF for Python 在 PDF 页面上绘制重复图像水印需要用到 PdfTillingBrush 类。以下是详细步骤:
from spire.pdf.common import *
from spire.pdf import *
# 创建 PdfDocument 类的对象
pdf = PdfDocument()
# 加载 PDF 文档
pdf.LoadFromFile("示例.pdf")
# 加载水印图像
image = PdfImage.FromFile("水印.png")
# 遍历文档的页面
for i in range(pdf.Pages.Count):
# 获取一个页面
page = pdf.Pages.get_Item(i)
# 创建 PdfTilingBrush 类的对象并设置其大小
brush = PdfTilingBrush(SizeF(page.Canvas.Size.Width / float(3), page.Canvas.Size.Height / float(3)))
# 设置水印的透明度
brush.Graphics.SetTransparency(0.3)
brush.Graphics.Save()
# 将坐标转换到指定位置
brush.Graphics.TranslateTransform(brush.Size.Width/2 - image.Width/2, brush.Size.Height/2 - image.Height/2)
# 在刷子上绘制水印图像
brush.Graphics.DrawImage(image, 0.0, 0.0, float(image.Width), float(image.Height))
brush.Graphics.Restore()
# 在页面上绘制水印
page.Canvas.DrawRectangle(brush, RectangleF(PointF(0.0, 0.0), page.Canvas.Size))
# 保存 PDF 文档
pdf.SaveToFile("output/重复图像水印.pdf", FileFormat.PDF)
pdf.Close()

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。

PDF 文件因其版式稳定、跨平台兼容的特点,已成为日常办公中共享报告、合同和财务资料的常用格式。然而,正是这种固定的布局,导致从 PDF 中提取数据变得十分困难,尤其在涉及表格或多页内容时更为明显。相比之下,Excel 在数据处理、分析和可视化方面更具优势,因此,将 PDF 文件转换为 Excel 表格已成为高效提取和利用 PDF 数据的有效途径。
在这篇文章中,您将学习如何使用 Python 和 Spire.PDF for Python 库将 PDF 文件转换为 Excel(XLSX)格式,内容涵盖从快速转换到支持布局和格式控制的高级设置,帮助您灵活应对各类文档转换需求。
与手动复制粘贴数据相比,使用Python将PDF转换为Excel有许多优势:
在开始将 PDF 文件转换为 Excel 之前,需要先配置好开发环境,确保系统中已安装所需的 Python 版本及 Spire.PDF 库。
如果您的设备尚未安装 Python,可前往 Python 官网 下载并安装最新版本。
Spire.PDF for Python是实现 PDF 转换为 Excel 的核心库,可通过以下命令进行安装:
pip install Spire.PDF
上述命令将自动下载并安装 Spire.PDF 库及其相关依赖项。如需了解更多安装细节,请参考:如何在 Windows 中安装 Spire.PDF for Python。
对于结构较为简单的 PDF 文档,可以直接使用 LoadFromFile 加载文件,并调用 SaveToFile 将其保存为 Excel 格式。
from spire.pdf import *
# Create a PdfDocument object
pdf = PdfDocument()
# Load your PDF file
pdf.LoadFromFile("Sample.pdf")
# Convert and save the PDF to Excel
pdf.SaveToFile("output.xlsx", FileFormat.XLSX)
# Close the document
pdf.Close()
对于结构复杂的 PDF 文档,尤其是包含多页内容、旋转文本、跨行单元格或重叠元素的文件,您可以通过 XlsxLineLayoutOptions 类自定义转换设置,最大限度地保留 PDF 原有的布局和格式。
| 选项 | 描述 | 默认值 |
|---|---|---|
| convertToMultipleSheet | 是否将 PDF 的每一页分别转换为单独的 Excel 工作表。 | True |
| rotatedText | 是否保留 PDF 中的旋转文本。启用后,Excel 中的文本方向将与原始 PDF 保持一致。 | True |
| splitCell | 控制 PDF 表格中包含多行文本的单元格是否拆分为多行 Excel 单元格。设置为 False 时,文本将保留在同一单元格中。 | True |
| wrapText | 是否启用 Excel 中的单元格文本自动换行,使长文本在单元格中自动换行显示。 | True |
| overlapText | 是否保留 PDF 中的重叠文本显示效果。启用后,Excel 中将以相似方式渲染这些重叠文本。 | False |
from spire.pdf import *
# Create a PdfDocument object
pdf = PdfDocument()
# Load your PDF file
pdf.LoadFromFile("Sample.pdf")
# Define layout options
# Parameters: convertToMultipleSheet, rotatedText, splitCell, wrapText, overlapText
layout_options = XlsxLineLayoutOptions(True, True, False, True, False)
# Apply layout options
pdf.ConvertOptions.SetPdfToXlsxOptions(layout_options)
# Convert and save the PDF to Excel
pdf.SaveToFile("advanced_output.xlsx", FileFormat.XLSX)
# Close the document
pdf.Close()

使用 Python 和 Spire.PDF for Python库,您可以高效地将 PDF 文件转换为 Excel 格式,并保留原始布局与样式。无论是简单的单页文件,还是包含多页、旋转文本或复杂表格的 PDF,Spire.PDF 均提供灵活的转换选项,帮助您按需调整转换细节,实现更理想的输出效果。
想要体验完整功能?现在即可该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。 Spire.PDF for Python 的免费试用授权,轻松开启 PDF自动化处理流程。
Q1:我可以将 PDF 中的每一页转换为单独的 Excel 工作表吗?
A1:可以。只需设置 convertToMultipleSheet=True,即可将每页 PDF 导出为独立的工作表。
Q2:Spire.PDF 支持转换为哪种 Excel 格式?
A2:支持 .xlsx 格式,这是 Microsoft Excel 2007 及更高版本使用的标准格式。
Q3:转换时是否可以保留 PDF 中的表格格式?
A3:可以。Spire.PDF 支持保留合并单元格、单元格样式、背景色等常见格式设置。
Q4:我能否只提取某个特定表格内容导出到 Excel?
A4:可以。Spire.PDF 提供表格识别与提取功能,您可根据需求提取并保存特定表格的数据,避免处理整个文档。
Spire.PDF for Java 9.10.3 已发布。本次更新新增支持设置 AES 加密算法以及重置已有域的名字,同时还增强了 PDF 到 SVG、PPTX 和 PDFA2B 以及 OFD 到 PDF 的转换功能。此外,一些已知问题也在该版本中得到修复,如加载 PDF 时程序抛"NullPointerException"的问题。详情请阅读以下内容。
新功能:
PdfEncryptionAlgorithm.AES//创建密码安全策略
PdfSecurityPolicy securityPolicy = new PdfPasswordSecurityPolicy("", "123456");
//设置加密算法
securityPolicy.setEncryptionAlgorithm( PdfEncryptionAlgorithm.AES_256);
//设置文档权限(所有权),默认是ForbidAll
securityPolicy.setDocumentPrivilege(PdfDocumentPrivilege.getForbidAll());
securityPolicy.getDocumentPrivilege().setAllowDegradedPrinting(true);
securityPolicy.getDocumentPrivilege().setAllowModifyAnnotations(true);
securityPolicy.getDocumentPrivilege().setAllowAssembly(true);
securityPolicy.getDocumentPrivilege().setAllowModifyContents(true);
securityPolicy.getDocumentPrivilege().setAllowFillFormFields(true);
securityPolicy.getDocumentPrivilege().setAllowPrint(true);
pdf.encrypt(securityPolicy);PdfDocument pdf = new PdfDocument();
//传递打开密码打开PDF文档
pdf.loadFromFile(inputFile, "1234");
//解密
pdf.decrypt();
pdf.saveToFile(outputFile, FileFormat.PDF);
pdf.dispose();PdfDocument document=new PdfDocument();
document.loadFromFile("https://cdn.e-iceblue.cn/input.pdf");
PdfFormWidget formWidget = (PdfFormWidget)document.getForm();
for (int i = 0; i < formWidget.getFieldsWidget().getCount(); i++)
{
PdfField field = (PdfField)formWidget.getFieldsWidget().get(i);
for (PdfFieldWidget widget : (Iterable<? extends PdfFieldWidget>) formWidget.getFieldsWidget())
{
if (widget.getName() == "oldName")
{
widget.setName("NewName");
}
}
}
document.saveToFile("result.pdf",FileFormat.PDF);问题修复:
Spire.Presentation 8.10.2已发布。该版本新增支持获取形状内文本的位置信息的功能。同时也支持获取形状中文本的“Ascent”和“Descent”属性和将形状转换为SVG格式。此外,还修复了将PPT转换为SVG后,用浏览器打开SVG文件时出现空白的问题。详情请阅读以下内容。
新功能:
Presentation ppt = new Presentation();
ppt.LoadFromFile(inputFile);
StringBuilder sb = new StringBuilder();
ISlide slide = ppt.Slides[0];
for (int i = 0; i < slide.Shapes.Count; i++)
{
IShape shape = slide.Shapes[i];
if (shape is IAutoShape)
{
IAutoShape autoshape = slide.Shapes[i] as IAutoShape;
string text = autoshape.TextFrame.Text;
//obtain the text position information
PointF point = autoshape.TextFrame.GetTextLocation();
sb.AppendLine("Shape " + i + ":" + text + "\r\n" + "location:" + point.ToString());
}
}
File.AppendAllText(outputFile, sb.ToString());
ppt.Dispose();Presentation ppt = new Presentation();
ppt.LoadFromFile(inputFile);
ISlide slide = ppt.Slides[0];
IAutoShape autoshape = slide.Shapes[0] as IAutoShape;
IList<LineText> lines = autoshape.TextFrame.GetLayoutLines();
for (int i = 0; i < lines.Count; i++)
{
float ascent= lines[i].Ascent;
float descent = lines[i].Descent;
}Presentation ppt = new Presentation();
ppt.LoadFromFile("FreeForm.pptx");
ISlide slide = ppt.Slides[0];
int num = 0;
foreach (IShape shape in slide.Shapes)
{
byte[] svgByte = shape.SaveAsSvg();
FileStream fs = new FileStream("shape_" + num + ".svg",FileMode.Create);
fs.Write(svgByte, 0, svgByte.Length);
fs.Close();
num++;
}问题修复:
https://www.e-iceblue.cn/Downloads/Spire-Presentation-NET.html
Spire.XLS 13.10.1 已发布。本次更新提升了 Excel 到 PDF 的转换效率,同时新增支持自定义透视表字段的名称。此外,本次更新还增强了 Excel 到 HTML 的转换。一些已知问题也在该版本中得到修复,如被删除的注释没有从文档中移除成功的问题。详情请阅读以下内容。
新功能:
sheet.PivotTables[0].RowFields[0].CustomName = "rowName";
sheet.PivotTables[0].ColumnFields[0].CustomName = "colName";
sheet.PivotTables[0].PivotFields[0].CustomName = "fieldName1";
sheet.PivotTables[0].DataFields[0].CustomName = "dataName";问题修复:
当您需要在别的地方重复利用 PowerPoint 中的图片时,那么将其中的图片提取出来是很有必要的操作。提取后,您就可以灵活地在原始 PPT 文件之外使用这些图片,从而在不同的项目中最大限度地发挥它们的价值。本文将介绍如何使用 Spire.Presentation for Python 通过代码从 PowerPoint 文档中提取图片。
本教程需要用到 Spire.Presentation for Python 和 plum-dispatch v1.7.4。可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.Presentation如果您不确定如何安装,请参考此教程:如何在 Windows 中安装 Spire.Presentation for Python
要从整个 PPT 演示文稿中提取图片,需要使用 Presentation.Images 属性获取文档中所有图片的集合。然后遍历集合中的元素,并调用 IImageData.Image.Save() 方法将每个元素保存为一个图片文件。具体步骤如下:
from spire.presentation.common import *
from spire.presentation import *
# 创建Presentation对象
ppt = Presentation()
# 加载PPT文档
ppt.LoadFromFile("示例.pptx")
# 遍历文档中所有图片
for i, image in enumerate(ppt.Images):
# 提取图片
ImageName = "提取图片/图_"+str(i)+".png"
image.Image.Save(ImageName)
ppt.Dispose()

要从指定幻灯片中提取图片,需要遍历幻灯片上的所有形状,并找到 SlidePicture 或 PictureShape 类型的形状,然后使用 SlidePicture.PictureFill.Picture.EmbedImage.Image.Save() 或 PictureShape.EmbedImage.Image.Save() 方法将其保存为图像文件。具体步骤如下:
from spire.presentation.common import *
from spire.presentation import *
# 创建Presentation对象
ppt = Presentation()
# 加载PPT文档
ppt.LoadFromFile("示例.pptx")
# 获取指定幻灯片
slide = ppt.Slides[1]
i = 0
#遍历该幻灯片中的所有形状
for s in slide.Shapes:
# 确定形状是否为SlidePicture类型
if isinstance(s, SlidePicture):
# 如果是,则将图片保存到指定路径
ps = s if isinstance(s, SlidePicture) else None
ps.PictureFill.Picture.EmbedImage.Image.Save("幻灯片图片/图_"+str(i)+".png")
i += 1
# 确定形状是否为PictureShape类型
if isinstance(s, PictureShape):
# 如果是,则将图片保存到指定路径
ps = s if isinstance(s, PictureShape) else None
ps.EmbedImage.Image.Save("幻灯片图片/图_"+str(i)+".png")
i += 1
ppt.Dispose()

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
设置适当的页边距是创建专业 Word 文档的重要步骤。页边距看似是一个小细节,但在提升文档外观方面却起着至关重要的作用。页边距控制了文档内容周围的空白空间,能够帮助保持内容布局的平衡,提升文档的展示效果。本文将介绍如何使用 Spire.Doc for Python 通过 Python 程序设置 Word 文档页边距。
本教程需要用到 Spire.Doc for Python 和 plum-dispatch v1.7.4。可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.Doc如果您不确定如何安装,请参考此教程:如何在 Windows 中安装 Spire.Doc for Python
Spire.Doc for Python 在 Margins 类下提供了一些属性,可用于设置文档页面四边的边距。需要注意页边距是根据节设置的,如果需要使整个文档的页边距保持一致,就要遍历文档的每个节来设置相同的页边距。以下是设置页边距的详细操作步骤:
from spire.doc import *
from spire.doc.common import *
# 创建Document类的对象
doc = Document()
# 读取Word文档
doc.LoadFromFile("示例.docx")
# 遍历文档的每个节
for i in range(doc.Sections.Count):
# 获取节
section = doc.Sections.get_Item(i)
# 获取节的页边距
margins = section.PageSetup.Margins
# 设置上下左右页边距
margins.Top = 17.9
margins.Bottom = 17.9
margins.Left = 20.9
margins.Right = 20.9
# Margins.All = 17.9
# 保存文档
doc.SaveToFile("output/设置页边距.docx", FileFormat.Auto)

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.Doc 11.10.3已发布。该版本新增了转换Word到PDF时文本整形的功能且支持 .NET 4.6.2及以上、 .NET Core 和 .NET Standard平台。详情请阅读以下内容。
新功能:
Document doc = new Document();
doc.LoadFromFile(https://cdn.e-iceblue.cn/fileName);
doc.LayoutOptions.UseHarfBuzzTextShaper = true;
doc.SaveToFile(pdfFileName, Spire.Doc.FileFormat.PDF)Spire.PDF for Android via Java 9.10.1已发布。该版本支持在加密PDF文档时设置加密选项以及支持判断PDF文档流是否被加密。 此外,它还新增了支持将PDF转换为Word的新方法。详情请阅读以下内容。
新功能:
PdfDocument pdfdoc = new PdfDocument();
pdfdoc.loadFromFile(inputFile);
PdfSecurityPolicy securityPolicy = new PdfPasswordSecurityPolicy("123", "e-iceblue");
securityPolicy.setEncryptionAlgorithm(PdfEncryptionAlgorithm.AES_128);
securityPolicy.setEncryptMetadata(false);
pdfdoc.encrypt(securityPolicy);
pdfdoc.saveToFile(outputFile);FileInputStream stream_1 = new FileInputStream(new File(inputFile_1));
boolean isPasswordProtected_1 = PdfDocument.isPasswordProtected(stream_1);PdfToWordConverter convert = new PdfToWordConverter(inputFile);
convert.saveToDocx(outputFile);https://www.e-iceblue.cn/Downloads/pdf-for-android-via-java.html