簡體   English   中英

iText:使用Xmp的元數據中的自定義Xml標簽

[英]iText: Custom Xml Tags in metadata using Xmp

我想在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沒有無參數構造函數?

我很困惑 為什么需要XmpArray

您如何將自定義XML添加到XmpWriter?

有兩種選擇。

  1. 您創建自己的XmpSchema實現,並使用addRdfDescription(XmpSchema s)方法。 在這種情況下,將使用XmpArrayLangAlt類的對象向XmpSchema對象添加特定類型的內容。 看來您想避免這種情況,所以您可能想要:
  2. 您創建包含自己的XML的自己的String,並使用addRdfDescription(String xmlns,String content)方法。

讓我引用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>標記。 您需要一個自定義模式,而不是像都柏林核心之類的標准模式。

如果您想避免使用此<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規范

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM