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

Spire.Cloud 纯前端文档控件

在阅读很长的 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>12.9.0</version>
    </dependency>
</dependencies>

在 PDF 文档中插入导航按钮

Spire.PDF for Java 提供的 PdfButtonField 类代表 PDF 文档中的按钮,此类下的方法可以用于设置按钮的格式和点击按钮时执行的操作。我们可以创建自定义的 addNavigationButton() 方法,再将按钮、动作、矩形区域、文本作为参数传递给此方法,从而创建导航按钮。详细操作步骤如下:

  • Java
import com.spire.pdf.FileFormat;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.actions.PdfAction;
import com.spire.pdf.actions.PdfActionDestination;
import com.spire.pdf.actions.PdfGoToAction;
import com.spire.pdf.actions.PdfNamedAction;
import com.spire.pdf.fields.PdfButtonField;
import com.spire.pdf.fields.PdfForm;
import com.spire.pdf.general.PdfDestination;
import com.spire.pdf.graphics.PdfRGBColor;
import com.spire.pdf.graphics.PdfTrueTypeFont;

import java.awt.*;
import java.awt.geom.Rectangle2D;

public class addNavigationButton {

    public static void main(String[] args) throws Exception {

        //创建PdfDocument类的对象
        PdfDocument pdf = new PdfDocument();

        //载入PDF文档
        pdf.loadFromFile("资产负债表.pdf");

        //获取最后一页
        PdfPageBase lastPage = pdf.getPages().get(pdf.getPages().getCount() - 1);

        //允许在PDF文档中创建表单命令
        pdf.setAllowCreateForm(true);

        //创建PdfButtonField的对象
        PdfButtonField btn_1 = new PdfButtonField(lastPage, "btn_1");
        //创建dfNamedAction的对象并将操作设置为跳转到第一页
        PdfNamedAction namedAction = new PdfNamedAction(PdfActionDestination.FirstPage);
        //定义按钮的位置和大小,以及要在按钮上显示的文本
        float x = 150;
        float y = 300;
        float width = 170;
        float height = 22;
        Rectangle2D.Float rect = new Rectangle2D.Float(x, y, width, height);
        String text = "跳转到第一页";
        //使用自定义的方法添加一个跳转到首页的导航按钮
        addNavigationButton(btn_1, rect, text, namedAction);

        //创建另一个PdfButtonField的对象
        PdfButtonField btn_2 = new PdfButtonField(lastPage, "btn_2");
        //创建PdfGoToAction的对象并将操作设置为跳转到第三页
        PdfGoToAction goToAction = new PdfGoToAction(new PdfDestination(pdf.getPages().get(2)));
        //定义按钮的位置和大小,以及要在按钮上显示的文本
        rect = new Rectangle2D.Float( x, y + height + 5, width, height);
        String text1 = "跳转到第三页";
        //使用自定义的方法添加一个跳转到第三页的导航按钮
        addNavigationButton(btn_2, rect, text1, goToAction);

        //保存文档
        pdf.saveToFile("导航按钮.pdf", FileFormat.PDF);
        pdf.close();
    }
    static void addNavigationButton(PdfButtonField btn, Rectangle2D.Float rect, String text, PdfAction action) {
        //创建PdfTrueTypeFont的对象
        PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("黑体", Font.PLAIN, 13), true);
        //设置按钮的位置和大小
        btn.setBounds(rect);
        //设置按钮上文本的字体
        btn.setFont(font);
        //设置按钮上的文本
        btn.setText(text);
        //设置按钮颜色
        btn.setBackColor(new PdfRGBColor(Color.ORANGE));
        //设置按钮上文本的颜色
        btn.setForeColor(new PdfRGBColor(Color.blue));
        //设置按钮的边框颜色
        btn.setBorderColor(new PdfRGBColor(Color.green));
        //设置按钮在鼠标点击后的执行的操作
        btn.getActions().setMouseDown(action);
        //将按钮添加到文档中
        PdfForm form = new PdfForm();
        form.getFields().add(btn);
    }
}

Java 添加导航按钮到 PDF 文档

申请临时 License

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

Spire.XLS 13.2.4 已发布。本次更新新增支持 FLOOR.MATH 公式和“模拟分析”的单变量求解功能,还支持设置 addQuotationForStringValue 的布尔值,使excel转换为CSV后的结果字符串带有引号。该版本还增强了 Excel 到 PDF 和图片的转换。此外,一些已知问题也在本次更新中被成功修复。详情请阅读以下内容。

新功能:

问题修复:


下载 Spire.XLS 13.2.4 请点击:

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

将多个 PDF 文档合并为一个 PDF 文件可以帮助您整合文档内容,让您更轻松地阅读、打印和共享文件。合并后,您只需要处理一个而不是多个文件。在本文中,您将学习如何使用 Spire.PDF for C++ 在 C++ 中将多个 PDF 文件合并为一个 PDF。

安装 Spire.PDF for C++

有两种方法可以将 Spire.PDF for C++ 集成到您的应用程序中。一种方法是通过 NuGet 安装它,另一种方法是从我们的网站下载包并将库复制到您的程序中。通过 NuGet 安装更简单,更推荐使用。您可以通过访问以下链接找到更多详细信息。

如何将 Spire. PDF for C++ 集成到 C++ 程序中

在 C++ 中将多个 PDF 文档合并为一个 PDF 文件

Spire.PDF for C++ 提供了一个静态方法 - PdfDocument::MergeFiles(std::vector<LPCWSTR_S> inputFiles) 使您能够轻松地将多个 PDF 文件合并为一个 PDF 文件。以下是详细步骤:

  • C++
#include "Spire.Pdf.o.h"

using namespace Spire::Pdf;
using namespace std;

int main() {
	//将输入PDF文件的路径放入矢量
	std::vector<LPCWSTR_S> files = { L"Input\\文件_1.pdf", L"Input\\文件_2.pdf", L"Input\\文件_3.pdf" };

	//合并向量中路径指定的 PDF 文件
	boost::intrusive_ptr<PdfDocumentBase> doc = PdfDocument::MergeFiles(files);

	//指定输出文件路径
	wstring outputFile = L"Output\\合并PDF.pdf";

	//保存结果 PDF 文件
	doc->Save(outputFile.c_str(), FileFormat::PDF);
	doc->Close();
}

C++ 将多个 PDF 文档合并为一个 PDF 文件

在 C++ 中合并来自流的多个 PDF 文件

您可以使用 PdfDocument::MergeFiles(std::vector< Stream*> streams) 方法将多个 PDF 流合并为一个 PDF。以下是详细步骤:

  • C++
#include "Spire.Pdf.o.h"

using namespace Spire::Pdf;
using namespace std;

int main() {
	//将输入的 PDF 文件读入流
	Stream* stream1 = new Stream(L"Input\\文件_1.pdf");
	Stream* stream2 = new Stream(L"Input\\文件_2.pdf");
	Stream* stream3 = new Stream(L"Input\\文件_3.pdf");
	
	
    //将流放入向量中
 	std::vector<boost::intrusive_ptr<Stream>>streams = { stream1, stream2, stream3 };

	//合并 PDF 流
	boost::intrusive_ptr<PdfDocumentBase> doc = PdfDocument::MergeFiles(streams);


	//指定输出文件路径
	wstring outputFile = L"Output\\合并PDF.pdf";

	//保存结果 PDF 文件
	doc->Save(outputFile.c_str(), FileFormat::PDF);
	doc->Close();
}

在 C++ 中将选定的 PDF 文件页面合并为单个 PDF 文件

您可以使用 PdfDocument->InsertPage(PdfDocument ldDoc, int pageIndex) 或 PdfDocument->InsertPageRange(PdfDocument ldDoc, int startIndex, int endIndex) 方法将多个 PDF 文件的特定页面或一系列页面合并为单个 PDF 文件。 以下是详细步骤:

  • C++
#include "Spire.Pdf.o.h"

using namespace Spire::Pdf;
using namespace std;

int main() {

	//将输入的 PDF 文件的路径放入向量中
	std::vector<std::wstring> files = { L"Input\\文件_2.pdf", L"Input\\文件_4.pdf" };

	//创建一个 PdfDocument 对象向量         
	std::vector<PdfDocument*> docs(files.size());

	//遍历向量中的路径
	for (int i = 0; i < files.size(); i++)
	{
		//加载路径指定的PDF文件
		docs[i] = new PdfDocument();
		docs[i]->LoadFromFile(files[i].c_str());
	}

	//新建一个 PDF 文档
	PdfDocument* newDoc = new PdfDocument();

	//将第一个 PDF 的指定页面插入新 PDF
	newDoc->InsertPageRange(docs[0],0, 1);
	//将第二个 PDF 的指定页面插入新 PDF
	newDoc->InsertPage(docs[1], 0);

	//指定输出文件路径
	wstring outputFile = L"Output\\合并PDF文档.pdf";

	//保存结果 PDF 文件
	newDoc->SaveToFile(outputFile.c_str());

	//关闭 PdfDocument 对象
	newDoc->Close();
	for (auto doc : docs)
	{
		doc->Close();
	}
}

