summaryrefslogtreecommitdiff
path: root/apps/mupdfextract.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/mupdfextract.c')
-rw-r--r--apps/mupdfextract.c89
1 files changed, 37 insertions, 52 deletions
diff --git a/apps/mupdfextract.c b/apps/mupdfextract.c
index f309f39a..a6a677cd 100644
--- a/apps/mupdfextract.c
+++ b/apps/mupdfextract.c
@@ -2,7 +2,6 @@
* pdfextract -- the ultimate way to extract images and fonts from pdfs
*/
-#include "fitz.h"
#include "mupdf.h"
static pdf_document *doc = NULL;
@@ -17,96 +16,81 @@ static void usage(void)
exit(1);
}
-static int isimage(fz_obj *obj)
+static int isimage(pdf_obj *obj)
{
- fz_obj *type = fz_dict_gets(obj, "Subtype");
- return fz_is_name(type) && !strcmp(fz_to_name(type), "Image");
+ pdf_obj *type = pdf_dict_gets(obj, "Subtype");
+ return pdf_is_name(type) && !strcmp(pdf_to_name(type), "Image");
}
-static int isfontdesc(fz_obj *obj)
+static int isfontdesc(pdf_obj *obj)
{
- fz_obj *type = fz_dict_gets(obj, "Type");
- return fz_is_name(type) && !strcmp(fz_to_name(type), "FontDescriptor");
+ pdf_obj *type = pdf_dict_gets(obj, "Type");
+ return pdf_is_name(type) && !strcmp(pdf_to_name(type), "FontDescriptor");
}
static void saveimage(int num)
{
+ fz_image *image;
fz_pixmap *img;
- fz_obj *ref;
- char name[1024];
+ pdf_obj *ref;
+ char name[32];
- ref = fz_new_indirect(ctx, num, 0, doc);
+ ref = pdf_new_indirect(ctx, num, 0, doc);
/* TODO: detect DCTD and save as jpeg */
- img = pdf_load_image(doc, ref);
+ image = pdf_load_image(doc, ref);
+ img = fz_image_to_pixmap(ctx, image, 0, 0);
+ fz_drop_image(ctx, image);
- if (dorgb && img->colorspace && img->colorspace != fz_device_rgb)
- {
- fz_pixmap *temp;
- temp = fz_new_pixmap_with_rect(ctx, fz_device_rgb, fz_bound_pixmap(img));
- fz_convert_pixmap(ctx, img, temp);
- fz_drop_pixmap(ctx, img);
- img = temp;
- }
-
- if (img->n <= 4)
- {
- sprintf(name, "img-%04d.png", num);
- printf("extracting image %s\n", name);
- fz_write_png(ctx, img, name, 0);
- }
- else
- {
- sprintf(name, "img-%04d.pam", num);
- printf("extracting image %s\n", name);
- fz_write_pam(ctx, img, name, 0);
- }
+ sprintf(name, "img-%04d", num);
+ fz_write_pixmap(ctx, img, name, dorgb);
fz_drop_pixmap(ctx, img);
- fz_drop_obj(ref);
+ pdf_drop_obj(ref);
}
-static void savefont(fz_obj *dict, int num)
+static void savefont(pdf_obj *dict, int num)
{
char name[1024];
char *subtype;
fz_buffer *buf;
- fz_obj *stream = NULL;
- fz_obj *obj;
+ pdf_obj *stream = NULL;
+ pdf_obj *obj;
char *ext = "";
FILE *f;
char *fontname = "font";
- int n;
+ int n, len;
+ unsigned char *data;
- obj = fz_dict_gets(dict, "FontName");
+ obj = pdf_dict_gets(dict, "FontName");
if (obj)
- fontname = fz_to_name(obj);
+ fontname = pdf_to_name(obj);
- obj = fz_dict_gets(dict, "FontFile");
+ obj = pdf_dict_gets(dict, "FontFile");
if (obj)
{
stream = obj;
ext = "pfa";
}
- obj = fz_dict_gets(dict, "FontFile2");
+ obj = pdf_dict_gets(dict, "FontFile2");
if (obj)
{
stream = obj;
ext = "ttf";
}
- obj = fz_dict_gets(dict, "FontFile3");
+ obj = pdf_dict_gets(dict, "FontFile3");
if (obj)
{
stream = obj;
- obj = fz_dict_gets(obj, "Subtype");
- if (obj && !fz_is_name(obj))
+ obj = pdf_dict_gets(obj, "Subtype");
+ if (obj && !pdf_is_name(obj))
fz_throw(ctx, "Invalid font descriptor subtype");
- subtype = fz_to_name(obj);
+ subtype = pdf_to_name(obj);
if (!strcmp(subtype, "Type1C"))
ext = "cff";
else if (!strcmp(subtype, "CIDFontType0C"))
@@ -121,7 +105,7 @@ static void savefont(fz_obj *dict, int num)
return;
}
- buf = pdf_load_stream(doc, fz_to_num(stream), fz_to_gen(stream));
+ buf = pdf_load_stream(doc, pdf_to_num(stream), pdf_to_gen(stream));
sprintf(name, "%s-%04d.%s", fontname, num, ext);
printf("extracting font %s\n", name);
@@ -130,8 +114,9 @@ static void savefont(fz_obj *dict, int num)
if (!f)
fz_throw(ctx, "Error creating font file");
- n = fwrite(buf->data, 1, buf->len, f);
- if (n < buf->len)
+ len = fz_buffer_storage(ctx, buf, &data);
+ n = fwrite(data, 1, len, f);
+ if (n < len)
fz_throw(ctx, "Error writing font file");
if (fclose(f) < 0)
@@ -142,7 +127,7 @@ static void savefont(fz_obj *dict, int num)
static void showobject(int num)
{
- fz_obj *obj;
+ pdf_obj *obj;
if (!doc)
fz_throw(ctx, "no file specified");
@@ -154,7 +139,7 @@ static void showobject(int num)
else if (isfontdesc(obj))
savefont(obj, num);
- fz_drop_obj(obj);
+ pdf_drop_obj(obj);
}
#ifdef MUPDF_COMBINED_EXE
@@ -192,11 +177,11 @@ int main(int argc, char **argv)
doc = pdf_open_document(ctx, infile);
if (pdf_needs_password(doc))
if (!pdf_authenticate_password(doc, password))
- fz_throw(ctx, "cannot authenticate password: %s\n", infile);
+ fz_throw(ctx, "cannot authenticate password: %s", infile);
if (fz_optind == argc)
{
- for (o = 0; o < doc->len; o++)
+ for (o = 0; o < pdf_count_objects(doc); o++)
showobject(o);
}
else