冰蓝科技
|
028-81705109
|
|
微信扫一扫
|

Spire.Cloud 纯前端文档控件

本文介绍使用Spire.XLS for Java来获取Excel工作表中的超链接,包括获取超链接所在单元格坐标位置、超链接显示文本、超链接屏幕提示词、超链接地址、超链接类型等等。

如下用于测试的Excel文档,包含多种类型的超链接类型,包括链接到网页地址、邮件地址、文档位置、工作表单元格、网络路径等等,通过本文方法可一并获取。

Java 获取 Excel 中的超链接

import com.spire.xls.*;
import com.spire.xls.collections.HyperLinksCollection;

public class GetHyperlink {
    public static void main(String[] args) {
        //加载包含超链接的Excel工作簿
        Workbook wb = new Workbook();
        wb.loadFromFile("test.xlsx");

        //获取工作表
        Worksheet sheet = wb.getWorksheets().get(0);

        //获取超链接集合
        HyperLinksCollection hyperLinks = sheet.getHyperLinks();

        //遍历所有超链接
        for (int i = 0; i< hyperLinks.getCount();i++)
        {
            //获取包含超链接的单元格行、列坐标
            int row = hyperLinks.get(i).getRange().getRow();
            int column = hyperLinks.get(i).getRange().getColumn();

            //获取超链接文本、地址
            String text = hyperLinks.get(i).getTextToDisplay();
            String address = hyperLinks.get(i).getAddress();

            //输出超链接获取结果
            System.out.println(String.format("单元格[%d, %d] 显示文本:" ,row ,column)+ text +"\n"+ " 链接地址:"+ address);
        }
    }
}

超链接获取结果:

Java 获取 Excel 中的超链接

Spire.PDF 7.1已发布。该版本支持了自定义签名图片的功能。此外还增强了转换PDF到EXEL以及转换XPS到PDF的功能。详情请阅读以下内容。

新功能:

问题修复:


获取Spire.PDF 7.1,请点击:

https://www.e-iceblue.cn/Downloads/Spire-PDF-NET.html

前面我们介绍了如何比较两个Word文档的内容。从Spire.Doc V8.12.14始,我们支持获取两个 Word 文档之间比较出的差异并返回list. 该文将介绍如何获取两个Word文档之间比较出的差异。

C#
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using Spire.Doc.Formatting.Revisions;
using System;

namespace GetWordDifferences
    {
    class Program
    {
        static void Main(string[] args)

        {
            //加载第一个Word文档
            Document doc1 = new Document();
            doc1.LoadFromFile("https://cdn.e-iceblue.cn/Sample1.docx");

            //加载第二个Word文档
            Document doc2 = new Document();
            doc2.LoadFromFile("https://cdn.e-iceblue.cn/Sample2.docx");

            //比较文档
            doc1.Compare(doc2, "Author");

            foreach (Section sec in doc1.Sections)
            {
                foreach (DocumentObject docItem in sec.Body.ChildObjects)
                {
                    if (docItem is Paragraph)
{
                        Paragraph para = docItem as Paragraph;
                        if (para.IsInsertRevision)
                        { 
                            EditRevision insRevison = para.InsertRevision;
                            EditRevisionType insType = insRevison.Type; 
                            string insAuthor = insRevison.Author; 
                            DateTime insDateTime = insRevison.DateTime; 
                        }

                        else if (para.IsDeleteRevision)
                        { 
                            EditRevision delRevison = para.DeleteRevision; 
                            EditRevisionType delType = delRevison.Type; 
                            string delAuthor = delRevison.Author; 
                            DateTime delDateTime = delRevison.DateTime; 
                        }

                        foreach (ParagraphBase paraItem in para.ChildObjects)
                        {
                            if (paraItem.IsInsertRevision)
                            { 
                                EditRevision insRevison = paraItem.InsertRevision; 
                                EditRevisionType insType = insRevison.Type; 
                                string insAuthor = insRevison.Author; 
                                DateTime insDateTime = insRevison.DateTime; 
                            }

                            else if (paraItem.IsDeleteRevision)
                            { 
                                EditRevision delRevison = paraItem.DeleteRevision; 
                                EditRevisionType delType = delRevison.Type; 
                                string delAuthor = delRevison.Author; 
                                DateTime delDateTime = delRevison.DateTime; 
                            }

                        }
                    }
                }
            }

            //获取差异
            DifferRevisions differRevisions = new DifferRevisions(doc1);
            var insetRevisionsList = differRevisions.InsertRevisions;
            var deletRevisionsList = differRevisions.DeleteRevisions;      
        }
    }
 }
