我想在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没有无参数构造函数?
答案 0 :(得分:0)
我很困惑。你为什么需要XmpArray
?
如何将自定义XML
添加到XmpWriter?
有两种选择。
XmpSchema
实施,并使用addRdfDescription(XmpSchema s)
方法。在这种情况下,您将使用XmpArray
和LangAlt
等对象向XmpSchema
对象添加特定类型的内容。看来你想避免这种情况,所以你可能想要:让我引用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。