通常情况下,Microsoft Word 只支持添加一个文本字样的水印到 Word 文档。为满足更多元化的文档创建需求,本文将介绍一种在 Word 文档中添加多行文字水印的方法,下面,通过使用 Spire.Doc for .NET 来展示具体实现的方法及步骤。
首先,您需要将 Spire.Doc for.NET 包含的 DLL 文件作为引用添加到您的 .NET 项目中。DLL 文件可以从此链接下载,也可以通过 NuGet 安装。
PM> Install-Package Spire.Doc在 Word 中添加多行文本水印,即水印文本以多行多列平铺的方式铺满文档页面。实现的方法是通过在页眉中添加形状艺术字,并通过多次复制形状来模拟实现多行文字水印效果。以下是实现水印添加的主要代码步骤:
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
namespace MultiLineTextWatermark
{
class Program
{
static void Main(string[] args)
{
//加载Word文档
Document doc = new Document();
doc.LoadFromFile("Sample.docx");
//创建形状,并设置大小、文本内容、位置及样式
ShapeObject shape = new ShapeObject(doc, ShapeType.TextPlainText);
shape.Width = 60;
shape.Height =15;
shape.VerticalPosition = 25;
shape.HorizontalPosition = 20;
shape.Rotation = 320;
shape.WordArt.Text = "内部使用";
shape.WordArt.FontFamily = "宋体";
shape.FillColor = System.Drawing.Color.Red;
shape.StrokeColor = System.Drawing.Color.Red;
//遍历所有section
for (int n = 0; n < doc.Sections.Count; n++)
{
Section section = doc.Sections[n];
//获取页眉
HeaderFooter header = section.HeadersFooters.Header;
//添加段落到页眉
Paragraph paragraph1 = header.AddParagraph();
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 6; j++)
{
//复制形状并设置多行多列位置
shape = (ShapeObject)shape.Clone();
shape.VerticalPosition = 50 + 150 * i;
shape.HorizontalPosition = 20 + 160 * j;
//添加形状到段落
paragraph1.ChildObjects.Add(shape);
}
}
}
//保存文档
doc.SaveToFile("result.docx", FileFormat.Docx2013);
}
}
}Imports Spire.Doc
Imports Spire.Doc.Documents
Imports Spire.Doc.Fields
Namespace MultiLineTextWatermark
Class Program
Private Shared Sub Main(args As String())
'加载Word文档
Dim doc As New Document()
doc.LoadFromFile("Sample.docx")
'创建形状,并设置大小、文本内容、位置及样式
Dim shape As New ShapeObject(doc, ShapeType.TextPlainText)
shape.Width = 60
shape.Height = 15
shape.VerticalPosition = 25
shape.HorizontalPosition = 20
shape.Rotation = 320
shape.WordArt.Text = "内部使用"
shape.WordArt.FontFamily = "宋体"
shape.FillColor = System.Drawing.Color.Red
shape.StrokeColor = System.Drawing.Color.Red
'遍历所有section
For n As Integer = 0 To doc.Sections.Count - 1
Dim section As Section = doc.Sections(n)
'获取页眉
Dim header As HeaderFooter = section.HeadersFooters.Header
'添加段落到页眉
Dim paragraph1 As Paragraph = header.AddParagraph()
For i As Integer = 0 To 4
For j As Integer = 0 To 5
'复制形状并设置多行多列位置
shape = DirectCast(shape.Clone(), ShapeObject)
shape.VerticalPosition = 50 + 150 * i
shape.HorizontalPosition = 20 + 160 * j
'添加形状到段落
paragraph1.ChildObjects.Add(shape)
Next
Next
Next
'保存文档
doc.SaveToFile("result.docx", FileFormat.Docx2013)
End Sub
End Class
End Namespace
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
本文将介绍如何使用Spire.Doc for Java转换Word到图片并设置图片的分辨率。
import com.spire.doc.Document;
import com.spire.doc.documents.ImageType;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
public class SetImageResolution {
public static void main(String[] args) throws Exception {
//创建Document实例
Document doc = new Document();
//加载Word文档
doc.loadFromFile("Example.docx");
//转换到图片并设置图片的分辨率
BufferedImage[] images = doc.saveToImages(0, doc.getPageCount(), ImageType.Bitmap, 500, 500);
int i = 0;
for (BufferedImage image : images
) {
//保存为.png文件格式
File file = new File( "output/" + String.format(("Img-%d.png"), i));
ImageIO.write(image, "PNG", file);
i++;
}
}
}

