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

Spire.Cloud 纯前端文档控件

Spire.PDF for Java 11.3.5 已发布。本次更新优化了转换 OFD 到 PDF 的耗时,同时增强了 SVG 到 PDF 的转换功能。此外,一些已知问题也在该版本中成功修复,如提取表格时多出空白列的问题。详情请阅读以下内容。

优化:

问题修复:


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

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

在 PDF 文档中添加页眉和页脚有助于保持一致的版式和专业的外观。页眉通常位于页面顶部,可显示文档标题、作者姓名或公司名称,而页脚位于页面底部,常用于添加页码、日期或法律声明。这些元素对于报告、合同和正式文件至关重要,不仅提升了可读性,还符合规范要求。本文将介绍如何使用 Spire.PDF for Java,通过 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>

背景知识

在使用 Spire.PDF for Java 处理现有的 PDF 文档时,需要了解其坐标系的原点位于页面左上角,X 轴向右延伸,Y 轴向下延伸。向页面添加页眉是指在页面上方的空白区域内插入内容,如文本、图片、自动字段和形状等;而添加页脚实际上就是在页面底部的空白区域插入内容。

PDF 页面坐标系

如果空白区域不足以容纳您要添加的内容,您可以考虑增大 PDF 页边距。

Java 在现有 PDF 文档中添加页眉

Spire.PDF for Java 帮助用户通过 PdfCanvas.drawString()、PdfCanvas.drawImage() 和 PdfCanvas.drawLine() 等方法在 PDF 文档的页面上绘制文本、图像和形状。为了在页眉中添加页码、章节、日期等动态信息,您需要使用自动字段。Spire.PDF for Java 提供了 PdfPageNumberField 类、PdfSectionNumberField 类和 PdfCreationDateField 类等来实现这些数据的动态添加。

下面是使用 Spire.PDF for Java 向 PDF 文档添加包含文本、图像、日期和线条的页眉的详细步骤:

  • Java
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.automaticfields.PdfCompositeField;
import com.spire.pdf.automaticfields.PdfCreationDateField;
import com.spire.pdf.graphics.*;

import java.awt.*;

public class AddHeaderToPdf {
   public static void main(String[] args) {


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

       // 加载 PDF 文件
       doc.loadFromFile("/示例.pdf");

       // 加载添加到页眉的图像
       PdfImage headerImage = PdfImage.fromFile("/Logo1.png");

       // 获取图像的像素宽度
       float width = headerImage.getWidth();

       // 将像素转换为点
       PdfUnitConvertor unitCvtr = new PdfUnitConvertor();
       float pointWidth = unitCvtr.convertUnits(width, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point);

       // 自定义页眉文本
       String headerText = "冰蓝科技\nwww.e-iceblue.cn";

       // 创建字体
       PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("DengXian", Font.BOLD, 12),true);

       // 创建笔刷
       PdfBrush brush = PdfBrushes.getPurple();

       // 创建画笔
       PdfPen pen = new PdfPen(brush, 1.0f);

       // 创建文档创建日期字段
       PdfCreationDateField creationDateField = new PdfCreationDateField(font, brush);
       creationDateField.setDateFormatString("yyyy-MM-dd");

       // 创建组合字段用以显示文本和日期
       PdfCompositeField compositeField = new PdfCompositeField(font, brush, "创建时间: {0}", creationDateField);
       compositeField.setLocation(new Point(55, 58));

       // 遍历文档中的页面
       for (int i = 0; i < doc.getPages().getCount(); i++)
       {
           // 获取当前页面
           PdfPageBase page = doc.getPages().get(i);

           // 将图像绘制到页面上方空白区域
           page.getCanvas().drawImage(headerImage, page.getActualSize().getWidth() - pointWidth - 55, 20);

           // 绘制文本
           page.getCanvas().drawString(headerText, font, brush, 55, 33);

           // 绘制线条
           page.getCanvas().drawLine(pen, new Point(55, 73), new Point((int)page.getActualSize().getWidth() - 55, 70));

           // 将组合字段绘制到页眉区域
           compositeField.draw(page.getCanvas());
       }

       // 保存修改后的文档
       doc.saveToFile("/添加页眉.pdf");
       doc.dispose();
   }
}

