1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
if not modules then modules = { } end modules ['mtx-pdf'] = {
version = 1.001,
comment = "companion to mtxrun.lua",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
local helpinfo = [[
--info show some info about the given file
--metadata show metadata xml blob
]]
local application = logs.application {
name = "mtx-pdf",
banner = "ConTeXt PDF Helpers 0.01",
helpinfo = helpinfo,
}
local report = application.report
dofile(resolvers.findfile("lpdf-epd.lua","tex"))
scripts = scripts or { }
scripts.pdf = scripts.pdf or { }
local function loadpdffile(filename)
if not filename or filename == "" then
report("no filename given")
elseif not lfs.isfile(filename) then
report("unknown file '%s'",filename)
else
local pdffile = lpdf.epdf.load(filename)
if pdffile then
return pdffile
else
report("no valid pdf file '%s'",filename)
end
end
end
function scripts.pdf.info()
local filename = environment.files[1]
local pdffile = loadpdffile(filename)
if pdffile then
local catalog = pdffile.Catalog
local info = pdffile.Info
local pages = pdffile.pages
local nofpages = pages.n -- no # yet. will be in 5.2
report("filename > %s",filename)
report("pdf version > %s",catalog.Version)
report("number of pages > %s",nofpages)
report("title > %s",info.Title)
report("creator > %s",info.Creator)
report("producer > %s",info.Producer)
report("creation date > %s",info.CreationDate)
report("modification date > %s",info.ModDate)
local width, height, start
for i=1, nofpages do
local page = pages[i]
local bbox = page.CropBox or page.MediaBox
local w, h = bbox[4]-bbox[2],bbox[3]-bbox[1]
if w ~= width or h ~= height then
if start then
report("cropbox > pages: %s-%s, width: %s, height: %s",start,i-1,width,height)
end
width, height, start = w, h, i
end
end
report("cropbox > pages: %s-%s, width: %s, height: %s",start,nofpages,width,height)
end
end
function scripts.pdf.metadata()
local filename = environment.files[1]
local pdffile = loadpdffile(filename)
if pdffile then
local catalog = pdffile.Catalog
local metadata = catalog.Metadata
if metadata then
report("metadata > \n\n%s\n",metadata())
else
report("no metadata")
end
end
end
if environment.argument("info") then
scripts.pdf.info()
elseif environment.argument("metadata") then
scripts.pdf.metadata()
else
application.help()
end
-- a variant on an experiment by hartmut
--~ function downloadlinks(filename)
--~ local document = lpdf.epdf.load(filename)
--~ if document then
--~ local pages = document.pages
--~ for p = 1,#pages do
--~ local annotations = pages[p].Annots
--~ if annotations then
--~ for a=1,#annotations do
--~ local annotation = annotations[a]
--~ local uri = annotation.Subtype == "Link" and annotation.A and annotation.A.URI
--~ if uri and string.find(uri,"^http") then
--~ os.execute("wget " .. uri)
--~ end
--~ end
--~ end
--~ end
--~ end
--~ end
|