VB.NET
Imports Spire.Doc
Imports Spire.Doc.Documents
Imports Spire.Doc.Fields
Imports Spire.Doc.Formatting.Revisions
Imports System

Namespace GetWordDifferences
    
    Class Program
        
        Private Shared Sub Main(ByVal args() As String)
            '加载第一个文档
            Dim doc1 As Document = New Document
            doc1.LoadFromFile("https://cdn.e-iceblue.cn/Sample1.docx")
            '加载第二个文档 
            Dim doc2 As Document = New Document
            doc2.LoadFromFile("https://cdn.e-iceblue.cn/Sample2.docx")
            '比较两个文档 
            doc1.Compare(doc2, "Author")
            For Each sec As Section In doc1.Sections
                For Each docItem As DocumentObject In sec.Body.ChildObjects
                    If (TypeOf docItem Is Paragraph) Then
                        Dim para As Paragraph = CType(docItem,Paragraph)
                        If para.IsInsertRevision Then
                            Dim insRevison As EditRevision = para.InsertRevision
                            Dim insType As EditRevisionType = insRevison.Type
                            Dim insAuthor As String = insRevison.Author
                            Dim insDateTime As DateTime = insRevison.DateTime
                        ElseIf para.IsDeleteRevision Then
                            Dim delRevison As EditRevision = para.DeleteRevision
                            Dim delType As EditRevisionType = delRevison.Type
                            Dim delAuthor As String = delRevison.Author
                            Dim delDateTime As DateTime = delRevison.DateTime
                        End If
                        
                        For Each paraItem As ParagraphBase In para.ChildObjects
                            If paraItem.IsInsertRevision Then
                                Dim insRevison As EditRevision = paraItem.InsertRevision
                                Dim insType As EditRevisionType = insRevison.Type
                                Dim insAuthor As String = insRevison.Author
                                Dim insDateTime As DateTime = insRevison.DateTime
                            ElseIf paraItem.IsDeleteRevision Then
                                Dim delRevison As EditRevision = paraItem.DeleteRevision
                                Dim delType As EditRevisionType = delRevison.Type
                                Dim delAuthor As String = delRevison.Author
                                Dim delDateTime As DateTime = delRevison.DateTime
                            End If
                            
                        Next
                    End If
                    
                Next
            Next
            '获取差异 
            Dim differRevisions As DifferRevisions = New DifferRevisions(doc1)
            Dim insetRevisionsList = differRevisions.InsertRevisions
            Dim deletRevisionsList = differRevisions.DeleteRevisions
        End Sub
    End Class
End Namespace

本文介绍如何使用Spire.XLS for Java将工作表按照数据拆分成多个工作表。

原文档截图如下:

Java 将工作表按数据区域拆分成多个工作表

import com.spire.xls.CellRange;
import com.spire.xls.ExcelVersion;
import com.spire.xls.Workbook;
import com.spire.xls.Worksheet;

public class SplitWorksheetIntoMultiSheets {

    public static void main(String[] args) {

        //创建Workbook对象,加载Excel文档
        Workbook bookOriginal = new Workbook();
        bookOriginal.loadFromFile("C:\\Users\\Administrator\\Desktop\\Employees.xlsx");

        //获取第一个工作表
        Worksheet sheet = bookOriginal.getWorksheets().get(0);

        //获取标题行
        CellRange headRow = sheet.getCellRange(1, 1, 1, 5);

        //获取两个数据区域
        CellRange range1 = sheet.getCellRange(2, 1, 6, 5);
        CellRange range2 = sheet.getCellRange(7, 1, 11, 5);

        //添加一个工作表,命名为“销售部”
        Worksheet sheet2 = bookOriginal.getWorksheets().add("销售部");

        //将标题行和数据区域1复制到“销售部”工作表
        sheet.copy(headRow, sheet2, 1, 1, true, false);
        sheet.copy(range1, sheet2, 2, 1, true, false);

        //添加一个工作表,命名为“技术部”
        Worksheet sheet3 = bookOriginal.getWorksheets().add("技术部");

        //将标题行和数据区域2复制到“技术部”工作表
        sheet.copy(headRow, sheet3, 1, 1, true, false);
        sheet.copy(range2, sheet3, 2, 1, true, false);

        //将第一个工作表中的列宽应用到新加的两个做工作表
        for (int i = 0; i < sheet.getLastColumn(); i++) {

            sheet2.setColumnWidth(i + 1, sheet.getColumnWidth(i + 1));
            sheet3.setColumnWidth(i + 1, sheet.getColumnWidth(i + 1));
        }

        //保存文档
        bookOriginal.saveToFile("Splited.xlsx", ExcelVersion.Version2016);
    }
}