Java 给现有的 PDF 文档添加页眉

Java 在现有 PDF 文档中添加页脚

同样的,PdfCanvas.drawString()、PdfCanvas.drawImage() 和 PdfCanvas.drawLine() 方法也可以用来在 PDF 文档中添加页脚。通过调整 X 轴和 Y 轴坐标,你可以在 PDF 页面上的任何位置绘制想要添加的信息。如果需要在页脚添加动态数据,如页码、章节号、日期等,可以使用由 Spire.PDF for Java 提供的 PdfPageNumberField、PdfPageCountField、PdfSectionNumberField 等类,以实现动态信息的自动添加。

以下是使用 Spire.PDF for Java 在 PDF 文档中添加包含图像和页码的页脚的具体流程:

  • Java
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.automaticfields.PdfCompositeField;
import com.spire.pdf.automaticfields.PdfPageCountField;
import com.spire.pdf.automaticfields.PdfPageNumberField;
import com.spire.pdf.graphics.PdfBrush;
import com.spire.pdf.graphics.PdfBrushes;
import com.spire.pdf.graphics.PdfImage;
import com.spire.pdf.graphics.PdfTrueTypeFont;

import java.awt.*;
import java.awt.geom.Dimension2D;
import java.awt.geom.Point2D;

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

       // 加载 PDF 文件
       doc.loadFromFile("/示例.pdf");

       // 加载一张图片
       PdfImage footerImage = PdfImage.fromFile("/banner.png");

       // 创建字体
       PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("DengXian", Font.BOLD, 12),true);

       // 创建笔刷
       PdfBrush brush = PdfBrushes.getWhite();

       // 创建当前页码字段
       PdfPageNumberField pageNumberField = new PdfPageNumberField();

       // 创建总页数字段
       PdfPageCountField pageCountField = new PdfPageCountField();

       // 创建一个组合字段,将页码和页数字段组合为字符串
       PdfCompositeField compositeField = new PdfCompositeField(font, brush, "第 {0} 页,共 {1} 页", pageNumberField, pageCountField);

       // 获取字体大小
       Dimension2D fontSize = font.measureString(compositeField.getText());

       // 获取页面大小
       Dimension2D pageSize = doc.getPages().get(0).getSize();

       // 设置组合字段的位置
       compositeField.setLocation(new Point2D.Double((pageSize.getWidth() - fontSize.getWidth())/2,  pageSize.getHeight() - 45));

       // 遍历文档中的页面
       for (int i = 0; i < doc.getPages().getCount(); i++)
       {
           // 获取指定页面
           PdfPageBase page = doc.getPages().get(i);

           // 在页面底部空白区域绘制图片
           page.getCanvas().drawImage(footerImage, 55, pageSize.getHeight() - 65, pageSize.getWidth() - 110, 50);

           // 在页面底部空白区域绘制组合字段
           compositeField.draw(page.getCanvas());
       }

       // 保存结果文档
       doc.saveToFile("/添加页脚.pdf");
       doc.dispose();
   }
}

Java 给现有的 PDF 文档添加页脚

申请临时 License

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

在不同的数据管理与演示场景中,将 Excel 文件转换为多样化格式至关重要。ODS、XPS、PostScript 和 PDF/A-1b 等格式都各具独特的优势,适用于不同的场景。

ODS 因与许多办公套件兼容而被广泛使用。XPS 可保持文档的真实性,是共享和存档的理想选择。PostScript 是一种通用的页面描述语言,常用于印刷和图形设计。PDF/A-1b 符合严格的保存标准,可确保长期存档。

本文将说明如何使用 Spire.XLS for Python 通过 Python 将 Excel 转换为 ODS、XPS、PostScript 和 PDF/A-1b,利用它们的特定优势满足各种需求。

安装 Spire.XLS for Python

此教程需要 Spire.XLS for Python 和 plum-dispatch v1.7.4。您可以通过以下 pip 命令将它们轻松安装到 Windows 中。

pip install Spire.XLS

如果您不确定如何安装,请参考: 如何在 Windows中安装 Spire.XLS for Python

Python 将 Excel 转换为 ODS、XPS 和 PostScript

要将 Excel 转换为 ODS、XPS 和 PostScript 文档,可以使用 Workbook.SaveToFile() 方法。具体步骤如下:

以下是代码示例,供参考:

  • Python
from spire.xls import *
from spire.xls.common import *

# 创建 Workbook 对象
workbook = Workbook()

# 加载 Excel 文件
workbook.LoadFromFile("示例.xlsx")

# 将 Excel 保存为 ODS 文件
workbook.SaveToFile("转换\\转ODS.ods", FileFormat.ODS)
# 将 Excel 保存为 XPS 文件
workbook.SaveToFile("转换\\转XPS.xps", FileFormat.XPS)
# 将 Excel 保存为 PostScript 文件
workbook.SaveToFile("转换\\转PostScript.ps", FileFormat.PostScript)

workbook.Dispose()

将Excel文档转换为ODS、XPS 或 PostScript 文件

Python 将 Excel 转换为 PDF/A-1b

您可以先通过 Workbook.ConverterSetting.PdfConformanceLevel 属性设置 PDF 一致性级别,然后再使用 Workbook.SaveToFile() 方法将 Excel 转换为 PDF/A-1b。具体步骤如下:

以下是代码示例,供参考:

  • Python
from spire.xls import *
from spire.xls.common import *

# 创建 Workbook 对象
workbook = Workbook()

# 加载 Excel 文件
workbook.LoadFromFile("示例.xlsx")

# 将 PDF 一致性级别设置为 PDF/A-1b
workbook.ConverterSetting.PdfConformanceLevel = PdfConformanceLevel.Pdf_A1B

# 将 Excel 转换为 PDF/A-1b 文件
workbook.SaveToFile("转PDFA1B.pdf", FileFormat.PDF)
workbook.Dispose()

将Excel文档转换为PDF/A-1b

申请临时 License

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

在处理 PDF 文件时,您可能会遇到加密的文档。这意味着在输入正确的密码之前,您无法查看或编辑内容。了解如何检查 PDF 是否加密以及如何确定正确的密码,对于访问敏感文件内容至关重要。在这篇文章中,我们将介绍如何使用 Python 及 Spire.PDF for Python 库来实现这些功能。

安装 Spire.PDF for Python

本教程需要用到 Spire.PDF for Python 和 plum-dispatch v1.7.4。可以通过以下 pip 命令将它们轻松安装到 Windows 中。

pip install Spire.PDF

如果您不清楚如何安装,请参考此教程: 如何在 Windows 中安装 Spire.PDF for Python

Python 判断 PDF 是否加密

Spire.PDF for Python 提供了 PdfDocument.IsPasswordProtected(fileName: str) 方法,用于判断 PDF 文件是否加密。具体步骤如下:

  • Python
from spire.pdf import *

# 指定输入和输出文件路径
inputFile = "示例文档.pdf"
outputFile = "加密状态检查结果.txt"

# 检查 PDF 是否加密
isProtected = PdfDocument.IsPasswordProtected(inputFile)

# 将结果写入文本文件
with open(outputFile, "w", encoding="utf-8") as fp:
    fp.write("该PDF文件" + ("已加密!" if isProtected else "未加密!"))

Python 判断 PDF 是否加密

Python 确定 PDF 的正确密码

Spire.PDF for Python 没有提供直接验证加密 PDF 文档的密码是否正确的方法,但开发者可以通过尝试加载 PDF 并捕获异常来实现。如果密码不正确,将抛出异常。具体步骤如下:

  • Python
from spire.pdf import *

# 指定输入和输出文件路径
inputFile = "示例文档.pdf"
outputFile = "正确密码验证结果.txt"

# 判断 PDF 是否加密
isEncrypted = PdfDocument.IsPasswordProtected(inputFile)

# 创建待测试的密码列表
passwords = ["密码123", "测试密码", "admin123", "abc"]

# 创建文本文件存储结果
with open(outputFile, "w", encoding="utf-8") as fp:
    if isEncrypted:
        for value in passwords:
            try:
                # 尝试使用当前密码加载 PDF
                doc = PdfDocument()
                doc.LoadFromFile(inputFile, value)
                # 如果成功,说明密码正确
                fp.write(f'密码 "{value}" 是正确的\n')            
            except SpireException:
                # 如果抛出异常,说明密码不正确
                fp.write(f'密码 "{value}" 不正确\n')
    else:
        fp.write("该PDF文档没有加密,无需验证密码\n")

