Spire.Presentation for Java 4.5.3已发布。该版本新增方法支持通过流添加图片到PPT,优化了PPT转PDF的内存消耗过多的问题,同时还修复了插入的图片内容不正确的问题。详情请阅读以下内容。
新功能:
Presentation ppt = new Presentation();
ppt.loadFromFile("source.pptx");
ppt.setCustomFontsFolder("Fonts\\");
ppt.saveToFile("result.pdf", FileFormat.PDF);
Presentation ppt = new Presentation();
ppt.loadFromFile(inputFile);
FileInputStream fileInputStream=new FileInputStream(intputFile_Img);
IImageData imageData=ppt.getImages().append(fileInputStream);
SlidePicture slidePictrue=(SlidePicture) ppt.getSlides().get(0).getShapes().get(0);
slidePictrue.getPictureFill().getPicture().setEmbedImage(imageData);
ppt.saveToFile(outputFile, FileFormat.PPTX_2013);
问题修复:
https://www.e-iceblue.cn/Downloads/Spire-Presentation-JAVA.html
Spire.PDF for Java 4.5.10已发布。该版本优化了PDF转HTML生成结果文档的大小,修复了添加水印等时出现的问题。详情请阅读以下内容。
问题修复:
SVG 是一种基于 XML 的可缩放矢量图形格式,也是一种开放标准的图形标记语言。因为 SVG 与其他网页标准,如 CSS、 DOM、 JavaScript 等,有较好的兼容性,所以在网页制作中经常会用到。在制作网页时,如果想要将像 Excel 表格等 Office 文档直接添加到网页中展示,是非常困难的。但如果将这样的文档转换为 SVG 文件,就可以轻易呈现在网页上。本文将介绍如何使用 Spire.XLS for Java 将 Excel 文档转换为 SVG 文件。
首先,您需要在 Java 程序中添加 Spire.XLS for Java 文件作为依赖项。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.xls</artifactId>
<version>15.11.3</version>
</dependency>
</dependencies>
详细操作步骤如下:
import com.spire.xls.*;
import java.io.FileOutputStream;
import java.io.IOException;
public class ExcelToSVG {
public static void main(String[] args) throws IOException {
//创建 Workbook 类的对象
Workbook workbook = new Workbook();
//从磁盘加载 Excel 文档
workbook.loadFromFile("C:/示例/示例.xlsx");
//获取文档第二个表格
Worksheet sheet = workbook.getWorksheets().get(1);
//将第二个表格转换为 SVG 文件并保存
FileOutputStream stream = new FileOutputStream("sheet.svg");
sheet.toSVGStream(stream, sheet.getFirstRow(), sheet.getFirstColumn(), sheet.getLastRow(), sheet.getLastColumn());
stream.flush();
stream.close();
}
}
详细操作步骤如下:
import com.spire.xls.*;
import java.io.FileOutputStream;
import java.io.IOException;
public class ExcelToSVG {
public static void main(String[] args) throws IOException {
//创建 Workbook 类的对象
Workbook workbook = new Workbook();
//从磁盘加载 Excel 文档
workbook.loadFromFile("C:/示例/示例.xlsx");
//在文档的所有文档中循环获取所有表格
for (int i = 0; i < workbook.getWorksheets().size(); i++)
{
FileOutputStream stream = new FileOutputStream("sheet"+i+".svg");
//将表格转换为 SVG 文件并保存
Worksheet sheet = workbook.getWorksheets().get(i);
sheet.toSVGStream(stream, sheet.getFirstRow(), sheet.getFirstColumn(), sheet.getLastRow(), sheet.getLastColumn());
stream.flush();
stream.close();
}
}
}
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
本文介绍如何使用Spire.PDF for Java移除PDF文档中的数字签名。
import com.spire.pdf.PdfDocument;
import com.spire.pdf.widget.PdfFieldWidget;
import com.spire.pdf.widget.PdfFormWidget;
import com.spire.pdf.widget.PdfSignatureFieldWidget;
public class RemoveSignature {
public static void main(String[] args) {
//创建PdfDocument对象
PdfDocument pdf = new PdfDocument();
//加载PDF文档
pdf.loadFromFile("https://cdn.e-iceblue.cn/C:\\Users\\Administrator\\Desktop\\Signature.pdf");
//从文档获取form widget集合
PdfFormWidget widgets = (PdfFormWidget) pdf.getForm();
//遍历集合中的每一个元素
for (int i = 0; i < widgets.getFieldsWidget().getList().size(); i++)
{
//获取指定widget
PdfFieldWidget widget = (PdfFieldWidget)widgets.getFieldsWidget().getList().get(i);
//判断widget是否为PdfSignatureFieldWidget
if (widget instanceof PdfSignatureFieldWidget)
{
//删除数字签名widget
widgets.getFieldsWidget().remove(widget);
}
}
//保存文档
pdf.saveToFile("RemoveSignature.pdf");
}
}

