iText:使用Xmp在元数据中自定义Xml标签

时间:2013-04-26 10:59:54

标签: java itext

我想在PDF中的元数据中添加自定义标记而不是默认标记。 而不是

 -<rdf:Description rdf:about="" xmlns:ls="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
-<TagId-20>
    -<rdf:Seq>
        <rdf:li>arr0</rdf:li>
        <rdf:li>arr1</rdf:li>
    </rdf:Seq>
</TagId-20>
 </rdf:Description>

我希望元数据像这样

-<TagId-20>
    -<customTag>
        <ls:userId>USERNAME</ ls:userId >
        <ls:WONum>12-110992</ WONum >
    </customTag >
</TagId-20>

我找到了......要有自定义xml标签,我需要扩展XmpArray并实现toString()方法。

我实施了以下内容..

public class CustomXmpArray extends XmpArray {

private static final long serialVersionUID = -4551741336974797330L;

public CustomXmpArray() {
    super("dummy");
}

@Override
public String toString() {
    StringBuffer buf = new StringBuffer("");
    String s;
    for (String string : this) {
        s = string;
        buf.append(s);
    }
    return buf.toString();
}
}

我在这里面临的一个问题是,我不需要“type”变量,但是XmpArray没有无参数构造函数,所以我不得不将虚拟值传递给超类XmpArray。我的实施错了吗?

为什么XmpArray没有无参数构造函数?

1 个答案:

答案 0 :(得分:0)

我很困惑。你为什么需要XmpArray

如何将自定义XML添加到XmpWriter?

有两种选择。

  1. 您可以创建自己的XmpSchema实施,并使用addRdfDescription(XmpSchema s)方法。在这种情况下,您将使用XmpArrayLangAlt等对象向XmpSchema对象添加特定类型的内容。看来你想避免这种情况,所以你可能想要:
  2. 您可以创建自己的包含自己的XML的String,并使用addRdfDescription(String xmlns,String content)方法。
  3. 让我引用XMP规范:

    rdf:RDF元素可以包含零个或多个rdf:Description元素。以下示例显示了单个rdf:Description元素:

    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
        <rdf:Description rdf:about=""
            xmlns:dc="http://purl.org/dc/elements/1.1/">
            ... Dublin Core properties go here
        </rdf:Description>
    </rdf:RDF>
    

    我认为你已经有了<rdf:RDF>标签。您还有一个<rdf:Description>标记。您需要一个自定义架构,而不是诸如Dublin核心之类的标准架构。

    如果您想避免使用此<rdf:Description>标记,那么您要求我们向您展示如何执行违反规范的操作。我们不打算这样做。

    如果您想在此<rdf:Description>标记中包含一些自定义XML,那么就可以执行以下操作:

    xmpWriter.addRdfDescription("", "<TagId-20><customTag><ls:userId>USERNAME</ ls:userId ><ls:WONum>12-110992</ WONum ></customTag ></TagId-20>");
    

    结果将是:

    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
        <rdf:Description rdf:about="" >
            <TagId-20>
                <customTag>
                    <ls:userId>USERNAME</ ls:userId >
                    <ls:WONum>12-110992</ WONum >
                </customTag >
            </TagId-20>
        </rdf:Description>
    </rdf:RDF>
    

    这不是你想要的吗?如果没有,你必须澄清。

    另外:如果你也定义一个命名空间,而不是为xmlns参数传递一个空字符串,那会更好。

    顺便说一下:您可能想阅读XMP specification