前面我们介绍了如何使用 Spire.Doc for Java 添加文本水印和图片水印到 Word 文档。该文将详细介绍在Word页眉中添加艺术字实现Word文档中多行文字水印效果。
添加多行文本水印:
import com.spire.doc.*;
import com.spire.doc.documents.*;
import com.spire.doc.fields.ShapeObject;
import java.awt.*;
public class WordWatermark {
public static void main(String[] args) {
//加载示例文档
Document doc = new Document();
doc.loadFromFile("Sample.docx");
//添加艺术字并设置大小
ShapeObject shape = new ShapeObject(doc, ShapeType.Text_Plain_Text);
shape.setWidth(60);
shape.setHeight(20);
//设置艺术字文本内容、位置及样式
shape.setVerticalPosition(30);
shape.setHorizontalPosition(20);
shape.setRotation(315);
shape.getWordArt().setFontFamily("宋体");
shape.getWordArt().setText("内部使用");
shape.setFillColor(Color.red);
shape.setLineStyle(ShapeLineStyle.Single);
shape.setStrokeColor(new Color(192, 192, 192, 255));
shape.setStrokeWeight(1);
Section section;
HeaderFooter header;
for (int n = 0; n < doc.getSections().getCount(); n++) {
section = doc.getSections().get(n);
//获取section的页眉
header = section.getHeadersFooters().getHeader();
Paragraph paragraph;
if (header.getParagraphs().getCount() > 0) {
//如果页眉有段落,取它第一个段落
paragraph = header.getParagraphs().get(0);
} else {
//否则新增加一个段落到页眉
paragraph = header.addParagraph();
}
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 3; j++) {
//复制艺术字并设置多行多列位置
shape = (ShapeObject) shape.deepClone();
shape.setVerticalPosition(50 + 150 * i);
shape.setHorizontalPosition(20 + 160 * j);
paragraph.getChildObjects().add(shape);
}
}
}
//保存文档
doc.saveToFile("result.docx", FileFormat.Docx_2013);
}
}
效果图:

文档对比功能可以用于核对 Word 文档的不同版本,以确定对文档所做的更改。通过使用文档对比功能,用户可以轻松找出文档中增加、删除和修改的内容,以及格式的调整。本文将介绍如何使用 Spire.Doc for Java 通过 Java 程序比较两个 Word 文档。
下图展示了用于比较的两个 Word 文档。