Python 确定 PDF 的正确密码

申请临时 License

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

Spire.PDF for JavaScript 是一款领先的 PDF API,专为开发者设计,提供创建、读取、编辑和转换 PDF 文件的全方位支持。作为一款独立运行的 JavaScript PDF 库,它无需依赖 Adobe Acrobat 或其他第三方软件即可实现高质量的 PDF 文件处理与转换。

Spire.PDF for JavaScript 支持多种 JavaScript 开发框架,包括 Vue、React、Angular 和 Node.js,兼容前端和后端应用,同时兼容中标麒麟和中科方德等大部分国产操作系统,使其在各种开发环境中均能轻松使用。它不仅可以将 PDF 转换为 Word、Excel、PowerPoint、HTML、SVG、PDF/A 等多种格式,还能从 HTML、图像、文本和 XPS 文件生成 PDF。此外,该库提供丰富的文档管理选项,包括设置文档属性、调整页面尺寸与方向、添加数字签名、加密与解密 PDF,以及管理安全权限,满足多样化应用需求。

在 Web 环境中,将 PDF 转换为 HTML 有助于提升内容的可访问性和交互性。PDF 虽然因其稳定的版式和便捷的共享特性被广泛使用,但它在在线展示和交互方面存在一定局限。相比之下, HTML 具备更高的灵活性,使内容能够自适应不同设备,便于在网站和移动端流畅呈现。通过将 PDF 转换为 HTML,开发者不仅能提升搜索引擎可见性,还能简化内容编辑流程,优化用户体验。本文将介绍如何在 React 中使用 JavaScript 和 Spire.PDF for JavaScript 库将 PDF 转换为 HTML。

安装 Spire.PDF for JavaScript

要在 React 应用程序中实现 PDF 转 HTML,首先需要下载 Spire.PDF for JavaScript,或者使用 npm 进行安装:

npm i spire.office

下载的产品包整合了 Spire.Doc for JavaScript,Spire.XLS for JavaScript,Spire.PDF for JavaScript,Spire.Presentation for JavaScript,使用 Spire.PDF for JavaScript 的功能需将相应的 spire.pdf.js,Spire.Pdf.Wasm.zip,spire.common.js,Spire.Common.Wasm.zip,_framework 文件复制到项目的 public 文件夹中。同时为了确保文本渲染,相关使用字体文件可自定义路径添加。以下示例中,字体添加路径为:public\static\font。

详细的安装和配置步骤,请参考此教程:如何在 React 项目中集成 Spire.PDF for JavaScript

在 React 中将 PDF 转换为 HTML

开发者可以使用 Spire.PDF for JavaScript 提供的 PdfDocument.SaveToFile() 方法,轻松将 PDF 文件转换为 HTML。具体步骤如下:

  • JavaScript
import React, { useState, useEffect } from 'react';