结果文档:

Java 将工作表按数据区域拆分成多个工作表

TIFF,即 Tagged Image File Format,这是一种比较灵活的图像格式,具有不依赖于具体硬件、可移植等特点。使用 Spire.PDF for Java,可将 PDF 转为 TIFF 保存到本地指定路径;支持转换 PDF 文档的所有页面或者指定页面为 TIFF 格式。本文,将对此作详细介绍。

安装 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>11.11.11</version>
    </dependency>
</dependencies>

将 PDF 转为 TIFF

通过使用 Spire.PDF for Java 将 PDF 转为 TIFF 格式时,可通过设置 PdfDocument.saveToTiff() 方法中的不同参数,来实现将整个 PDF 转为 TIFF 格式或将指定页数范围的 PDF 页面转为 TIFF 格式。下面是实现转换的主要代码:

  • Java
import com.spire.pdf.*;

public class PDFtoTiff {
    public static void main(String[] args) {
        //加载PDF测试文档
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile("https://cdn.e-iceblue.cn/input.pdf");

        //将整篇文档保存为tiff格式
        pdf.saveToTiff("ToTiff.tiff");

        //将指定页面范围保存为tiff格式(第2页到第3页,并设置水平和垂直分辨率),
        pdf.saveToTiff("ToTiff2.tiff",1,2,400,600);
    }
}

所有页面转换结果:

Java 将 PDF 转为 TIFF

指定页面转换结果:

Java 将 PDF 转为 TIFF

申请临时 License

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

Spire.Office for Java 3.12.1已发布。在本次版本更新中,Spire.PDF for Java支持了转换PDF到TIFF,改善了doc.getPages().get(0).isBlank()方法逻辑,实现了提取PDF文本按照段落断行以及读取和写入XMP元数据的功能。此外,该版本还增强了转换PDF到Image/Excel/Word的功能。详情请阅读以下内容。

获取Spire.Office for Java 3.12.1, 请点击:

https://www.e-iceblue.cn/Downloads/Spire-Office-JAVA.html


Spire.PDF for Java

新功能:

问题修复:

Spire.PDF for Java 3.12.6已发布。该版本支持了转换PDF到TIFF,改善了doc.getPages().get(0).isBlank()方法逻辑,实现了提取PDF文本按照段落断行以及读取和写入XMP元数据的功能。此外,该版本还增强了转换PDF到Image/Excel/Word的功能。详情请阅读以下内容。

新功能:

问题修复:


获取Spire.PDF for Java 3.12.6,请点击:

https://www.e-iceblue.cn/Downloads/Spire-PDF-JAVA.html

本文介绍如何使用Spire.XLS for Java将Excel文档拆分成多个文档,每一个拆分后的文档包含一个源文档中的工作表。

import com.spire.xls.FileFormat;
import com.spire.xls.Workbook;

public class SplitWorkbook {

    public static void main(String[] args) {

        //创建Workbook对象
        Workbook wb = new Workbook();

        //加载Excel文档
        wb.loadFromFile("C:\\Users\\Administrator\\Desktop\\data.xlsx");

        //声明Workbook变量
        Workbook newWb;

        //声明String类型变量
        String sheetName;

        //指定拆分生成的文档的存放路径
        String folderPath = "C:\\Users\\Administrator\\Desktop\\Output\\";

        //遍历所有工作表
        for (int i = 0; i < wb.getWorksheets().getCount(); i++) {

            //初始化Workbook对象
            newWb = new Workbook();

            //删除默认工作表
            newWb.getWorksheets().clear();

            //将源文档中的指定工作表复制到新的Workbook
            newWb.getWorksheets().addCopy(wb.getWorksheets().get(i));

            //获取工作表表名
            sheetName = wb.getWorksheets().get(i).getName();

            //将新的Workbook保存为Excel文档
            newWb.saveToFile(folderPath + sheetName + ".xlsx", FileFormat.Version2013);
        }
    }
}

