Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
7639 views
1
/*
2
* mutool -- swiss army knife of pdf manipulation tools
3
*/
4
5
#include "mupdf/fitz.h"
6
7
#ifdef _MSC_VER
8
#define main main_utf8
9
#endif
10
11
int pdfclean_main(int argc, char *argv[]);
12
int pdfextract_main(int argc, char *argv[]);
13
int pdfinfo_main(int argc, char *argv[]);
14
int pdfposter_main(int argc, char *argv[]);
15
int pdfshow_main(int argc, char *argv[]);
16
int pdfpages_main(int argc, char *argv[]);
17
18
static struct {
19
int (*func)(int argc, char *argv[]);
20
char *name;
21
char *desc;
22
} tools[] = {
23
{ pdfclean_main, "clean", "rewrite pdf file" },
24
{ pdfextract_main, "extract", "extract font and image resources" },
25
{ pdfinfo_main, "info", "show information about pdf resources" },
26
{ pdfpages_main, "pages", "show information about pdf pages" },
27
{ pdfposter_main, "poster", "split large page into many tiles" },
28
{ pdfshow_main, "show", "show internal pdf objects" },
29
};
30
31
static int
32
namematch(const char *end, const char *start, const char *match)
33
{
34
int len = strlen(match);
35
return ((end-len >= start) && (strncmp(end-len, match, len) == 0));
36
}
37
38
int main(int argc, char **argv)
39
{
40
char *start, *end;
41
char buf[32];
42
int i;
43
44
if (argc == 0)
45
{
46
fprintf(stderr, "No command name found!\n");
47
return 1;
48
}
49
50
/* Check argv[0] */
51
52
if (argc > 0)
53
{
54
end = start = argv[0];
55
while (*end)
56
end++;
57
if ((end-4 >= start) && (end[-4] == '.') && (end[-3] == 'e') && (end[-2] == 'x') && (end[-1] == 'e'))
58
end = end-4;
59
for (i = 0; i < nelem(tools); i++)
60
{
61
strcpy(buf, "mupdf");
62
strcat(buf, tools[i].name);
63
if (namematch(end, start, buf) || namematch(end, start, buf+2))
64
return tools[i].func(argc, argv);
65
}
66
}
67
68
/* Check argv[1] */
69
70
if (argc > 1)
71
{
72
for (i = 0; i < nelem(tools); i++)
73
if (!strcmp(tools[i].name, argv[1]))
74
return tools[i].func(argc - 1, argv + 1);
75
if (!strcmp(argv[1], "-v"))
76
{
77
fprintf(stderr, "mutool version %s\n", FZ_VERSION);
78
return 0;
79
}
80
}
81
82
/* Print usage */
83
84
fprintf(stderr, "usage: mutool <command> [options]\n");
85
86
for (i = 0; i < nelem(tools); i++)
87
fprintf(stderr, "\t%s\t-- %s\n", tools[i].name, tools[i].desc);
88
89
return 1;
90
}
91
92
#ifdef _MSC_VER
93
int wmain(int argc, wchar_t *wargv[])
94
{
95
char **argv = fz_argv_from_wargv(argc, wargv);
96
int ret = main(argc, argv);
97
fz_free_argv(argc, argv);
98
return ret;
99
}
100
#endif
101
102