summaryrefslogtreecommitdiff
path: root/apps/pdfrip.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/pdfrip.c')
-rw-r--r--apps/pdfrip.c39
1 files changed, 36 insertions, 3 deletions
diff --git a/apps/pdfrip.c b/apps/pdfrip.c
index b160ea65..d25e84b3 100644
--- a/apps/pdfrip.c
+++ b/apps/pdfrip.c
@@ -7,6 +7,7 @@ char *namefmt = nil;
fz_renderer *gc;
int nbands = 1;
int verbose = 0;
+int textonly = 0;
void usage()
{
@@ -14,8 +15,9 @@ void usage()
"usage: pdfrip [options] file.pdf pageranges\n"
" -b -\trender page in N bands (default 1)\n"
" -d -\tpassword for decryption\n"
+" -g \tshow display tree -- debug\n"
" -o -\toutput filename format (default out-%%03d.ppm)\n"
-" -t \tshow display tree\n"
+" -t \tprint text on stdout instead of rendering\n"
" -v \tverbose\n"
" -z -\tzoom factor (default 1.0 = 72 dpi)\n"
);
@@ -72,6 +74,22 @@ void showpage(pdf_xref *xref, fz_obj *pageobj, int pagenum)
ctm = fz_concat(fz_translate(0, -page->mediabox.max.y),
fz_scale(zoom, -zoom));
+ if (textonly)
+ {
+ pdf_textline *line;
+
+ error = pdf_loadtextfromtree(&line, page->tree, ctm);
+ if (error)
+ fz_abort(error);
+ pdf_debugtextline(line);
+ pdf_droptextline(line);
+ pdf_droppage(page);
+
+ printf("\n\f\n");
+
+ return;
+ }
+
bbox = fz_roundrect(page->mediabox);
bbox.min.x = bbox.min.x * zoom;
bbox.min.y = bbox.min.y * zoom;
@@ -123,6 +141,8 @@ void showpage(pdf_xref *xref, fz_obj *pageobj, int pagenum)
fz_droppixmap(pix);
close(fd);
+
+ pdf_droppage(page);
}
int main(int argc, char **argv)
@@ -138,11 +158,12 @@ int main(int argc, char **argv)
fz_cpudetect();
fz_accelerate();
- while ((c = getopt(argc, argv, "Vtvz:d:o:b:")) != -1)
+ while ((c = getopt(argc, argv, "Vgtvz:d:o:b:")) != -1)
{
switch (c)
{
- case 't': ++showtree; break;
+ case 'g': ++showtree; break;
+ case 't': ++textonly; break;
case 'v': ++verbose; break;
case 'd': password = optarg; break;
case 'z': zoom = atof(optarg); break;
@@ -209,7 +230,16 @@ int main(int argc, char **argv)
pdf_debugpagetree(pages);
if (optind == argc)
+ {
printf("%d pages\n", pdf_getpagecount(pages));
+ return 0;
+ }
+
+ if (textonly)
+ {
+ puts("Content-Type: text/plain; charset=UTF-8");
+ puts("");
+ }
error = fz_newrenderer(&gc, pdf_devicergb, 0, 1024 * 512);
if (error)
@@ -250,6 +280,9 @@ int main(int argc, char **argv)
fz_droprenderer(gc);
+ pdf_dropstore(xref->store);
+ xref->store = nil;
+
pdf_closexref(xref);
return 0;