function App() {
   const [wasmModule, setWasmModule] = useState(null);
   useEffect(() => {
    (async () => {
      try {
        const publicUrl = process.env.PUBLIC_URL || '';
        const spireModule = await import(/* webpackIgnore: true */ `${publicUrl}/spire.pdf.js`);
        const rawModule = spireModule.default || spireModule;
        window.wasmModule = typeof rawModule === 'function' 
          ? await rawModule({ locateFile: p => p.endsWith('.wasm') ? `${publicUrl}/${p}` : p })
          : rawModule;       
        setWasmModule(window.wasmModule);
      } catch (error) {
        console.error('spire.pdf.js: 加载失败', error);
      }
    })();
  }, []); 

  const ConvertPdfToHTML = async () => {
    // 获取WASM模块
    const wasmModule = window.wasmModule.spirepdf;
    
    if (wasmModule) {

      // 加载字体文件到虚拟文件系统(VFS)
      await window.spire.FetchFileToVFS("MSYH.TTC", "/Library/Fonts/", `${process.env.PUBLIC_URL}/`);

      // 要转换的PDF文件名
      let inputFileName = "趣味填词故事.pdf";

      // 将PDF文件加载到虚拟文件系统(VFS)
      await window.spire.FetchFileToVFS(inputFileName, "", `${process.env.PUBLIC_URL}static/data/`);
      
      // 创建PDF文档对象
      let doc = new wasmModule.PdfDocument();
      
      // 加载PDF文件
      doc.LoadFromFile(inputFileName);

      // 定义输出文件名
      const outputFileName = "Pdf转Html.html";

      // 将PDF保存为HTML格式
      doc.SaveToFile(outputFileName);
       // 关闭文档,释放资源
       doc.Close();

      // 读取保存的HTML文件,转换为Blob对象
      const modifiedFileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
      const modifiedFile = new Blob([modifiedFileArray], { type: "text/html" });
      
       // 创建 Blob 的 URL 并触发下载
      const url = URL.createObjectURL(modifiedFile);  
      const a = document.createElement('a');         
      a.href = url;                                   
      a.download = outputFileName;                    
      document.body.appendChild(a);                   
      a.click();                                     
      document.body.removeChild(a);                   
      URL.revokeObjectURL(url);                       
    }
  };

  return (
    <div style={{ textAlign: 'center', height: '300px' }}>
      <h1>在 React 中使用 JavaScript 将 PDF 转换为 HTML</h1>
      <button onClick={ConvertPdfToHTML}>
        转换
      </button>
    </div>
  );
}

export default App;

React 应用程序编译成功后,将在默认网页浏览器中打开,通常是 http://localhost:3000。点击“转换”按钮即可将 PDF 文件转换为 HTML。

React 应用程序编译成功

下图展示了本示例中的输入 PDF 文件和转换后的 HTML 文件:

在 React 中将 PDF 转换为 HTML

自定义 PDF 到 HTML 转换设置

开发者可以使用 PdfDocument.ConvertOptions.SetPdfToHtmlOptions() 方法来自定义 PDF 转 HTML 过程中的一些设置。例如,可以选择是否在 HTML 中嵌入 SVG 或图片,以及设置每个 HTML 文件包含的最大页数。具体步骤如下:

  • JavaScript
import React, { useState, useEffect } from 'react';

function App() {
   const [wasmModule, setWasmModule] = useState(null);
   useEffect(() => {
    (async () => {
      try {
        const publicUrl = process.env.PUBLIC_URL || '';
        const spireModule = await import(/* webpackIgnore: true */ `${publicUrl}/spire.pdf.js`);
        const rawModule = spireModule.default || spireModule;
        window.wasmModule = typeof rawModule === 'function' 
          ? await rawModule({ locateFile: p => p.endsWith('.wasm') ? `${publicUrl}/${p}` : p })
          : rawModule;       
        setWasmModule(window.wasmModule);
      } catch (error) {
        console.error('spire.pdf.js: 加载失败', error);
      }
    })();
  }, []); 
  
  // 从虚拟文件系统 (VFS) 下载文件的方法
  const downloadFileFromVFS = (fileName) => {
    const fileArray = window.dotnetRuntime.Module.FS.readFile(fileName);
    const fileBlob = new Blob([fileArray], { type: 'text/html' });
    const url = URL.createObjectURL(fileBlob);
    const a = document.createElement('a');
    a.href = url;
    a.download = fileName;
    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);
    URL.revokeObjectURL(url);
  };

  const ConvertPdfToHTML = async () => {
    // 获取WASM模块
    const wasmModule = window.wasmModule.spirepdf;
    
    if (wasmModule) {
      // 将字体文件加载到虚拟文件系统(VFS)
      await window.spire.FetchFileToVFS("MSYH.TTC", "/Library/Fonts/", `${process.env.PUBLIC_URL}static/font/`);
      // 要转换的PDF文件名
      let inputFileName = ""趣味填词故事.pdf"";

      // 将PDF文件加载到虚拟文件系统(VFS)
      await window.spire.FetchFileToVFS(inputFileName, "", `${process.env.PUBLIC_URL}static/data/`);
      
      // 创建PDF文档对象
      let doc = new wasmModule.PdfDocument();
      
      // 加载PDF文件
      doc.LoadFromFile(inputFileName);

      const totalPages = doc.Pages.Count;

      // 自定义转换设置
      doc.ConvertOptions.SetPdfToHtmlOptions({ useEmbeddedSvg: false, useEmbeddedImg: true, maxPageOneFile: 1 });

      // 定义输出文件名
      const outputFileName = '自定义PDF到HTML转换_result.html';

      // 将 PDF 保存为 HTML 文件
      doc.SaveToFile({ fileName: outputFileName, fileFormat: wasmModule.FileFormat.HTML });

      // 释放资源
      doc.Close();
      doc.Dispose();

      // 记录 PDF 的总页数
      console.log(`总页数: ${totalPages}`);

      // 下载所有生成的 HTML 文件
      for (let i = 1; i <= totalPages; i++) {
        const fileName = `自定义PDF到HTML转换_result_${i}-${i}.html`;
        downloadFileFromVFS(fileName);
      }                 
    }
  };

  return (
    <div style={{ textAlign: 'center', height: '300px' }}>
      <h1>在 React 中使用 JavaScript 将 PDF 转换为 HTML</h1>
      <button onClick={ConvertPdfToHTML}>
        转换
      </button>
    </div>
  );
}

export default App;

在 React 中将 PDF 转换为 HTML 流

Spire.PDF for JavaScript 还支持使用 PdfDocument.SaveToStream() 方法将 PDF 转换为 HTML 流。具体步骤如下:

  • JavaScript
import React, { useState, useEffect } from 'react';

function App() {
   const [wasmModule, setWasmModule] = useState(null);
   useEffect(() => {
    (async () => {
      try {
        const publicUrl = process.env.PUBLIC_URL || '';
        const spireModule = await import(/* webpackIgnore: true */ `${publicUrl}/spire.pdf.js`);
        const rawModule = spireModule.default || spireModule;
        window.wasmModule = typeof rawModule === 'function' 
          ? await rawModule({ locateFile: p => p.endsWith('.wasm') ? `${publicUrl}/${p}` : p })
          : rawModule;       
        setWasmModule(window.wasmModule);
      } catch (error) {
        console.error('spire.pdf.js: 加载失败', error);
      }
    })();
  }, []); 

  const ConvertPdfToHTML = async () => {
    // 获取WASM模块
    const wasmModule = window.wasmModule.spirepdf;
    
    if (wasmModule) {

      await window.spire.FetchFileToVFS("MSYH.TTC", "/Library/Fonts/", `${process.env.PUBLIC_URL}/`);
      // 要转换的PDF文件名
      let inputFileName = "趣味填词故事.pdf";

      // 将PDF文件加载到虚拟文件系统(VFS)
      await window.spire.FetchFileToVFS(inputFileName, "", `${process.env.PUBLIC_URL}static/data/`);
      
      // 创建PDF文档对象
      let doc = new wasmModule.PdfDocument();
      
      // 加载PDF文件
      doc.LoadFromFile(inputFileName);

      /// 定义输出文件名
      const outputFileName = 'Pdf转Html流.html';
      
      // 创建一个新的内存流
      let ms = new wasmModule.Stream();

      // 将文件按流保存为html
      doc.SaveToStream({stream: ms, fileformat: wasmModule.FileFormat.HTML});
      ms.Save(outputFileName);

      // 释放资源
      ms.Close();
      doc.Close();

      // 读取保存的HTML文件,转换为Blob对象
      const modifiedFileArray = window.dotnetRuntime.Module.FS.readFile(outputFileName);
      const modifiedFile = new Blob([modifiedFileArray], { type: ""text/html"" });
      
       // 创建 Blob 的 URL 并触发下载
      const url = URL.createObjectURL(modifiedFile);  
      const a = document.createElement('a');         
      a.href = url;                                   
      a.download = outputFileName;                    
      document.body.appendChild(a);                   
      a.click();                                     
      document.body.removeChild(a);                   
      URL.revokeObjectURL(url);                       
    }
  };

  return (
    <div style={{ textAlign: 'center', height: '300px' }}>
      <h1>在 React 中使用 JavaScript 将 PDF 转换为 HTML
      <button onClick={ConvertPdfToHTML}>
        转换
      </button>
    </div>
  );
}

export default App;

申请临时 License

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

Spire.Office for JavaScript 现已正式上线,欢迎开发者下载试用!该库致力于帮助开发人员更加便捷地处理各种格式的文档。

Spire.Office for JavaScript

Spire.Office for JavaScript 是一款全面的 Office 和 PDF 文档处理器,整合了 Spire.Doc for JavaScript、Spire.XLS for JavaScript、Spire.Presentation for JavaScript、Spire.PDF for JavaScript 四款产品。利用该组件,开发人员可以在 React、Vue、Angular 等前端框架以及 Node.js 环境中高效处理 Word、Excel、PowerPoint、PDF 以及其他多种文档格式,实现文档的读取、创建、编辑和转换等多种功能。

了解有关 Spire.Office for JavaScript 及其功能的更多信息,请点击:

https://www.e-iceblue.cn/Introduce/Spire-Office-Javascript.html


联系我们

Spire.Doc 13.3.7 现已发布。该版本支持 .NET9.0,并增强了 MarkDown 到 Word、以及 Word 到 PDF/HTML 流的转换,此外还修复了几个已知问题,如加载 Word 文档时程序会抛出异常。详情请查看以下内容。

调整:

问题修复:


获取 Spire.Doc 13.3.7,请点击:

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

Spire.Presentation for JavaScript 10.3.1 已发布。本次更新调整并规范化部分方法名和属性名。详情请阅读以下内容。

调整:


获取 Spire.Presentation for JavaScript 10.3.1,请点击:

https://www.e-iceblue.cn/Downloads/Spire-Presentation-JavaScript.html

XML 以其卓越的灵活性和独特的自描述特性,在数据存储与交换的领域中得到广泛的应用。不过,大量用户在直接操作 XML 文件时,往往会遭遇诸多难题。而 Excel 是一款熟悉且用户友好的数据分析工具,通过将 XML 转换为 Excel 不仅能让数据更易于访问,还能提高数据在各种应用程序中的可用性。本文将介绍如何使用 Spire.XLS for Python 在 Python 中将 XML 转换为 Excel 或将 XML 转换为 PDF。

安装 Spire.XLS for Python

此教程需要 Spire.XLS for Python 和 plum-dispatch v1.7.4。您可以通过以下 pip 命令将它们轻松安装到 Windows中。

pip install Spire.XLS

如果您不确定如何安装,请参考: 如何在 Windows中安装 Spire.XLS for Python

了解 XML 结构:元素、属性和数据

在将 XML 转换为 Excel 之前,了解 XML 文件的结构至关重要。XML 是一种标记语言,使用标记来定义元素、属性和数据。下面是这些组成部分的细分:

<person>
    <name>张三</name>
    <age>30</age>
</person>
<person id="1">
    <name>张三</name>
    <age>30</age>
</person>

了解这些组成部分将帮助您有效地将 XML 数据映射到 Excel 中。

Python 将 XML 转换为 Excel

要将 XML 文件加载到 Python 中,可以使用 Python 标准库中的 xml.etree.ElementTree 库。该库提供了导航和操作 XML 树的方法。下面是一个示例:

import xml.etree.ElementTree as ET

# 加载 XML 文件
tree = ET.parse('data.xml')
root = tree.getroot()

# 遍历元素
for person in root.findall('person'):
    name = person.find('name').text
    age = person.find('age').text

解析 XML 数据后,下一步就是将其映射到 Excel 工作表中。您可以利用 Spire.XLS for Python 创建一个新的工作簿,将数据输入特定的单元格,并对工作表应用样式和格式。这些格式选项包括自动调整列宽、调整文本对齐方式以及将标题加粗。

要在 Python 中将 XML 转换为 Excel,请按照以下步骤操作:

以下代码提供了一种更智能的方法,可从 XML 中读取数据并将其导入 Excel 文件。

  • C#
from spire.xls import *
from spire.xls.common import *
import xml.etree.ElementTree as ET

# 创建 Workbook 对象
workbook = Workbook()

# 移除默认工作表
workbook.Worksheets.Clear()

# 添加新工作表并命名
worksheet = workbook.Worksheets.Add("报销表")

# 加载XML数据
xml_tree = ET.parse("消费.xml")
xml_root = xml_tree.getroot()

# 获取第一个 “ExpenseItem” 元素
first_item = xml_root.find("ExpenseItem")

