图片在有效传达复杂想法或概念方面起着重要作用。当 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 不仅支持在 Word 中插入图片,还支持替换现有图片。以下是在 Word 中获取特定图片并将其替换为新图片的详细步骤。
from spire.doc import *
from spire.doc.common import *
# 创建Document对象
doc = Document()
# 加载Word文档
doc.LoadFromFile("示例.docx")
# 创建一个列表来存储图片
pictures = []
# 遍历文档中的所有节
for i in range(doc.Sections.Count):
sec = doc.Sections.get_Item(i)
# 遍历每一节中的所有段落
for j in range(sec.Paragraphs.Count):
para = sec.Paragraphs.get_Item(j)
# 遍历每个段落中的所有子对象
for k in range(para.ChildObjects.Count):
docObj = para.ChildObjects.get_Item(k)
# 查找图片并将其添加到列表中
if docObj.DocumentObjectType == DocumentObjectType.Picture:
pictures.append(docObj)
# 用新图片替换列表中的第一张图片
picture = pictures[0] if isinstance(pictures[0], DocPicture) else None
picture.LoadImage("图片.png")
# 保存结果文档
doc.SaveToFile("替换图片.docx", FileFormat.Docx)
doc.Close()
Spire.Doc for Python 没有提供用文本替换图片的直接方法,但您可以通过在图片位置插入文本,然后删除文档中的图片来实现这一功能。以下是用文本替换 Word 文档中所有图片的详细步骤:
from spire.doc import *
from spire.doc.common import *
# 创建Document对象
doc = Document()
# 加载Word文档
doc.LoadFromFile("示例.docx")
j = 1
# 遍历文档中的所有节
for k in range(doc.Sections.Count):
sec = doc.Sections.get_Item(k)
# 遍历每一节中的所有段落
for m in range(sec.Paragraphs.Count):
para = sec.Paragraphs.get_Item(m)
# 创建一个列表来存储图片
pictures = []
# 查找图片并将其添加到列表中
for x in range(para.ChildObjects.Count):
docObj = para.ChildObjects.get_Item(x)
if docObj.DocumentObjectType == DocumentObjectType.Picture:
pictures.append(docObj)
# 遍历列表中的所有图片,并用文本替换它们
for pic in pictures:
index = para.ChildObjects.IndexOf(pic)
textRange = TextRange(doc)
textRange.Text = "这是图片 {0}".format(j)
para.ChildObjects.Insert(index, textRange)
para.ChildObjects.Remove(pic)
j += 1
# 保存结果文档
doc.SaveToFile("文本替换图片.docx", FileFormat.Docx)
doc.Close()
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
在进行 Word 文档格式化时,调整段落的段前间距和段后间距是一种常见需求。通过设置段前和段后间距,可以显著提升文档的可读性、美观性和排版效果。这样做不仅可以使文档更舒适地呈现给读者,还能够让读者更加轻松地理解文本的逻辑结构和段落之间的关系。
合理设置段落间距也是非常重要的。适当的间距可以将不同段落清晰地区分开来,使其之间的界限更加明确。这样一来,读者就能更容易地辨认每个段落,并更好地理解它们之间的联系与转换。
在本文中,我们将学习如何利用 Spire.Doc for 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 提供了 ParagraphFormat 类用于处理段落格式。您可以使用 Paragraph.Format 方法获取 ParagraphFormat 类的对象,然后使用下面的方法设置对应的段落段前、段后值:
| 方法 | 方法解释 |
| ParagraphFormat.BeforeAutoSpacing = bool value | 设置段前间距是否自动变化 |
| ParagraphFormat.BeforeSpacing = float value | 设置固定的段前间距值 |
| ParagraphFormat.AfterAutoSpacing = bool value | 设置段后间距是否自动变化 |
| ParagraphFormat.AfterSpacing = float value | 设置固定的段后间距值 |
下面介绍如何对给新增的段落设置段前、段后间距,下面步骤的主要逻辑就是给加载的 Word 文档新增一个文本内容的段落,并为其设置字体颜色、字体大小;然后设置该段落的段前、段后间距,最后保存结果文档到指定目录。
import os
from spire.doc import *
from spire.doc.common import *
# 输入文件路径
inputFile = " sampleForPython.docx"
# 输出文件路径
outputFile = "SetSpacing_python.docx"
# 创建Word文档对象
document = Document()
# 从磁盘加载文件
document.LoadFromFile(inputFile)
# 向文档中新增一个段落
para = Paragraph(document)
# 向段落中插入文本
textRange1 = para.AppendText("这是一个新增的段落。")
# 设置文本颜色为蓝色
textRange1.CharacterFormat.TextColor = Color.get_Blue()
# 设置文本字体大小为15pt
textRange1.CharacterFormat.FontSize = 15
# 获取ParagraphFormat对象
paraFormat = para.Format
# 设置段前的间距为10pt
paraFormat.BeforeAutoSpacing = False
paraFormat.BeforeSpacing = 10
# 设置段后的间距为10pt
paraFormat.AfterAutoSpacing = False
paraFormat.AfterSpacing = 10
# 将添加的段落插入到Word文档中
document.Sections.get_Item(0).Paragraphs.Insert(1, para)
# 保存到文件
document.SaveToFile(outputFile, FileFormat.Docx2013)
document.Close()
我们用 Spire.Doc for Python 格式化文档段落时,更多的场景是需要批量对某些段落进行段前、段后间距的设置以此来提高效率。下面就介绍如何批量对拥有相同样式的段落设置段前、段后间距。下面看看具体实现步骤:
对于符合需求的段落设置段前、段后间距,就和给新增段落设置段前、段后间距一样,如下步骤:
import os
from spire.doc import *
from spire.doc.common import *
# 输入文件路径
inputFile = " sampleForPython.docx"
# 输出文件路径
outputFile = "SetSpacingMuti_python1.docx"
# 创建Word文档对象
document = Document()
# 从磁盘加载文件
document.LoadFromFile(inputFile)
# 遍历文档中的所有setion
for i in range(document.Sections.Count):
# 获取当前section
section = document.Sections.get_Item(i)
# 遍历当前section的所有段落
for j in range(section.Paragraphs.Count):
# 获取当前段落
para = section.Paragraphs.get_Item(j)
# 判断样式名称是否为“Heading1”
if para.StyleName == "Heading1":
# 获取ParagraphFormat对象
paraFormat = para.Format
# 设置段前的间距为固定值20pt
paraFormat.BeforeAutoSpacing = False
paraFormat.BeforeSpacing = 20
# 设置段后的间距为固定值20pt
paraFormat.AfterAutoSpacing = False
paraFormat.AfterSpacing = 20
# 保存到文件
document.SaveToFile(outputFile, FileFormat.Docx2013)
document.Close()
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.XLS for Java 13.11.0已发布。该版本新增支持从“名称管理器”中获取注释的功能。同时,也增强了从Excel到PDF的转换功能。此外,一些已知问题也在该版本中被成功修复,如读取Excel文档时,程序抛出“Invalid ValidationAlertType"的问题。详情请阅读以下内容。
新功能:
Workbook workbook = new Workbook();
workbook.loadFromFile(inputFile);
INameRanges nameManager = workbook.getNameRanges();
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0;i < nameManager.getCount();i++)
{
XlsName name = (XlsName) nameManager.get(i);
stringBuilder.append("Name:" + name.getName() + ", Comment: " +name.getCommentValue() + "\r\n");
}
workbook.dispose();问题修复:
Spire.Doc 11.11.0 已发布。本次更新增强了 Word、HTML 和 ODT 到 PDF 转换功能以及 Word 到图片和 PDF 的转换功能。此外,一些已知问题也在该版本中得到修复,如将一 Doc 格式文档另存为新文档后编辑限制效果丢失的问题。详情请阅读以下内容。
问题修复:
更改幻灯片大小是保持 PPT 文档视觉完整性的方法之一。通过根据目标屏幕或投影设备的特定长宽比和尺寸来调整幻灯片大小,可以避免出现内容被裁剪、拉伸或扭曲等问题。在本文中,您将学习如何使用 Spire.Presentation for .NET 通过 C# 代码更改 PowerPoint 演示文稿的幻灯片大小。
首先,您需要添加 Spire.Presentation for .NET 包中包含的 DLL 文件作为 .NET 项目中的引用。DLL 文件可以从此链接下载或通过 NuGet 安装。
PM> Install-Package Spire.PresentationSpire.Presentation for .NET 提供的 Presentation.SlideSize.Type 属性可用于设置或更改幻灯片大小为预设尺寸。具体步骤如下。
using Spire.Presentation;
namespace CreateCombination
{
class Program
{
static void Main(string[] args)
{
//创建Presentation对象
Presentation ppt = new Presentation();
//加载PPT文档
ppt.LoadFromFile("模板.pptx");
//更改PPT幻灯片大小
ppt.SlideSize.Type = SlideSizeType.Screen4x3;
//保存结果文档
ppt.SaveToFile("预定义幻灯片大小.pptx", FileFormat.Pptx2013);
ppt.Dispose();
}
}
}