C++ 将多个 PDF 文档合并为一个 PDF 文件

申请临时 License

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

Spire.PDF 9.2.6 已发布。该版本支持设置文本框注释的文本对齐类型,同时还支持压缩PDF文件后保存到流。此外,该版本还修复了许多已知问题,如修复了打印PDF文件后内容不正确的问题。详情请阅读以下内容。

新功能:

问题修复:


获取Spire.PDF 9.2.6请点击:

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

Spire.PDF for Java 9.2.1 已发布。该版本支持转换 PDF 到 PPT 以及转换有打开密码的PDF 到 PDFA,同时还支持压缩有打开密码的 PDF。此外,本次更新还增强了 PDF 到 Excel 和 PDFA2B 的转换。本次更新还修复了一些已知问题。详情请阅读以下内容。

新功能:

问题修复:


获取Spire.PDF for Java 9.2.1请点击:

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

Spire.PDF for C++ 是一个专业的 PDF 库,供开发人员在任何类型的 C++ 应用程序中阅读、创建、编辑和转换 PDF 文档。本文演示了如何以两种不同的方式将 Spire.PDF for C++ 集成到您的 C++ 应用程序中。

通过 NuGet 安装 Spire.PDF for C++

步骤1

在 Visual Studio 2022 中创建一个 C++ 项目。

如何将 Spire. PDF for C++ 集成到 C++ 程序中

步骤2

在解决方案资源管理器中右键单击“引用”,然后在弹出菜单中选择“管理 NuGet 包”。

如何将 Spire. PDF for C++ 集成到 C++ 程序中

单击“浏览”,搜索“spire.pdf.cpp”,并将其安装到您的项目中。

如何将 Spire. PDF for C++ 集成到 C++ 程序中

步骤3

在解决方案资源管理器中右键单击“源文件”,选择“添加”,然后选择“新建项”。

如何将 Spire. PDF for C++ 集成到 C++ 程序中

创建一个 .cpp 文件

如何将 Spire. PDF for C++ 集成到 C++ 程序中

步骤4

单击刚刚创建的 .cpp 文件以编写代码。 在开始之前,您需要通过将以下代码行添加到您的程序来包含头文件“Spire.Pdf.o.h”

  • C++
#include "Spire.Pdf.o.h"

下面的代码示例向您展示了如何使用 Spire.PDF for C++ 创建一个简单的 PDF 文件。

如何将 Spire. PDF for C++ 集成到 C++ 程序中

通过手动导入库安装 Spire. PDF for C++

步骤1

下载 Spire.PDF for C++ 包并将其解压到本地磁盘上的某个位置,以获得以下文件。

如何将 Spire. PDF for C++ 集成到 C++ 程序中

步骤2

在 Visual Studio 2022 中创建一个 C++ 项目。

如何将 Spire. PDF for C++ 集成到 C++ 程序中

步骤3

将产品包中的“include”文件夹和“lib”文件夹复制到您的项目中,并将它们保存在 .sln 文件所在的同一文件夹下。

如何将 Spire. PDF for C++ 集成到 C++ 程序中

步骤4

右键单击项目名称并选择“属性”。

如何将 Spire. PDF for C++ 集成到 C++ 程序中

配置输出目录。根据您选择的构建模式(调试或发布),可以将输出目录设置为“..\lib\x64\debug”或“..\lib\x64\release”。

如何将 Spire. PDF for C++ 集成到 C++ 程序中

步骤5

在解决方案资源管理器中右键单击“源文件”,选择“添加”,然后选择“新建项”。

如何将 Spire. PDF for C++ 集成到 C++ 程序中

创建一个 .cpp 文件

如何将 Spire. PDF for C++ 集成到 C++ 程序中

步骤6

单击刚才创建的 .cpp 文件以编写代码。开始之前,您需要在程序中包含以下两行代码。

  • C++
#include "../include/Spire.Pdf.o.h"
#pragma comment(lib,"../lib/x64/debug/Spire.Pdf.Cpp.lib")

下面的代码示例向您展示了如何使用 Spire.PDF for C++ 创建一个简单的 PDF 文件。

如何将 Spire. PDF for C++ 集成到 C++ 程序中

Spire.Cloud 8.2.2 已发布。在本次更新中,该版本修复了给文本添加下划线后刷新页面时报错的问题。详情请阅读以下内容。

问题修复:


获取 Spire.Cloud 8.2.2 请点击:

https://cloud.e-iceblue.cn/index.php/privatization-download