当合并来自不同来源的数据集或复制其他工作表中的数据时,如果数据匹配不正确,可能会导致出现重复的行。这些重复行可能会扭曲数据分析和计算,从而产生不准确的结果。因此,删除重复行是一项经常需要执行的任务。本文将展示如何使用 Spire.XLS for .NET 以编程方式完成此任务。
首先,您需要将 Spire.XLS for .NET 包含的 DLL 文件作为引用添加到您的 .NET 项目中。DLL 文件可以从 此链接 下载,也可以通过 NuGet 安装。
PM> Install-Package Spire.XLS手动删除重复行是一项非常重复且耗时的任务。使用 Spire.XLS for .NET,您可以一次识别并删除所有重复行。详细步骤如下。
using Spire.Xls;
using System.Linq;
namespace RemoveDuplicateRows
{
class Program
{
static void Main(string[] args)
{
//创建Workbook实例
Workbook workbook = new Workbook();
//加载示例Excel文档
workbook.LoadFromFile("测试文档.xlsx");
//获取指定工作表
Worksheet sheet = workbook.Worksheets[0];
//指定需要删除重复记录的单元格区域
var range = sheet.Range["A1:A" + sheet.LastRow];
//获取重复的行号
var duplicatedRows = range.Rows
.GroupBy(x => x.Columns[0].DisplayedText)
.Where(x => x.Count() > 1)
.SelectMany(x => x.Skip(1))
.Select(x => x.Columns[0].Row)
.ToList();
//移除重复行
for (int i = 0; i < duplicatedRows.Count; i++)
{
sheet.DeleteRow(duplicatedRows[i] - i);
}
//保存结果文档
workbook.SaveToFile("删除重复行.xlsx");
}
}
}Imports Spire.Xls
Namespace RemoveDuplicateRows
Friend Class Program
Private Shared Sub Main(ByVal args As String())
'创建Workbook实例
Dim workbook As Workbook = New Workbook()
'加载示例Excel文档
workbook.LoadFromFile("测试文档.xlsx")
'获取指定工作表
Dim sheet As Worksheet = workbook.Worksheets(0)
'指定需要删除重复记录的单元格区域
Dim range = sheet.Range("A1:A" & sheet.LastRow.ToString())
'获取重复的行号
Dim duplicatedRows = range.Rows.GroupBy(Function(x) x.Columns(0).DisplayedText).Where(Function(x) x.Count() > 1).SelectMany(Function(x) x.Skip(1)).[Select](Function(x) x.Columns(0).Row).ToList()
'移除重复行
For i As Integer = 0 To duplicatedRows.Count - 1
sheet.DeleteRow(duplicatedRows(i) - i)
Next
'保存结果文档
workbook.SaveToFile("删除重复行.xlsx")
End Sub
End Class
End Namespace
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.XLS for Java 4.5.3已发布。该版本新增了getGroupBoxes方法支持获取分组框的功能,支持转换Excel到PDF时指定字体目录的功能,增强了转换Excel到PDF/图片的功能,此外,该版本还修复了添加图片到Excel后被拉伸的问题。详情请阅读以下内容。
新功能:
Workbook workbook = new Workbook();
workbook.loadFromFile(inputFile);
Worksheet worksheet = workbook.getWorksheets().get(0);
IGroupBoxes groupBoxs = worksheet.getGroupBoxes();
Workbook workbook = new Workbook();
workbook.loadFromFile(https://cdn.e-iceblue.cn/inputFile);
workbook.setCustomFontFileDirectory(new String[]{.DataFont});
Hashtable hashtable = workbook.getCustomFontParsedResult();
workbook.saveToFile(outputFile, FileFormat.PDF);
workbook.dispose();
调整:
问题修复:
本文介绍如何使用Spire.Doc for Java获取Word文档中指定图片的坐标位置、图片大小以及图片的文字环绕方式等。
import com.spire.doc.*;
import com.spire.doc.documents.DocumentObjectType;
import com.spire.doc.documents.Paragraph;
import com.spire.doc.fields.DocPicture;
public class GetPictureDetails {
public static void main(String[] args) {
//加载Word测试文档
Document doc = new Document();
doc.loadFromFile("测试.docx");
//遍历section
for (int a = 0; a<doc.getSections().getCount();a++)
{
Section section = doc.getSections().get(a);
//遍历paragraph段落
for (int b =0 ;b<section.getParagraphs().getCount();b++)
{
Paragraph paragraph = section.getParagraphs().get(b);
//遍历段落中的对象
for (int i = 0; i < paragraph.getChildObjects().getCount(); i++)
{
DocumentObject docobj = paragraph.getChildObjects().get(i);
//判断对象是否为图片
if (docobj.getDocumentObjectType()== DocumentObjectType.Picture)
{
DocPicture picture = (DocPicture) docobj ;
//获取标题为“图片1”的图片
if (picture.getTitle().equals("图片1"))
{
//获取图片坐标位置
float x = picture.getHorizontalPosition();
float y = picture.getVerticalPosition();
//获取图片宽度、高度
float width = picture.getWidth();
float height = picture.getHeight();
//获取图片文字环绕
String wrappingstyle = picture.getTextWrappingStyle().toString();//图片文字环绕方式
String wrappingtype = picture.getTextWrappingType().toString();//环绕文字类型
System.out.println("坐标位置为: X =" + x + " Y=" + y
+ "\n 图片宽:"+ width + " 图片高:" + height
+ "\n 图片的文字环绕方式:" + wrappingstyle + " 环绕文字类型:" + wrappingtype);
}
}
}
}
}
}
}
获取结果:

Spire.PDF 7.5.7已发布。该版本支持PDF签名添加时间戳时设置用户名和密码,优化了转换PDF到图片/SVG/Excel的功能,并且还修复了合并和打印PDF文档等时出现的问题。详情请阅读以下内容。
新功能:
static void Main(string[] args)
{
X509Certificate2 x509 = new X509Certificate2(inputFile_pfx, password);
PdfDocument doc = new PdfDocument();
doc.LoadFromFile(inputFile);
PdfPKCS7Formatter formatter = new PdfPKCS7Formatter(x509, false);
formatter.TimestampService = new TSAHttpService("http://time.certum.pl");
PdfOrdinarySignatureMaker signatureMaker = new PdfOrdinarySignatureMaker(doc, formatter);
IPdfSignatureAppearance signatureAppearance = new PdfCustomSignatureAppearance();
signatureMaker.MakeSignature("sign", doc.Pages[0], 100, 100, 100, 100, signatureAppearance);
doc.SaveToFile(outputFile, FileFormat.PDF);
doc.Close();
}
public class PdfCustomSignatureAppearance : IPdfSignatureAppearance
{
public void Generate(PdfCanvas g)
{
float fontSize = 10;
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", fontSize), true);
g.DrawString("AAAAAAAAAAA", font, PdfBrushes.Red, new PointF(0, 0));
}
}
string url = "http://test1.tsa.cn/tsa";
signature.ConfigureTimestamp(url, "tsademo", "tsademo");
问题修复:
本文介绍如何使用Spire.PDF for Java在PDF文档中添加多级列表。
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfNumberStyle;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.PdfPageSize;
import com.spire.pdf.graphics.*;
import com.spire.pdf.lists.PdfListItem;
import com.spire.pdf.lists.PdfOrderedMarker;
import com.spire.pdf.lists.PdfSortedList;
import java.awt.*;
import java.awt.geom.Point2D;
public class CreateMultiLevelList {
public static void main(String[] args) {
//创建PdfDocument对象
PdfDocument doc = new PdfDocument();
//设置页边距
PdfMargins margin = new PdfMargins(60, 60, 40, 40);
//添加一页
PdfPageBase page = doc.getPages().add(PdfPageSize.A4, margin);
//初始化x,y坐标
float x = 0;
float y = 15;
//创建两个画刷
PdfBrush blackBrush = PdfBrushes.getBlack();
PdfBrush purpleBrush = PdfBrushes.getPurple();
//创建两个字体
PdfTrueTypeFont titleFont = new PdfTrueTypeFont(new Font("微软雅黑",Font.BOLD,9),true);
PdfTrueTypeFont listFont = new PdfTrueTypeFont(new Font("微软雅黑",Font.PLAIN,9),true);
//在指定位置绘制标题
String title = "XHTML常见问题 :";
page.getCanvas().drawString(title, titleFont, blackBrush, x, y);
y = y + (float) titleFont.measureString(title).getHeight();
y = y + 5;
//创建两个ordered makers,用于设置有序列表的符号
PdfOrderedMarker marker1 = new PdfOrderedMarker(PdfNumberStyle.Upper_Roman, listFont);
PdfOrderedMarker marker2 = new PdfOrderedMarker(PdfNumberStyle.Numeric, listFont);
//创建一个父列表
String parentListContent = "XHTML 1.0简介\n"
+ "标签和属性语法介绍";
PdfSortedList parentList = new PdfSortedList(parentListContent);
parentList.setFont(listFont);
parentList.setIndent(8);
parentList.setBrush(purpleBrush);
parentList.setMarker(marker1);
//创建一个列表 - "subList_1"
String subListContent_1 = "什么是XHTML?\n"
+ "XHMTL文档是什么样的?\n"
+ "XHTML和HTML之间有什么关系?\n"
+ "XHTML和XML之间有什么关系?";
PdfSortedList subList_1 = new PdfSortedList(subListContent_1);
subList_1.setIndent(16);
subList_1.setFont(listFont);
subList_1.setBrush(purpleBrush);
subList_1.setMarker(marker2);
//创建另一个列表 -"subList_2"
String subListContent_2 = "什么是XHTML的元素?\n"
+ "如何在XHTML文档中添加注释?\n"
+ "如何为XHTML元素写一个开始标签?";
PdfSortedList subList_2 = new PdfSortedList(subListContent_2);
subList_2.setIndent(16);
subList_2.setFont(listFont);
subList_2.setBrush(purpleBrush);
subList_2.setMarker(marker2);
//将subList_1设置为父列表第一个元素下的子列表
PdfListItem item_1 = parentList.getItems().get(0);
item_1.setSubList(subList_1);
//将subList_2设置为父列表第二个元素下的子列表
PdfListItem item_2 = parentList.getItems().get(1);
item_2.setSubList(subList_2);
//绘制父列表到指定位置
PdfTextLayout textLayout = new PdfTextLayout();
textLayout.setBreak(PdfLayoutBreakType.Fit_Page);
textLayout.setLayout(PdfLayoutType.Paginate);
parentList.draw(page,new Point2D.Float(x,y),textLayout);
//保存文档
doc.saveToFile("MultiLevelList.pdf");
}
}

本文将介绍如何使用Spire.Doc for Java验证Word文档的限制编辑密码是否正确。
import com.spire.doc.Document;
public class VerifyRestrictEditingPassword {
public static void main(String[] args) {
//创建Document实例
Document document = new Document();
//加载Word文档
document.loadFromFile("https://cdn.e-iceblue.cn/Input.docx");
//验证文档的限制编辑密码是否正确
boolean result = document.checkProtectionPassWord("123");
if(!result) {
System.out.println("密码错误!");
}
else {
System.out.println("密码正确!");
}
}
}
结果:
