Java中將XML轉換為PDF的兩種辦法

banq發表於2024-05-21

Java 提供了多個用於處理 XML 和 PDF 文件的庫和 API。在 Java 中將 XML 轉換為 PDF 涉及解析 XML 資料、應用樣式和格式以及生成 PDF 輸出。

本文探討了在 Java 中將 XML 轉換為 PDF 的不同方法和庫。

瞭解轉換過程
在討論實現細節之前,我們先強調一下將 XML 轉換為 PDF 的基本步驟。此過程通常需要兩個主要步驟:

  • 第一步是 XML 解析,分析 XML 內容,並提取其結構和文字資料。在Java中,開發人員可以訪問各種XML解析庫,例如DOM(文件物件模型)、SAX(Simple API for XML)和StAX(Streaming API for XML)。
  • 第二步涉及 PDF 生成。此步驟包括建立 PDF 元件,例如段落、表格、影像和其他元素。然後根據 XML 文件中定義的結構對這些元件進行組織和格式化。

1、使用 Apache FOP(格式化物件處理器)
Apache FOP是一個強大的開源庫,用於將 XML 資料轉換為各種輸出格式,包括 PDF。此外,FOP 根據XSL-FO樣式錶轉換 XML 內容,最終生成高質量的 PDF 文件。

Apache FOP 的工作原理
Apache FOP 的工作經歷了以下關鍵階段:

  • XML 解析:Apache FOP 首先解析輸入 XML 資料。此過程涉及提取 XML 文件的結構和內容,該文件通常表示最終 PDF 輸出中要呈現的資料。
  • XSL-FO 轉換:FOP 應用 XSL-FO 樣式表將 XML 元素格式化為相應的 PDF 元素(如段落、表格和影像),確保遵守指定的樣式和佈局規則。
  • PDF 渲染:將內容轉換為 XSL-FO 格式後,Apache FOP 將其渲染為視覺上吸引人的 PDF 文件,準確反映原始 XML 內容。
  • 輸出生成:最後,FOP 生成一個獨立的 PDF 檔案,其中封裝了格式化內容,可供儲存、顯示或分發,適合各種列印和檢視目的。

示例:使用 Apache FOP 將 XML 轉換為 PDF
要使用 Apache FOP 庫及其功能將 XML 轉換為 PDF,有必要將 Apache FOP 依賴項整合到我們專案的構建配置中。

如果我們使用 Maven,我們可以透過在pom.xml檔案中包含FOP 依賴項來實現這一點:

<dependency>
    <groupId>org.apache.xmlgraphics</groupId>
    <artifactId>fop</artifactId>
    <version>2.9</version>
</dependency>

現在,讓我們建立一個使用 Java 中的 Apache FOP 將 XML 轉換為 PDF 的方法:

void convertXMLtoPDFUsingFop(String xmlFilePath, String xsltFilePath, String pdfFilePath) throws Exception {
    FopFactory fopFactory = FopFactory.newInstance(new File(<font>".").toURI());
    FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
    try (OutputStream out = new BufferedOutputStream(Files.newOutputStream(new File(pdfFilePath).toPath()))) {
        Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out);
        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer transformer = factory.newTransformer(new StreamSource(new File(xsltFilePath)));
        Source src= new StreamSource(new File(xmlFilePath));
        Result res = new SAXResult(fop.getDefaultHandler());
        transformer.transform(src, res);
    }
}

上面的示例重點介紹了轉換過程中涉及的關鍵步驟,其中包括:
  • 初始化:我們首先透過建立FopFactory和FOUserAgent例項來初始化 Apache FOP 。
  • 輸出流:我們指定生成的 PDF 檔案的輸出流。
  • FOP 例項建立:使用FopFactory建立新的 Fop 例項,指定 PDF 輸出格式。
  • XSLT 轉換:我們從xsltFilePath引數中指定的 XSLT 樣式表建立一個 Transformer 例項。
  • 轉換應用程式:使用 XSLT 樣式錶轉換xmlFilePath引數中定義的 XML 資料,並將生成的FO(格式化物件)傳送到 FOP 例項進行渲染。
  • 輸出生成:最後,該方法生成 PDF 輸出並將其儲存到pdfFilePath引數中提供的指定檔案路徑。

2.使用IText庫
iText 庫是用於生成和管理 PDF 檔案的強大且靈活的解決方案。其全面的功能可以將 XML 內容無縫轉換為 PDF 文件,從而提供量身定製的定製和適應性。

IText 的工作原理
IText 的工作經歷了以下關鍵階段:

  • HTML 到 PDF 轉換:iText 使用 HTML 作為中間格式將 XML 資料轉換為 PDF。 XML 被轉換為 HTML,利用 iText 的 HTML 解析功能無縫整合到 PDF 文件中。
  • XML 解析和渲染:iText 解析 XML 內容並將其直接渲染為 PDF。它支援各種 XML 格式,如 XHTML、SVG 和 MathML,並可以應用 CSS 樣式來精確控制佈局和外觀。
  • PDF 生成:解析後,iText 生成文字、影像和表格等 PDF 元素。開發人員可以使用頁首、頁尾和其他元素自定義輸出,確保符合列印和檢視的 PDF 標準。

2.在 Java 中使用 iText 將 XML 轉換為 PDF
要在 Java 中使用 iText 庫生成 PDF,我們必須將iTextPDF依賴項合併到專案配置中。對於 Maven,我們可以將 iText 依賴項新增到pom.xml 檔案中:

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.13.3</version>
</dependency>

下面是一個簡單的示例,演示如何使用 Java 中的 iText 將 XML 轉換為 PDF:

public static void convertXMLtoPDFUsingIText(String xmlFilePath, String pdfFilePath) throws Exception {
    try (FileOutputStream outputStream = new FileOutputStream(pdfFilePath)) {
        Document document = new Document();
        PdfWriter.getInstance(document, outputStream);
        document.open();
        String xmlContent = new String(Files.readAllBytes(Paths.get(xmlFilePath)));
        document.add(new Paragraph(xmlContent));
        document.close();
    }
}

上面的示例說明了在 Java 中使用 iText 將 XML 轉換為 PDF 的簡單方法。首先,我們建立一個新的 PDF 文件物件。接下來我們開啟文件寫入內容。接下來,我們從指定的檔案路徑讀取 XML 內容並將其嵌入到 PDF 文件中。

最後,我們關閉文件和輸出流,確保儲存的 PDF 檔案包含結構化格式的 XML 內容。

相關文章