当您在处理 Excel 文档时,可能经常需要从主工作簿复制数据并粘贴到单独的工作簿中。 为了提高工作效率,您可以在不同工作簿之间复制选定的单元格范围或整个工作表。本文演示了如何使用 Spire.XLS for .NET 将选定单元格范围从一个工作簿复制到另一个工作簿。

安装 Spire.XLS for .NET

首先,您需要添加 Spire.XLS for .NET 包中包含的 DLL 文件作为 .NET 项目中的引用。DLL 文件可以从此链接下载或通过 NuGet 安装。

PM> Install-Package Spire.XLS

在不同工作簿之间复制单元格范围

Spire.XLS 提供了 Worksheet.Copy() 方法来将数据从源范围复制到目标范围。目标范围可以是同一工作簿内或来自不同工作簿的单元格范围。以下是将单元格范围从一个工作簿复制到另一个工作簿的步骤。

  • C#
  • VB.NET
using Spire.Xls;

namespace CopyCellRange
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建一个Workbook对象
            Workbook sourceBook = new Workbook();

            //加载源 Excel 文档
            sourceBook.LoadFromFile(@"C:\Users\Administrator\Desktop\测试文档.xlsx");

            //获取源工作表
            Worksheet sourceSheet = sourceBook.Worksheets[0];

            //获取源单元格区域
            CellRange sourceRange = sourceSheet.Range["A1:E4"];

            //创建另一个Workbook对象
            Workbook destBook = new Workbook();

            //加载目标工作簿
            destBook.LoadFromFile(@"C:\Users\Administrator\Desktop\目标文档.xlsx");

            //获取目标工作表
            Worksheet destSheet = destBook.Worksheets[0];

            //获取单元格区域
            CellRange destRange = destSheet.Range["B2:F5"];

            //将数据从源范围复制到目标范围
            sourceSheet.Copy(sourceRange, destRange);

            //循环遍历源范围中的列
            for (int i = 0; i < sourceRange.Columns.Length; i++)
            {
                //将列宽也从源范围复制到目标范围
                destRange.Columns[i].ColumnWidth = sourceRange.Columns[i].ColumnWidth;
            }

            //将目标工作簿保存到 Excel 文件
            destBook.SaveToFile("复制单元格范围.xlsx");
        }
    }
}
Imports Spire.Xls

Namespace CopyCellRange
    Friend Class Program
        Private Shared Sub Main(ByVal args As String())
            '创建一个Workbook对象
            Dim sourceBook As Workbook = New Workbook()

            '加载源 Excel 文档
            sourceBook.LoadFromFile("C:\Users\Administrator\Desktop\测试文档.xlsx")

            '获取源工作表
            Dim sourceSheet As Worksheet = sourceBook.Worksheets(0)

            '获取源单元格区域
            Dim sourceRange As CellRange = sourceSheet.Range("A1:E4")

            '创建另一个Workbook对象
            Dim destBook As Workbook = New Workbook()

            '加载目标工作簿
            destBook.LoadFromFile("C:\Users\Administrator\Desktop\目标文档.xlsx")

            '获取目标工作表
            Dim destSheet As Worksheet = destBook.Worksheets(0)

            '获取单元格区域
            Dim destRange As CellRange = destSheet.Range("B2:F5")

            '将数据从源范围复制到目标范围
            sourceSheet.Copy(sourceRange, destRange)

            '循环遍历源范围中的列
            For i As Integer = 0 To sourceRange.Columns.Length - 1
                '将列宽也从源范围复制到目标范围
                destRange.Columns(i).ColumnWidth = sourceRange.Columns(i).ColumnWidth
            Next

            '将目标工作簿保存到 Excel 文件
            destBook.SaveToFile("复制单元格范围.xlsx")
        End Sub
    End Class
End Namespace

C#/VB.NET 在不同工作簿之间复制单元格范围

申请临时 License

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

Spire.Doc for Java 11.2.3 已发布。本次更新新增支持设置内容控件的sdtAppearance属性。同时,此版本增强了 Word 到 PDF 的转换。此外,该版本还修复了许多已知问题,如:修复了应用程序在更新TableOfContents时抛"Unknown Source" 错误的问题。详情请阅读以下内容。

新功能:

问题修复:


获取Spire.Doc for Java 11.2.3请点击:

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

Excel 电子表格是基于网格的文档,用于以有组织的方式组织信息。世界各地的人们都使用电子表格来创建表格,以满足商业或个人需求。多年来,Excel 电子表格在简化繁琐的数据管理过程方面发挥了重要作用。在本文中,您将学习如何使用 Spire.XLS for C++ 创建 Excel 文档,以及如何将数据写入 Excel 工作表。

安装Spire.XLS for C++