首先,您需要在 Java 程序中添加 Spire.Doc.jar 文件作为依赖项。您可以从此链接下载 JAR 文件;如果您使用 Maven,则可以通过在 pom.xml 文件中添加以下代码导入 JAR 文件。
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.doc</artifactId>
<version>14.9.5</version>
</dependency>
</dependencies>
使用 Document.compare() 方法对比两个文档后,可以将比较结果保存到新的 Word 文档中,从而方便查看对原始文档所做的所有改动。 以下是详细操作步骤:
import com.spire.doc.Document;
public class compareDocuments {
public static void main(String[] args) {
//创建两个Document类的对象
Document original = new Document();
Document revised = new Document();
//载入原文档和修改后的文档
original.loadFromFile("第二版.docx");
revised.loadFromFile("第三版.docx");
//比较两个文档
original.compare(revised, "李阳");
//保存比较结果
original.saveToFile("比较结果.docx");
original.dispose();
revised.dispose();
}
}
如果只需要获取插入和删除的内容,可以在对比文档后使用 DifferRevisions.getInsertRevisions() 和 DifferRevisions.getDeleteRevisions() 方法获取插入改动和删除改动。以下是详细操作步骤:
import com.spire.doc.DifferRevisions;
import com.spire.doc.Document;
import com.spire.doc.fields.TextRange;
import com.spire.ms.System.Collections.Generic.List;
public class getInsertionDeletion {
public static void main(String[] args) {
//创建两个Document类的对象
Document doc1 = new Document();
Document doc2 = new Document();
//载入原文档
doc1.loadFromFile("第二版.docx");
//载入修改后的文档
doc2.loadFromFile("第三版.docx");
//比较两个Word文档
doc1.compare(doc2, "李阳");
//获取文档中的改动
DifferRevisions differRevisions = new DifferRevisions(doc1);
//获取插入改动列表
java.util.List<DocumentObject> insertRevisionsList = differRevisions.getInsertRevisions();
//获取删除改动列表
java.util.List<DocumentObject> deleteRevisionsList = differRevisions.getDeleteRevisions();
int m = 0;
int n = 0;
//循环遍历插入改动列表以获取所有插入内容
for (int i = 0; i < insertRevisionsList.size(); i++)
{
if (insertRevisionsList.get(i) instanceof TextRange)
{
m += 1;
//获取指定插入改动,并获取插入的具体内容
TextRange textRange = (TextRange)insertRevisionsList.get(i) ;
System.out.println("插入 #" + m + ":" + textRange.getText());
}
}
System.out.println("============================================");
//循环遍历删除改动列表以获取所有插入内容
for (int i = 0; i < deleteRevisionsList.size() ; i++)
{
if (deleteRevisionsList.get(i) instanceof TextRange)
{
n += 1;
//获取指定删除改动,并获取删除的具体内容
TextRange textRange = (TextRange) deleteRevisionsList.get(i) ;
System.out.println("删除 #" + n + ":" + textRange.getText());
}
}
doc1.dispose();
doc2.dispose();
}
}
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
本文介绍使用Spire.PDF for Java 获取PDF页面大小的方法。设置页面大小可参考这篇文章。
import com.spire.pdf.*;
import com.spire.pdf.graphics.PdfGraphicsUnit;
import com.spire.pdf.graphics.PdfUnitConvertor;
public class GetPageSize {
public static void main(String[] args) {
//加载PDF测试文档
PdfDocument pdf = new PdfDocument();
pdf.loadFromFile("test.pdf");
//获取第一页
PdfPageBase page = pdf.getPages().get(0);
//获取第一页页面宽度、高度
float pointWidth = (float) page.getSize().getWidth();
float pointHeight = (float) page.getSize().getHeight();
//将度量单位转换为厘米
PdfUnitConvertor unitCvtr = new PdfUnitConvertor();
float centimeterWidth = unitCvtr.convertUnits(pointWidth, PdfGraphicsUnit.Point, PdfGraphicsUnit.Centimeter);
float centimeterHeight = unitCvtr.convertUnits(pointHeight, PdfGraphicsUnit.Point, PdfGraphicsUnit.Centimeter);
//输出页面大小
System.out.println("该PDF的页面大小为(宽: " + pointWidth + "pt, 高: " + pointHeight + "pt).");
System.out.println("该PDF的页面大小为(宽: " + centimeterWidth + "cm, 高: " + centimeterHeight + "cm.)");
}
}
页面大小获取结果:

Spire.Doc for Java 3.8.8已发布。该版本新增如下功能:支持比较两个Word文档差异、支持清除单元格背景、支持转换Word到图片时设置分辨率;优化了加载及转换Word到PDF的时长;并修复了将HTML转为PDF、Word到PDF、转换Word到图片以及设置文本框背景色时出现的问题。新功能及问题修复详情如下。
新功能:
Document doc1 = new Document();
doc1.loadFromFile(inputFile_1);
Document doc2 = new Document();
doc2.loadFromFile(inputFile_2);
doc1.compare(doc2, "E-iceblue");
doc1.saveToFile(outputFile);
tablecell.getCellFormat().clearBackground();
doc.saveToImages(pageIndex, pageCount, ImageType.Bitmap, dpiX, dpiY);
优化:
问题修复:
Spire.Presentation 5.8.5已于今日发布。该版本新增了Insert和Append方法用于添加节,同时也支持为节添加、移动、删除幻灯片,以及获取节的索引和删除节。除此之外,一些在转换PPT到PDF、加载、操作文档时出现的问题也得以成功解决。详情见下文。
新功能:
Section sect01 = ppt.SectionList.Insert(0, "section1");
Section sect02 = ppt.SectionList.Append("section2");
ISlide slide01 = ppt.Slides.Append();
ISlide slide02 = ppt.Slides.Append();
Section section01 = ppt.SectionList.Add("section1", slide01);
Section section02 = ppt.SectionList.Insert(1, "section2");
Section section03 = ppt.SectionList.Append("section3");
//添加幻灯片
ISlide slide03 = ppt.SectionList.InsertSlide(section02, 0, slide01);
ISlide slide04 = section02.Insert(1, slide02);
section02.AddRange(new ISlide[] { slide03, slide04 });
//移动幻灯片
ppt.SectionList.MoveSlide(section03, 0, slide03);
section03.Move(1, slide04);
//删除幻灯片
ppt.SectionList.RemoveSlide(section03, 0);
section01.RemoveAt(0);
section02.RemoveRange(0, 3);
section03.Remove(slide04);
int index1 = ppt.SectionList.IndexOf(section01);
int index2 = section02.Index;
ppt.SectionList.RemoveAt(1);
ppt.SectionList.RemoveAll();
问题修复:
https://www.e-iceblue.cn/Downloads/Spire-Presentation-NET.html
本文介绍如何使用Spire.PDF for Java为PDF文档设置一个过期时间,文档过期后弹出警告信息并关闭当前文档。
import com.spire.pdf.actions.PdfJavaScriptAction;
public class ExpiryDate {
public static void main(String[] args) {
//创建PdfDocument对象
PdfDocument doc = new PdfDocument();
//加载一个PDF文档
doc.loadFromFile("C:\\Users\\Administrator\\Desktop\\sample-2.pdf");
//通过JavaScript设置过期时间,过期警告信息并关闭文档
String javaScript = "var rightNow = new Date();"
+ "var endDate = new Date('June 20, 2020 23:59:59');"
+ "if(rightNow.getTime() > endDate) {"
+ "app.alert('该文档已过期,请联系我们获取新文档',1);"
+ "this.closeDoc(); }";
//根据JS创建PdfJavaScriptAction
PdfJavaScriptAction js = new PdfJavaScriptAction(javaScript);
//将PdfJavaScriptAction设置为文档打开后的动作
doc.setAfterOpenAction(js);
//保存文档
doc.saveToFile("ExpiryDate.pdf", FileFormat.PDF);
}
}

便携式文档格式 (.pdf) 文件是在各行业中广泛使用的电子文档,但该格式的内容不易编辑,特别是对于文档中存在的表格数据,如果需要分析或者编辑其中的表格数据,Excel 格式的表格是一种更优于 PDF 的选择。当表格数据以 PDF 格式存在时,我们可以通过格式转换的方式将其转换为 Excel 来实现数据分析、编辑、提取或保存等操作。本文,我们将使用 Spire.PDF for Java 来介绍实现转换的具体方法及步骤。
首先,您需要在 Java 程序中添加 Spire.Pdf.jar 文件作为依赖项。JAR 文件可以从此链接下载。如果您使用 Maven,则可以将以下代码添加到项目的 pom.xml 文件中,从而在应用程序中导入 JAR 文件。
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.pdf</artifactId>
<version>12.9.0</version>
</dependency>
</dependencies>
转换时,可参考如下步骤:
import com.spire.pdf.*;
public class PDFtoExcel {
public static void main(String[] args) {
//创建PdfDocument实例
PdfDocument pdf = new PdfDocument();
//加载PDF文档
pdf.loadFromFile("test.pdf");
//保存为Excel
pdf.saveToFile("PDFToXLS.xlsx", FileFormat.XLSX);
}
}
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.PDF for Java 3.8.5现已发布。该版本支持转换PDF到Excel,同时一些在转换PDF到图片时出现的问题也得以成功解决。详情见下文。
新功能:
PdfDocument pdf = new PdfDocument();
pdf.loadFromFile(inputFile);
pdf.saveToFile(outputPath, FileFormat.XLSX);
问题修复: