使用 Java 读取和添加 EPS/PS 文档中的 XMP 元数据

使用 Aspose.Page for Java 在 EPS 和 PostScript (PS) 文档中提取、检查、添加和更新 XMP(可扩展元数据平台)元数据。将标准 Dublin Core 属性、文档创建统计信息、版权详细信息和自定义元数据结构直接嵌入 PostScript 文件流,而无需更改底层的矢量图形视觉内容。

 

Aspose.Page for Java 提供高性能的 XmpHeaderConverterXmpMetadata 对象模型,用于提取现有 XMP 元数据或向 EPS/PS 文件注入新属性。

  • 要从 EPS 文件中读取作者详细信息、创建日期、版权声明和自定义属性等信息,请使用 XmpMetadata.add() 方法。
  • 要编辑现有元数据字段,例如文档标题或修改历史记录,请使用 XmpMetadata.set() 方法。
  • 要向图形文件添加专有的、企业特定的元数据属性,请使用 XmpMetadata.registerNamespace() 方法。

从 EPS 文件读取现有 XMP 元数据

从 EPS 文档中提取并解析标准和用户定义的 XMP 属性,以检查 dc:titlexmp:CreatorToolxmp:CreateDate 等元数据字段。

import com.aspose.page.xps.XpsDocument;
import com.aspose.page.xps.XpsPrintTicket;

public class ReadXpsPrintTicket {
    public static void main(String[] args) throws Exception {
        // Open existing XPS document
        XpsDocument doc = new XpsDocument("C:/XPSProject/Input/sample.xps");

        // Retrieve the Job-level Print Ticket
        XpsPrintTicket printTicket = doc.getJobPrintTicket();

        if (printTicket != null) {
            System.out.println("Print Ticket found in XPS package.");
            // Print raw XML string content of the Print Ticket
            System.out.println(printTicket.getXml());
        } else {
            System.out.println("No Job Print Ticket associated with this document.");
        }

        doc.close();
    }
}

向 EPS 文件添加和注入新的 XMP 元数据

将标准元数据属性(例如 Dublin Core 或 XMP Basic 架构)注入 EPS 文档,并保存更新后的文件输出。

import com.aspose.page.xps.XpsDocument;
import com.aspose.page.xps.XpsPrintTicket;
import java.io.FileInputStream;

public class AttachJobPrintTicket {
    public static void main(String[] args) throws Exception {
        // Load target XPS document
        XpsDocument doc = new XpsDocument("C:/XPSProject/Input/document.xps");

        // Read custom Print Ticket XML file specifying printer settings
        FileInputStream ticketStream = new FileInputStream("C:/XPSProject/Config/custom_job_ticket.xml");
        XpsPrintTicket customTicket = new XpsPrintTicket(ticketStream);

        // Assign Print Ticket to Job level
        doc.setJobPrintTicket(customTicket);

        // Save updated XPS document
        doc.save("C:/XPSProject/Output/document_with_print_ticket.xps");
        ticketStream.close();

        System.out.println("Job-level Print Ticket attached successfully.");
    }
}

添加自定义命名空间和数组元数据

注册企业特定的 XML 命名空间,并在文档的 XMP 结构中存储复杂数据类型,例如数组列表。

import com.aspose.page.xps.XpsDocument;
import com.aspose.page.xps.XpsPage;
import com.aspose.page.xps.XpsPrintTicket;
import java.io.FileInputStream;

public class AttachPagePrintTicket {
    public static void main(String[] args) throws Exception {
        XpsDocument doc = new XpsDocument("C:/XPSProject/Input/multi_page.xps");

        // Get reference to the first page (Cover Page)
        XpsPage coverPage = doc.getPage(1);

        // Load cover-page specific print settings (e.g., Heavyweight Paper Tray)
        FileInputStream coverTicketStream = new FileInputStream("C:/XPSProject/Config/cover_page_ticket.xml");
        XpsPrintTicket coverTicket = new XpsPrintTicket(coverTicketStream);

        // Set Print Ticket on Page 1
        coverPage.setPagePrintTicket(coverTicket);

        // Save compiled XPS package
        doc.save("C:/XPSProject/Output/multi_page_custom_trays.xps");
        coverTicketStream.close();

        System.out.println("Page-level Print Ticket override attached to Page 1.");
    }
}

安装和设置

将 Aspose.Page for Java 添加到您的 Maven:

Package Manager Console Command

<repository>
    <id>AsposeJavaAPI</id>
    <name>Aspose Java API</name>
    <url>https://repository.aspose.com/repo/</url>
</repository>

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-page</artifactId>
    <version>Latest</version>
</dependency>

FAQ

1. Aspose.Page 中的 XPS Print Ticket 是什么?

XPS Print Ticket 是由 Print Schema 规范定义的 XML 结构。它将硬件打印指令(例如方向、双面打印、份数、纸张尺寸和输出纸盒)直接嵌入 .xps ZIP 软件包文件中。

2. 我可以动态修改 Print Ticket 中的单个 XML 参数吗?

可以。您可以通过 XpsPrintTicket.getXml() 获取原始 XML 内容,使用标准 Java XML 解析器操作 DOM 节点或属性,然后将修改后的 Print Ticket 重新分配给文档或页面。

3. 如果同时存在 Job 级别和 Page 级别的 Print Ticket,会发生什么情况?

对于特定页面,Page 级别的 Print Ticket 优先于 Job 级别的 Print Ticket,从而允许开发人员创建混合介质打印作业(例如,将卡纸封面页与标准普通文本页混合打印)。