summaryrefslogtreecommitdiff
path: root/apps/pdfextract.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/pdfextract.c')
-rw-r--r--apps/pdfextract.c424
1 files changed, 212 insertions, 212 deletions
diff --git a/apps/pdfextract.c b/apps/pdfextract.c
index 35833c0e..dfd20035 100644
--- a/apps/pdfextract.c
+++ b/apps/pdfextract.c
@@ -6,252 +6,252 @@
static void showusage(void)
{
- fprintf(stderr, "usage: pdfextract [-d password] <file> [object numbers]\n");
- fprintf(stderr, " -d \tdecrypt password\n");
- exit(1);
+ fprintf(stderr, "usage: pdfextract [-d password] <file> [object numbers]\n");
+ fprintf(stderr, " -d \tdecrypt password\n");
+ exit(1);
}
static int isimage(fz_obj *obj)
{
- fz_obj *type = fz_dictgets(obj, "Subtype");
- return fz_isname(type) && !strcmp(fz_toname(type), "Image");
+ fz_obj *type = fz_dictgets(obj, "Subtype");
+ return fz_isname(type) && !strcmp(fz_toname(type), "Image");
}
static int isfontdesc(fz_obj *obj)
{
- fz_obj *type = fz_dictgets(obj, "Type");
- return fz_isname(type) && !strcmp(fz_toname(type), "FontDescriptor");
+ fz_obj *type = fz_dictgets(obj, "Type");
+ return fz_isname(type) && !strcmp(fz_toname(type), "FontDescriptor");
}
static void saveimage(fz_obj *obj, int num, int gen)
{
- pdf_image *img = nil;
- fz_obj *ref;
- fz_error error;
- fz_pixmap *pix;
- char name[1024];
- FILE *f;
- int bpc;
- int w;
- int h;
- int n;
- int x;
- int y;
-
- ref = fz_newindirect(num, gen, xref);
-
- xref->store = pdf_newstore();
-
- error = pdf_loadimage(&img, xref, ref);
- if (error)
- die(error);
-
- n = img->super.n;
- w = img->super.w;
- h = img->super.h;
- bpc = img->bpc;
-
- error = fz_newpixmap(&pix, 0, 0, w, h, n + 1);
- if (error)
- die(error);
-
- error = img->super.loadtile(&img->super, pix);
- if (error)
- die(error);
-
- if (bpc == 1 && n == 0)
- {
- fz_pixmap *temp;
-
- error = fz_newpixmap(&temp, pix->x, pix->y, pix->w, pix->h, pdf_devicergb->n + 1);
- if (error)
- die(error);
-
- for (y = 0; y < pix->h; y++)
- for (x = 0; x < pix->w; x++)
- {
- int pixel = y * pix->w + x;
- temp->samples[pixel * temp->n + 0] = 255;
- temp->samples[pixel * temp->n + 1] = pix->samples[pixel];
- temp->samples[pixel * temp->n + 2] = pix->samples[pixel];
- temp->samples[pixel * temp->n + 3] = pix->samples[pixel];
- }
-
- fz_droppixmap(pix);
- pix = temp;
- }
-
- if (img->super.cs && strcmp(img->super.cs->name, "DeviceRGB"))
- {
- fz_pixmap *temp;
-
- error = fz_newpixmap(&temp, pix->x, pix->y, pix->w, pix->h, pdf_devicergb->n + 1);
- if (error)
- die(error);
-
- fz_convertpixmap(img->super.cs, pix, pdf_devicergb, temp);
- fz_droppixmap(pix);
- pix = temp;
- }
-
- sprintf(name, "img-%04d.pnm", num);
-
- f = fopen(name, "wb");
- if (f == NULL)
- die(fz_throw("Error creating image file"));
-
- fprintf(f, "P6\n%d %d\n%d\n", w, h, 255);
-
- for (y = 0; y < pix->h; y++)
- for (x = 0; x < pix->w; x++)
- {
- fz_sample *sample = &pix->samples[(y * pix->w + x) * (pdf_devicergb->n + 1)];
- unsigned char r = sample[1];
- unsigned char g = sample[2];
- unsigned char b = sample[3];
- fprintf(f, "%c%c%c", r, g, b);
- }
-
- if (fclose(f) < 0)
- die(fz_throw("Error closing image file"));
-
- fz_droppixmap(pix);
-
- pdf_dropstore(xref->store);
- xref->store = nil;
-
- fz_dropimage(&img->super);
-
- fz_dropobj(ref);
+ pdf_image *img = nil;
+ fz_obj *ref;
+ fz_error error;
+ fz_pixmap *pix;
+ char name[1024];
+ FILE *f;
+ int bpc;
+ int w;
+ int h;
+ int n;
+ int x;
+ int y;
+
+ ref = fz_newindirect(num, gen, xref);
+
+ xref->store = pdf_newstore();
+
+ error = pdf_loadimage(&img, xref, ref);
+ if (error)
+ die(error);
+
+ n = img->super.n;
+ w = img->super.w;
+ h = img->super.h;
+ bpc = img->bpc;
+
+ error = fz_newpixmap(&pix, 0, 0, w, h, n + 1);
+ if (error)
+ die(error);
+
+ error = img->super.loadtile(&img->super, pix);
+ if (error)
+ die(error);
+
+ if (bpc == 1 && n == 0)
+ {
+ fz_pixmap *temp;
+
+ error = fz_newpixmap(&temp, pix->x, pix->y, pix->w, pix->h, pdf_devicergb->n + 1);
+ if (error)
+ die(error);
+
+ for (y = 0; y < pix->h; y++)
+ for (x = 0; x < pix->w; x++)
+ {
+ int pixel = y * pix->w + x;
+ temp->samples[pixel * temp->n + 0] = 255;
+ temp->samples[pixel * temp->n + 1] = pix->samples[pixel];
+ temp->samples[pixel * temp->n + 2] = pix->samples[pixel];
+ temp->samples[pixel * temp->n + 3] = pix->samples[pixel];
+ }
+
+ fz_droppixmap(pix);
+ pix = temp;
+ }
+
+ if (img->super.cs && strcmp(img->super.cs->name, "DeviceRGB"))
+ {
+ fz_pixmap *temp;
+
+ error = fz_newpixmap(&temp, pix->x, pix->y, pix->w, pix->h, pdf_devicergb->n + 1);
+ if (error)
+ die(error);
+
+ fz_convertpixmap(img->super.cs, pix, pdf_devicergb, temp);
+ fz_droppixmap(pix);
+ pix = temp;
+ }
+
+ sprintf(name, "img-%04d.pnm", num);
+
+ f = fopen(name, "wb");
+ if (f == NULL)
+ die(fz_throw("Error creating image file"));
+
+ fprintf(f, "P6\n%d %d\n%d\n", w, h, 255);
+
+ for (y = 0; y < pix->h; y++)
+ for (x = 0; x < pix->w; x++)
+ {
+ fz_sample *sample = &pix->samples[(y * pix->w + x) * (pdf_devicergb->n + 1)];
+ unsigned char r = sample[1];
+ unsigned char g = sample[2];
+ unsigned char b = sample[3];
+ fprintf(f, "%c%c%c", r, g, b);
+ }
+
+ if (fclose(f) < 0)
+ die(fz_throw("Error closing image file"));
+
+ fz_droppixmap(pix);
+
+ pdf_dropstore(xref->store);
+ xref->store = nil;
+
+ fz_dropimage(&img->super);
+
+ fz_dropobj(ref);
}
static void savefont(fz_obj *dict, int num, int gen)
{
- fz_error error;
- char name[1024];
- char *subtype;
- fz_buffer *buf;
- fz_obj *stream = nil;
- fz_obj *obj;
- char *ext = "";
- FILE *f;
- unsigned char *p;
- char *fontname = "font";
-
- obj = fz_dictgets(dict, "FontName");
- if (obj)
- fontname = fz_toname(obj);
-
- obj = fz_dictgets(dict, "FontFile");
- if (obj)
- {
- stream = obj;
- ext = "pfa";
- }
-
- obj = fz_dictgets(dict, "FontFile2");
- if (obj)
- {
- stream = obj;
- ext = "ttf";
- }
-
- obj = fz_dictgets(dict, "FontFile3");
- if (obj)
- {
- stream = obj;
-
- obj = fz_dictgets(obj, "Subtype");
- if (obj && !fz_isname(obj))
- die(fz_throw("Invalid font descriptor subtype"));
-
- subtype = fz_toname(obj);
- if (!strcmp(subtype, "Type1C"))
- ext = "cff";
- else if (!strcmp(subtype, "CIDFontType0C"))
- ext = "cid";
- else
- die(fz_throw("Unhandled font type '%s'", subtype));
- }
-
- if (!stream)
- {
- fz_warn("Unhandled font type");
- return;
- }
-
- buf = fz_newbuffer(0);
-
- error = pdf_loadstream(&buf, xref, fz_tonum(stream), fz_togen(stream));
- if (error)
- die(error);
-
- sprintf(name, "%s-%04d.%s", fontname, num, ext);
-
- f = fopen(name, "wb");
- if (f == NULL)
- die(fz_throw("Error creating image file"));
-
- for (p = buf->rp; p < buf->wp; p ++)
- fprintf(f, "%c", *p);
-
- if (fclose(f) < 0)
- die(fz_throw("Error closing image file"));
-
- fz_dropbuffer(buf);
+ fz_error error;
+ char name[1024];
+ char *subtype;
+ fz_buffer *buf;
+ fz_obj *stream = nil;
+ fz_obj *obj;
+ char *ext = "";
+ FILE *f;
+ unsigned char *p;
+ char *fontname = "font";
+
+ obj = fz_dictgets(dict, "FontName");
+ if (obj)
+ fontname = fz_toname(obj);
+
+ obj = fz_dictgets(dict, "FontFile");
+ if (obj)
+ {
+ stream = obj;
+ ext = "pfa";
+ }
+
+ obj = fz_dictgets(dict, "FontFile2");
+ if (obj)
+ {
+ stream = obj;
+ ext = "ttf";
+ }
+
+ obj = fz_dictgets(dict, "FontFile3");
+ if (obj)
+ {
+ stream = obj;
+
+ obj = fz_dictgets(obj, "Subtype");
+ if (obj && !fz_isname(obj))
+ die(fz_throw("Invalid font descriptor subtype"));
+
+ subtype = fz_toname(obj);
+ if (!strcmp(subtype, "Type1C"))
+ ext = "cff";
+ else if (!strcmp(subtype, "CIDFontType0C"))
+ ext = "cid";
+ else
+ die(fz_throw("Unhandled font type '%s'", subtype));
+ }
+
+ if (!stream)
+ {
+ fz_warn("Unhandled font type");
+ return;
+ }
+
+ buf = fz_newbuffer(0);
+
+ error = pdf_loadstream(&buf, xref, fz_tonum(stream), fz_togen(stream));
+ if (error)
+ die(error);
+
+ sprintf(name, "%s-%04d.%s", fontname, num, ext);
+
+ f = fopen(name, "wb");
+ if (f == NULL)
+ die(fz_throw("Error creating image file"));
+
+ for (p = buf->rp; p < buf->wp; p ++)
+ fprintf(f, "%c", *p);
+
+ if (fclose(f) < 0)
+ die(fz_throw("Error closing image file"));
+
+ fz_dropbuffer(buf);
}
static void showobject(int num, int gen)
{
- fz_error error;
- fz_obj *obj;
+ fz_error error;
+ fz_obj *obj;
- if (!xref)
- die(fz_throw("no file specified"));
+ if (!xref)
+ die(fz_throw("no file specified"));
- error = pdf_loadobject(&obj, xref, num, gen);
- if (error)
- die(error);
+ error = pdf_loadobject(&obj, xref, num, gen);
+ if (error)
+ die(error);
- if (isimage(obj))
- saveimage(obj, num, gen);
- else if (isfontdesc(obj))
- savefont(obj, num, gen);
+ if (isimage(obj))
+ saveimage(obj, num, gen);
+ else if (isfontdesc(obj))
+ savefont(obj, num, gen);
- fz_dropobj(obj);
+ fz_dropobj(obj);
}
int main(int argc, char **argv)
{
- char *password = "";
- int c, o;
+ char *password = "";
+ int c, o;
- while ((c = fz_getopt(argc, argv, "d:")) != -1)
- {
- switch (c)
+ while ((c = fz_getopt(argc, argv, "d:")) != -1)
{
- case 'd': password = fz_optarg; break;
- default:
- showusage();
- break;
+ switch (c)
+ {
+ case 'd': password = fz_optarg; break;
+ default:
+ showusage();
+ break;
+ }
}
- }
- if (fz_optind == argc)
- showusage();
+ if (fz_optind == argc)
+ showusage();
- openxref(argv[fz_optind++], password, 0);
+ openxref(argv[fz_optind++], password, 0);
- if (fz_optind == argc)
- for (o = 0; o < xref->len; o++)
- showobject(o, 0);
- else
- while (fz_optind < argc)
- {
- showobject(atoi(argv[fz_optind]), 0);
- fz_optind++;
- }
+ if (fz_optind == argc)
+ for (o = 0; o < xref->len; o++)
+ showobject(o, 0);
+ else
+ while (fz_optind < argc)
+ {
+ showobject(atoi(argv[fz_optind]), 0);
+ fz_optind++;
+ }
- closexref();
+ closexref();
}