# 提取标题信息并将其转换为列表
header = list(first_item.iter())[1:]  

# 定义英文和中文标签的映射关系
label_mapping = {
    "Date": "日期",
    "Description": "用途",
    "Amount": "金额",
}

# 将标题写入Excel
for col_index, header_node in enumerate(header, start=1):
    header_text = header_node.tag
    chinese_label = label_mapping.get(header_text, header_text)
    worksheet.SetValue(1, col_index, chinese_label)

# 遍历每个 “ExpenseItem” 元素和其中的每个数据节点,将其他数据写入Excel
row_index = 2
for item in xml_root.iter("ExpenseItem"):
    for col_index, data_node in enumerate(list(item.iter())[1:], start=1):  
        value = data_node.text
        header_text = list(header[col_index - 1].iter())[0].tag
        chinese_label = label_mapping.get(header_text, header_text)
        worksheet.SetValue(row_index, col_index, value)
    row_index += 1

# 设置列宽
worksheet.AllocatedRange.AutoFitColumns()

# 设置对齐方式
worksheet.AllocatedRange.HorizontalAlignment = HorizontalAlignType.Left

# 设置字体样式
worksheet.Range["A1:C1"].Style.Font.IsBold = True

# 保存结果文件
workbook.SaveToFile("Xml转Excel.xlsx")
workbook.Dispose()

将 XML 数据映射到 Excel 工作表中

Python 将 XML 转换为 PDF

上一个示例成功地将 XML 文件中的数据导入到 Excel 工作表中,然后您可以使用 Worksheet.SaveToPdf() 方法将此工作表转换为 PDF文档。为创建结构合理的 PDF,可考虑在转换过程中调整页面布局设置,如保留页边距和网格线等。

使用 Python 将 XML 转换为 PDF 的步骤如下:

  • C#
from spire.xls import *
from spire.xls.common import *
import xml.etree.ElementTree as ET

# 创建 Workbook 对象
workbook = Workbook()

# 移除默认工作表
workbook.Worksheets.Clear()

# 添加新工作表并命名
worksheet = workbook.Worksheets.Add("报销表")

# 加载XML数据
xml_tree = ET.parse("消费.xml")
xml_root = xml_tree.getroot()

# 获取第一个 “ExpenseItem” 元素
first_item = xml_root.find("ExpenseItem")

# 提取标题信息并将其转换为列表
header = list(first_item.iter())[1:]  

# 定义英文和中文标签的映射关系
label_mapping = {
    "Date": "日期",
    "Description": "用途",
    "Amount": "金额",
}

# 将标题写入Excel
for col_index, header_node in enumerate(header, start=1):
    header_text = header_node.tag
    chinese_label = label_mapping.get(header_text, header_text)
    worksheet.SetValue(1, col_index, chinese_label)

# 遍历每个 “ExpenseItem” 元素和其中的每个数据节点,将其他数据写入Excel
row_index = 2
for item in xml_root.iter("ExpenseItem"):
    for col_index, data_node in enumerate(list(item.iter())[1:], start=1):  
        value = data_node.text
        header_text = list(header[col_index - 1].iter())[0].tag
        chinese_label = label_mapping.get(header_text, header_text)
        worksheet.SetValue(row_index, col_index, value)
    row_index += 1

# 设置列宽
worksheet.AllocatedRange.AutoFitColumns()

# 设置对齐方式
worksheet.AllocatedRange.HorizontalAlignment = HorizontalAlignType.Left

# 设置字体样式
worksheet.Range["A1:C1"].Style.Font.IsBold = True

# 将工作表转换到一页纸上
workbook.ConverterSetting.SheetFitToPage = True

# 获取 PageSetup 对象
pageSetup = worksheet.PageSetup

# 设置页边距
pageSetup.TopMargin = 0.5
pageSetup.BottomMargin = 0.5
pageSetup.LeftMargin = 0.5
pageSetup.RightMargin = 0.5

# 保留网格线 
pageSetup.IsPrintGridlines = True

# 将工作表保存为 PDF 文件
worksheet.SaveToPdf("Xml转Pdf.pdf")
workbook.Dispose()

将xml数据转换为PDF文档

申请临时 License

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