Java 将 Excel 文档拆分成多个文档

Spire. Office 5.12.8已正式发布。该版本带来了很多新的功能,比如:Spire.Doc 支持获取两个 Word 文档之间比较出的差异;Spire.XLS 支持调整弯箭头的折线位置;Spire.PDF 支持了添加页面标签,以及支持通过外部服务进行数字签名并且支持设置PDF包中文件的字段并对文件进行排序等等。同时,该版本修复了大量问题。详情请阅读以下内容。

该版本涵盖了最新版的Spire.Doc, Spire.PDF, Spire.XLS, Spire.Presentation, Spire.Email, Spire.DocViewer, Spire.PDFViewer, Spire.Spreadsheet, Spire.OfficeViewer, Spire.DataExport, Spire.Barcode。

版本信息如下:

获取Spire.Office 5.12.8, 请点击:

https://www.e-iceblue.cn/Downloads/Spire-Office-NET.html


Spire.Doc

新功能:

问题修复:


Spire.XLS

新功能:

问题修复:


Spire.Spreadsheet

问题修复:


Spire.PDF

优化:

新功能:

问题修复:

人们常常需要出于各种原因替换 PDF 文档中的文本。这可能是为了纠正错误或打字错误,更新过时的信息,为特定的受众个性化定制内容,或者为符合法律或监管变化要求。通过在 PDF 中替换文本,可以保持文档的完整性,并提高所呈现信息的整体质量和相关性。在本文中,你将学习如何使用 Spire.PDF for Java 在 PDF 文档中查找替换文本

安装 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>11.11.11</version>
    </dependency>
</dependencies>

替换特定 PDF 页面的文本

在 Spire.PDF for Java 中,PdfTextReplacer 类用于 PDF 文档中的文本替换操作。它的主要方法之一 replaceAllText(),支持将 PDF 页面上指定文本替换为新的文本。具体步骤如下:

  • Java
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.texts.PdfTextReplaceOptions;
import com.spire.pdf.texts.PdfTextReplacer;
import com.spire.pdf.texts.ReplaceActionType;
import java.util.EnumSet;

public class ReplaceTextInPage
{

    public static void main(String[] args)
    {

        // 创建一个PdfDocument对象
        PdfDocument doc = new PdfDocument();

        // 加载一个PDF文件
        doc.loadFromFile("https://cdn.e-iceblue.cn/in.pdf");

        // 创建一个PdfTextReplaceOptions对象
        PdfTextReplaceOptions textReplaceOptions = new PdfTextReplaceOptions();

        // 指定文本替换的选项
        textReplaceOptions.setReplaceType(EnumSet.of(ReplaceActionType.IgnoreCase));
        textReplaceOptions.setReplaceType(EnumSet.of(ReplaceActionType.WholeWord));

        // 获取特定的页面
        PdfPageBase page = doc.getPages().get(0);

        // 根据页面创建一个PdfTextReplacer对象
        PdfTextReplacer textReplacer = new PdfTextReplacer(page);

        // 设置替换选项
        textReplacer.setOptions(textReplaceOptions);

        // 将所有目标文本实例替换为新文本
        textReplacer.replaceAllText("荷塘", "池塘");

        // 将文档保存到不同的PDF文件
        doc.saveToFile("out.pdf");

        // 释放资源
        doc.dispose();
    }
}

替换整个 PDF 文档匹配的文本

上面介绍了如何在单页中替换文本。要在整个 PDF 文档中将所有特定文本替换为新文本,只需遍历文档的每一页,具体实现如下:

  • Java
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.texts.PdfTextReplaceOptions;
import com.spire.pdf.texts.PdfTextReplacer;
import com.spire.pdf.texts.ReplaceActionType;
import java.util.EnumSet;

public class ReplaceTextInDocument 
{