有两种方法可以将 Spire.XLS for C++ 集成到您的应用程序中。一种方法是通过 NuGet 安装它,另一种方法是从我们的网站下载包并将库复制到您的程序中。通过 NuGet 安装更简单,更推荐使用。您可以通过访问以下链接找到更多详细信息。

在 C++ 应用程序中集成 Spire.XLS for C++

在 C++ 中将文本或数字值写入单元格

Spire.XLS for C++ 提供了 Workbook 类和 Worksheet 类,分别表示 Excel 文档和工作表。 用户可以使用 Worksheet->GetRange(int row, int column) 方法访问特定的单元格。然后,使用 CellRange->SetText() 或 CellRange->SetNumberValue() 方法为单元格分配一个文本值或数字值。以下是详细步骤:

  • C++
#include "Spire.Xls.o.h";

using namespace Spire::Xls;

int main() {

	//指定输出文件路径和名称
	std::wstring outputPath = L"输出\\";
	std::wstring outputFile = outputPath + L"将单个值写入单元格.xlsx";

	//创建一个Workbook对象
	intrusive_ptr<Workbook> workbook = new Workbook();

	//获取第一个工作表
	intrusive_ptr<Worksheet> sheet = dynamic_pointer_cast<Worksheet>(workbook->GetWorksheets()->Get(0));

	//将文本和数字写入指定的单元格
	sheet->GetRange(1, 1)->SetText(L"名字");
	sheet->GetRange(1, 2)->SetText(L"年龄");
	sheet->GetRange(1, 3)->SetText(L"部门");
	sheet->GetRange(1, 4)->SetText(L"入职日期");
	sheet->GetRange(1, 1)->SetText(L"名字");
	sheet->GetRange(2, 1)->SetText(L"安欣");
	sheet->GetRange(2, 2)->SetNumberValue(29);
	sheet->GetRange(2, 3)->SetText(L"市场部");
	sheet->GetRange(2, 4)->SetText(L"2018-02-26");
	sheet->GetRange(3, 1)->SetText(L"李响");
	sheet->GetRange(3, 2)->SetNumberValue(30);
	sheet->GetRange(3, 3)->SetText(L"人力资源部");
	sheet->GetRange(3, 4)->SetText(L"2017-07-13");
	sheet->GetRange(4, 1)->SetText(L"高启强");
	sheet->GetRange(4, 2)->SetNumberValue(35);
	sheet->GetRange(4, 3)->SetText(L"策划部");
	sheet->GetRange(4, 4)->SetText(L"2015-04-01");

	//自动调整列宽
	sheet->GetAllocatedRange()->AutoFitColumns();

	//将样式应用于第一行
	intrusive_ptr <CellStyle> style = dynamic_pointer_cast<CellStyle>(workbook->GetStyles()->Add(L"newStyle"));
	style->GetFont()->SetIsBold(true);
	sheet->GetRange(1, 1, 1, 4)->SetStyle(style);

	//保存文件
	workbook->SaveToFile(outputFile.c_str(), ExcelVersion::Version2016);
	workbook->Dispose();
}

C++ 将数据写入 Excel 工作表

在 C++ 中将数组写入指定的单元格范围

Spire.XLS for C++ 提供了 Worksheet->InsertArray() 方法,允许程序员将向量写入工作表的指定单元格范围。在将数组写入工作表之前,您需要将它们转换为向量。将数组写入工作表的步骤如下:

  • C++
#include "Spire.Xls.o.h" 

using namespace Spire::Xls;

int main()
{
	//指定输入和输出文件
	std::wstring inputFile = L"数据验证.xlsx";
	std::wstring outputFile = L"删除数据验证.xlsx";

	//创建Workbook对象
	intrusive_ptr<Workbook> workbook = new Workbook();

	//加载Excel文档示例
	workbook->LoadFromFile(inputFile.c_str());

	//获取指定的工作表
	intrusive_ptr<Worksheet> sheet = dynamic_pointer_cast<Worksheet>(workbook->GetWorksheets()->Get(0));

	//创建一个矩形数组,用于定位工作表中的区域
	std::vector<intrusive_ptr<Spire::Xls::Rectangle>> rectangles(1);

	//为数组的第一个元素赋值,并指定矩形单元格范围
	rectangles[0] = Spire::Xls::Rectangle::FromLTRB(0, 0, 2, 9);

	//删除由矩形表示的范围内的验证
	sheet->GetDVTable()->Remove(rectangles);

	//保存结果文档
	workbook->SaveToFile(outputFile.c_str(), ExcelVersion::Version2016);
	workbook->Dispose();
}

C++ 将数据写入 Excel 工作表

申请临时 License

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