summaryrefslogtreecommitdiff
path: root/tex/context/base/lpdf-xmp.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/lpdf-xmp.lua')
-rw-r--r--tex/context/base/lpdf-xmp.lua84
1 files changed, 52 insertions, 32 deletions
diff --git a/tex/context/base/lpdf-xmp.lua b/tex/context/base/lpdf-xmp.lua
index 1fd7b275c..78638efbb 100644
--- a/tex/context/base/lpdf-xmp.lua
+++ b/tex/context/base/lpdf-xmp.lua
@@ -7,7 +7,7 @@ if not modules then modules = { } end modules ['lpdf-xmp'] = {
comment = "with help from Peter Rolf",
}
-local format, random, char, gsub = string.format, math.random, string.char, string.gsub
+local format, random, char, gsub, concat = string.format, math.random, string.char, string.gsub, table.concat
local xmlfillin = xml.fillin
local trace_xmp = false trackers.register("backend.xmp", function(v) trace_xmp = v end)
@@ -22,6 +22,7 @@ local xmpmetadata = [[
<rdf:li/>
</rdf:Seq>
</dc:creator>
+ <dc:description/>
<dc:title>
<rdf:Alt>
<rdf:li xml:lang="x-default"/>
@@ -65,42 +66,80 @@ local xpacket = [[
<?xpacket end="w"?>]]
local mapping = {
- ["Creator"] = "rdf:Description/xmp:CreatorTool",
- ["Author"] = "rdf:Description/dc:creator/rdf:Seq/rdf:li",
- ["Title"] = "rdf:Description/dc:title/rdf:Alt/rdf:li",
+ -- user defined keys (pdfx:)
["ConTeXt.Jobname"] = "rdf:Description/pdfx:ConTeXt.Jobname",
["ConTeXt.Time"] = "rdf:Description/pdfx:ConTeXt.Time",
["ConTeXt.Url"] = "rdf:Description/pdfx:ConTeXt.Url",
["ConTeXt.Version"] = "rdf:Description/pdfx:ConTeXt.Version",
["ID"] = "rdf:Description/pdfx:ID",
["PTEX.Fullbanner"] = "rdf:Description/pdfx:PTEX.Fullbanner",
- ["CreateDate"] = "rdf:Description/xmp:CreateDate",
- ["ModifyDate"] = "rdf:Description/xmp:ModifyDate",
- ["MetadataDate"] = "rdf:Description/xmp:MetadataDate",
+ -- Adobe PDF schema
["Keywords"] = "rdf:Description/pdf:Keywords",
["Producer"] = "rdf:Description/pdf:Producer",
--- ["Trapped"] = "rdf:Description/pdf:Trapped", -- '/Trapped' in /Info, 'Trapped' in XMP
+ -- ["Trapped"] = "rdf:Description/pdf:Trapped", -- '/False' in /Info, but 'False' in XMP
+ -- Dublin Core schema
+ ["Author"] = "rdf:Description/dc:creator/rdf:Seq/rdf:li",
+ ["Format"] = "rdf:Description/dc:format", -- optional, but nice to have
+ ["Subject"] = "rdf:Description/dc:description",
+ ["Title"] = "rdf:Description/dc:title/rdf:Alt/rdf:li",
+ -- XMP Basic schema
+ ["CreateDate"] = "rdf:Description/xmp:CreateDate",
+ ["Creator"] = "rdf:Description/xmp:CreatorTool",
+ ["MetadataDate"] = "rdf:Description/xmp:MetadataDate",
+ ["ModifyDate"] = "rdf:Description/xmp:ModifyDate",
+ -- XMP Media Management schema
["DocumentID"] = "rdf:Description/xmpMM:DocumentID",
["InstanceID"] = "rdf:Description/xmpMM:InstanceID",
+ ["RenditionClass"] = "rdf:Description/xmpMM:RenditionClass", -- PDF/X-4
+ ["VersionID"] = "rdf:Description/xmpMM:VersionID", -- PDF/X-4
+ -- additional entries
+ -- PDF/X
+ ["GTS_PDFXVersion"] = "rdf:Description/pdfxid:GTS_PDFXVersion",
+ -- optional entries
+ -- all what is visible in the 'document properties --> additional metadata' window
+ -- XMP Rights Management schema (optional)
+ ["Marked"] = "rdf:Description/xmpRights:Marked",
+ -- ["Owner"] = "rdf:Description/xmpRights:Owner/rdf:Bag/rdf:li", -- maybe useful (not visible)
+ -- ["UsageTerms"] = "rdf:Description/xmpRights:UsageTerms", -- maybe useful (not visible)
+ ["WebStatement"] = "rdf:Description/xmpRights:WebStatement",
+ -- Photoshop PDF schema (optional)
+ ["AuthorsPosition"] = "rdf:Description/photoshop:AuthorsPosition",
+ ["Copyright"] = "rdf:Description/photoshop:Copyright",
+ ["CaptionWriter"] = "rdf:Description/photoshop:CaptionWriter",
}
-local xmp = xml.convert(xmpmetadata)
+-- maybe some day we will load the xmp file at runtime
-local addtoinfo = lpdf.addtoinfo
+local xmp = xml.convert(xmpmetadata)
-local function addxmpinfo(tag,value,check)
+function lpdf.addxmpinfo(tag,value,check)
local pattern = mapping[tag]
if pattern then
xmlfillin(xmp,pattern,value,check)
end
end
+-- redefined
+
+local addtoinfo = lpdf.addtoinfo
+local addxmpinfo = lpdf.addxmpinfo
+
function lpdf.addtoinfo(tag,pdfvalue,strvalue)
addtoinfo(tag,pdfvalue)
addxmpinfo(tag,strvalue or gsub(tostring(pdfvalue),"^%((.*)%)$","%1")) -- hack
end
-lpdf.addxmpinfo = addxmpinfo
+-- for the do-it-yourselvers
+
+function lpdf.insertxmpinfo(pattern,whatever,prepend)
+ xml.insert(xmp,pattern,whatever,prepend)
+end
+
+function lpdf.injectxmpinfo(pattern,whatever,prepend)
+ xml.inject(xmp,pattern,whatever,prepend)
+end
+
+-- flushing
local t = { } for i=1,24 do t[i] = random() end
@@ -109,7 +148,7 @@ local function flushxmpinfo()
commands.freezerandomseed(os.clock()) -- hack
local t = { } for i=1,24 do t[i] = char(96 + random(26)) end
- local packetid = table.concat(t)
+ local packetid = concat(t)
local time = lpdf.timestamp()
addxmpinfo("Producer",format("LuaTeX-%0.2f.%s",tex.luatexversion/100,tex.luatexrevision))
addxmpinfo("DocumentID",format("uuid:%s",os.uuid()))
@@ -145,22 +184,3 @@ end
-- his will be enabled when we can inhibit compression for a stream at the lua end
lpdf.registerdocumentfinalizer(flushxmpinfo,1)
-
---~ lpdf.addxmpinfo("creator", "PRAGMA ADE: Hans Hagen and/or Ton Otten")
---~ lpdf.addxmpinfo("title", "oeps")
---~ lpdf.addxmpinfo("ConTeXt.Jobname", "oeps")
---~ lpdf.addxmpinfo("ConTeXt.Time", "2009.10.30 17:53")
---~ lpdf.addxmpinfo("ConTeXt.Url", "www.pragma-ade.com")
---~ lpdf.addxmpinfo("ConTeXt.Version", "2009.10.30 16:59")
---~ lpdf.addxmpinfo("ID", "oeps.20091030.1753")
---~ lpdf.addxmpinfo("PTEX.Fullbanner", "This is LuaTeX, Version beta-0.44.0-2009103014 (Web2C 2009) kpathsea version 5.0.0")
---~ lpdf.addxmpinfo("CreateDate", "2009-10-30T17:53:39+01:00")
---~ lpdf.addxmpinfo("CreatorTool", "ConTeXt - 2009.10.30 16:59")
---~ lpdf.addxmpinfo("ModifyDate", "2009-10-30T19:38:18+01:00")
---~ lpdf.addxmpinfo("MetadataDate", "2009-10-30T19:38:18+01:00")
---~ lpdf.addxmpinfo("Producer", "LuaTeX-0.44.0")
---~ lpdf.addxmpinfo("Trapped", "False")
---~ lpdf.addxmpinfo("DocumentID", "uuid:d9f1383c-e069-4619-bee0-c978d9495d7d")
---~ lpdf.addxmpinfo("InstanceID", "uuid:67eda265-8146-4cce-a1a2-1ec91819ad73")
-
---~ print(lpdf.flushxmpinfo())