     public static void main(String[] args) 
     {
    // 创建一个PdfDocument对象
    PdfDocument doc = new PdfDocument();

    // 加载一个PDF文件
    doc.loadFromFile("https://cdn.e-iceblue.cn/in.pdf");

    // 创建一个PdfTextReplaceOptions对象
    PdfTextReplaceOptions textReplaceOptions = new PdfTextReplaceOptions();

    // 指定文本替换的选项
    textReplaceOptions.setReplaceType(EnumSet.of(ReplaceActionType.IgnoreCase));
    textReplaceOptions.setReplaceType(EnumSet.of(ReplaceActionType.WholeWord));

    //遍历PDF文档所有页面
    for (int i = 0; i < doc.getPages().getCount(); i++)
        {
            PdfPageBase page = doc.getPages().get(i);

      // 根据页面创建一个PdfTextReplacer对象
      PdfTextReplacer textReplacer = new PdfTextReplacer(page);

      // 设置替换选项
      textReplacer.setOptions(textReplaceOptions);

      // 将所有目标文本实例替换为新文本
      textReplacer.replaceAllText("荷塘", "池塘");
        }

    // 将文档保存到不同的PDF文件
    doc.saveToFile("out.pdf");

    // 释放资源
    doc.dispose();
    }
}

Java 在 PDF 中查找替换文本

替换第一个匹配的文本

在 Java 中替换 PDF 第一个匹配的目标文本,使用 PdfTextReplacer 类的 replaceText() 方法。具体参考以下步骤:

  • Java
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.texts.PdfTextReplaceOptions;
import com.spire.pdf.texts.PdfTextReplacer;
import com.spire.pdf.texts.ReplaceActionType;
import java.util.EnumSet;

public class ReplaceFirstInstance {

    public static void main(String[] args)
    {

    // 创建一个PdfDocument对象
    PdfDocument doc = new PdfDocument();

    // 加载一个PDF文件
    doc.loadFromFile("https://cdn.e-iceblue.cn/in.pdf");

    // 创建一个PdfTextReplaceOptions对象
    PdfTextReplaceOptions textReplaceOptions = new PdfTextReplaceOptions();

    // 指定文本替换的选项
    textReplaceOptions.setReplaceType(EnumSet.of(ReplaceActionType.IgnoreCase));
        textReplaceOptions.setReplaceType(EnumSet.of(ReplaceActionType.WholeWord));

    // 获取特定页面
    PdfPageBase page = doc.getPages().get(0);

    // 根据页面创建一个PdfTextReplacer对象
    PdfTextReplacer textReplacer = new PdfTextReplacer(page);

    // 设置替换选项
    textReplacer.setOptions(textReplaceOptions);

        // 将目标文本的第一个实例替换为新文本
    textReplacer.replaceText("荷塘", "池塘");

    // 将文档保存到不同的PDF文件
    doc.saveToFile("out.pdf");

    // 释放资源
    doc.dispose();
    }
}

Java 在 PDF 中查找替换文本

基于正则表达式替换文本

正则表达式是一种非常强大和灵活的模式,通常用于匹配文本。在 Spire.PDF for Java 中,同样可以利用正则表达式在 PDF 文档页面中匹配特定文本并替换为新文本,步骤如下:

  • Java
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.texts.PdfTextReplaceOptions;
import com.spire.pdf.texts.PdfTextReplacer;
import com.spire.pdf.texts.ReplaceActionType;
import java.util.EnumSet;

public class ReplaceBasedOnRegularExpression {

    public static void main(String[] args) {

    // 创建一个PdfDocument对象
    PdfDocument doc = new PdfDocument();

    // 加载一个PDF文件
    doc.loadFromFile("https://cdn.e-iceblue.cn/in.pdf");

    // 创建一个PdfTextReplaceOptions对象
    PdfTextReplaceOptions textReplaceOptions = new PdfTextReplaceOptions();

        // 将替换类型设置为Regex
        textReplaceOptions.setReplaceType(EnumSet.of(ReplaceActionType.Regex));

    // 获取特定页面
    PdfPageBase page = doc.getPages().get(0);

    // 根据页面创建一个PdfTextReplacer对象
    PdfTextReplacer textReplacer = new PdfTextReplacer(page);

    // 设置替换选项
    textReplacer.setOptions(textReplaceOptions);

    // 指定正则表达式
    String regularExpression = "荷.月";

    // 将所有匹配正则表达式的目标文本替换为新文本
    textReplacer.replaceAllText(regularExpression, "池塘花");

    // 将文档保存到不同的PDF文件
    doc.saveToFile("out.pdf");

    // 释放资源
    doc.dispose();
    }
}

Java 在 PDF 中查找替换文本

申请临时 License

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