自定义幻灯片大小需要先将幻灯片尺寸类型更改为自定义 Custom,然后通过 Presentation.SlideSize.Size 属性设置所需的大小。具体步骤如下。
using Spire.Presentation;
using System.Drawing;
namespace CreateCombination
{
class Program
{
static void Main(string[] args)
{
//创建Presentation对象
Presentation ppt = new Presentation();
//加载PPT文档
ppt.LoadFromFile("模板.pptx");
//将幻灯片尺寸类型更改为自定义
ppt.SlideSize.Type = SlideSizeType.Custom;
//设置幻灯片尺寸
ppt.SlideSize.Size = new SizeF(900, 600);
//保存结果文档
ppt.SaveToFile("自定义幻灯片大小.pptx", FileFormat.Pptx2013);
ppt.Dispose();
}
}
}

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.PDF 9.11.0已发布。该版本增强了PDF到图片和SVG的转换功能。此外,还修复了一系列其他已知问题,例如打印PDF时部分文本显示不清晰的问题。详情请阅读以下内容。
问题修复:
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
通过使用 Spire.PDF for Python 提供的 PdfDocument.Pages.Insert() 或 PdfDocument.Pages.Add(SizeF, PdfMargins) 方法,您可以轻松地将空白页添加到 PDF 中的特定位置或文档末尾。具体步骤如下:
from spire.pdf.common import *
from spire.pdf import *
# 创建PdfDocument对象
pdf = PdfDocument()
# 加载PDF文档
pdf.LoadFromFile("文档.pdf")
# 在文档中插入空白页作为第二页
pdf.Pages.Insert(1)
# 在文档末尾添加空白页
pdf.Pages.Add(PdfPageSize.A4(), PdfMargins(0.0, 0.0))
# 保存结果文件
pdf.SaveToFile("Output\添加页面.pdf")
pdf.Close()

要从 PDF 中删除指定页面,可以使用 PdfDocument.Pages.RemoveAt() 方法。具体步骤如下:
from spire.pdf.common import *
from spire.pdf import *
# 创建PdfDocument对象
pdf = PdfDocument()
# 加载PDF文档
pdf.LoadFromFile("文档.pdf")
# 删除文件第二页
pdf.Pages.RemoveAt(1)
# 保存结果文件
pdf.SaveToFile("Output\删除页面.pdf")
pdf.Close()

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
在对 Word 文档进行格式化时,设置段落的段前间距、段后间距是我们经常碰到的场景,设置段前、段后间距可以改善文档的可读性、美观性以及排版效果;同时适当的段落间距可以使不同段落之间更加明确地区分开来,让读者更容易理解文本的逻辑结构和段落之间的关系。在本文中,您将学习如何使用 Spire.Doc for C++ 给新增的段落设置段前、段后间距以及如何批量给同类型的段落设置段前、段后间距。
有两种方法可以将 Spire.Doc for C++ 集成到您的应用程序中。一种方法是通过 NuGet 安装它,另一种方法是从我们的网站下载包并将库复制到您的程序中。通过 NuGet 安装更简单,更推荐使用。您可以通过访问以下链接找到更多详细信息。
如何将 Spire.Doc for C++ 集成到 C++ 程序中
Spire.Doc for C++ 提供了 ParagraphFormat 类用于处理段落格式。您可以使用 Paragraph->GetFormat() 方法获取 ParagraphFormat 类的对象,然后使用下面的方法设置对应的段落段前、段后值:
| 方法 | 方法解释 |
| para->GetFormat()->SetBeforeAutoSpacing(bool value); | 设置段前间距是否自动变化 |
| para->GetFormat()->SetBeforeSpacing(float value); | 设置固定的段前间距值 |
| para->GetFormat()->SetAfterAutoSpacing(bool value); | 设置段后间距是否自动变化 |
| para->GetFormat()->SetAfterSpacing(float value); | 设置固定的段后间距值 |
下面介绍如何对给新增的段落设置段前、段后间距,下面步骤的主要逻辑就是给加载的 Word 文档新增一个文本内容的段落,并为其设置字体颜色、字体大小;然后设置该段落的段前、段后间距,最后保存结果文档到指定目录。
#include "../include/Spire.Doc.o.h"
using namespace Spire::Doc;
using namespace std;
int main()
{
// 输入文件路径
wstring inputFile = L"sample.docx";
// 输出文件路径
wstring outputFile = L"result.docx";
// 创建Word文档对象
intrusive_ptr<Document> document = new Document();
// 从磁盘加载文件
document->LoadFromFile(inputFile.c_str());
// 向文档中新增一个段落
intrusive_ptr<Paragraph> para = new Paragraph(document);
// 向段落中添加文本字符串并设置样式
intrusive_ptr<TextRange> textRange1 = para->AppendText(L"这是插入的段落。");
textRange1->GetCharacterFormat()->SetTextColor(Color::GetBlue());
textRange1->GetCharacterFormat()->SetFontSize(15);
// 获取ParagraphFormat对象
intrusive_ptr<ParagraphFormat> format = para->GetFormat();
// 设置段前间距为固定值:10(磅)pt
format->SetBeforeAutoSpacing(false);
format->SetBeforeSpacing(10);
// 设置段后间距为固定值:10(磅)pt
format->SetAfterAutoSpacing(false);
format->SetAfterSpacing(10);
// 将添加的段落插入到Word文档中
document->GetSections()->GetItemInSectionCollection(0)->GetParagraphs()->Insert(1, para);
// 保存到文件
document->SaveToFile(outputFile.c_str(), FileFormat::Docx2013);
// 关闭文档
document->Close();
}
我们用 Spire.Doc for C++ 格式化文档段落时,更多的场景是需要批量对某些段落进行段前、段后间距的设置以此来提高效率。下面就介绍如何批量对拥有相同样式的段落设置段前、段后间距。下面看看具体实现步骤:
对于符合需求的段落设置段前、段后间距,就和给新增段落设置段前、段后间距一样,如下步骤:
#include "../include/Spire.Doc.o.h"
using namespace Spire::Doc;
using namespace std;
int main()
{
// 输入文件路径
wstring inputFile = L"sample.docx";
// 输出文件路径
wstring outputFile = L"result.docx";
// 创建Word文档对象
intrusive_ptr<Document> document = new Document();
// 从磁盘加载文件
document->LoadFromFile(inputFile.c_str());
// 遍历文档中的所有setion
for (int i = 0; i < document->GetSections()->GetCount(); i++)
{
// 获取当前section
intrusive_ptr<Section> section = document->GetSections()->GetItemInSectionCollection(i);
// 遍历当前section的所有段落
for (int j = 0; j < section->GetParagraphs()->GetCount(); j++)
{
// 获取当前段落
intrusive_ptr<Paragraph> paragraph = section->GetParagraphs()->GetItemInParagraphCollection(j);
// 获取当前段落的样式名称
wstring style_name = paragraph->GetStyleName();
// 判断样式名称是否为“Heading1”
if (style_name.compare(L"Heading1") == 0)
{
// 获取ParagraphFormat对象
intrusive_ptr<ParagraphFormat> format = paragraph->GetFormat();
// 设置段前间距为固定值:20(磅)pt
format->SetBeforeAutoSpacing(false);
format->SetBeforeSpacing(20);
// 设置段后间距为固定值:20(磅)pt
format->SetAfterAutoSpacing(false);
format->SetAfterSpacing(20);
}
}
}
// 保存到文件
document->SaveToFile(outputFile.c_str(), FileFormat::Docx2013);
// 关闭文档
document->Close();
}
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.Office for Java 8.10.2 已发布。在该版本中,Spire.XLS for Java 新增支持验证限制编辑的密码是否正确的方法;Spire.PDF for Java新增支持设置 AES 加密算法以及重置已有域的名字;Spire.Doc for Java将 AppendHorizonalLine() 方法同步到 Java中; Spire.Presentation for Java支持转换指定幻灯片到 SVG 以及转换 PPT 到 SVGZ。 此外,一些已知问题也在该版本中得到修复。详情请阅读以下内容。
获取 Spire.Office for Java 8.10.2请点击:https://www.e-iceblue.cn/Downloads/Spire-Office-JAVA.html
新功能:
worksheet.checkProtectionPassword(String password)问题修复:
新功能:
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("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);问题修复:
新功能:
paragraph.appendHorizonalLine()Document doc = New Document();
doc.loadFromFile(inputFile);
doc.saveFontFallbackRuleSettings(outputFile_xml);
doc.loadFontFallbackRuleSettings(outputFile_xml);
doc.saveToFile(outputFile, FileFormat.PDF);问题修复:
新功能:
Presentation ppt = new Presentation();
ppt.loadFromFile("input.pptx");
List<byte[]> bytes=ppt.saveToSVGZ();
for (int i=0;i<bytes.size();i++){
FileOutputStream fileOutputStream=new FileOutputStream("slide"+i+".svgz");
fileOutputStream.write(bytes.get(i));
fileOutputStream.flush();
fileOutputStream.close();
}Presentation ppt = new Presentation();
ppt.loadFromFile("input.pptx");
List<byte[]> bytes=ppt.saveToSVG(0,36);
for (int i=0;i<bytes.size();i++){
FileOutputStream fileOutputStream=new FileOutputStream("slide"+(i+1)+".svg");
fileOutputStream.write(bytes.get(i));
fileOutputStream.flush();
fileOutputStream.close();
}问题修复:
Spire.Presentation for Java 8.10.4 已发布。本次更新新增支持转换指定幻灯片到 SVG 以及转换 PPT 到 SVGZ。该版本还增强了 PPT 到 PDF 的转换功能。此外,一些已知问题也在该版本中得到修复,如加载 PPT 文档程序时抛异常 java.lang.NullPointerException 的问题。详情请阅读以下内容。
新功能:
Presentation ppt = new Presentation();
ppt.loadFromFile("input.pptx");
List<byte[]> bytes=ppt.saveToSVGZ();
for (int i=0;i<bytes.size();i++){
FileOutputStream fileOutputStream=new FileOutputStream("slide"+i+".svgz");
fileOutputStream.write(bytes.get(i));
fileOutputStream.flush();
fileOutputStream.close();
}Presentation ppt = new Presentation();
ppt.loadFromFile("input.pptx");
List<byte[]> bytes=ppt.saveToSVG(0,36);
for (int i=0;i<bytes.size();i++){
FileOutputStream fileOutputStream=new FileOutputStream("slide"+(i+1)+".svg");
fileOutputStream.write(bytes.get(i));
fileOutputStream.flush();
fileOutputStream.close();
}问题修复:
https://www.e-iceblue.cn/Downloads/Spire-Presentation-JAVA.html