[packages/swftools] - updated to 0.9.2 - added giflib patch (update for giflib 5.1+) - added poppler patches (one from s

qboosh qboosh at pld-linux.org
Sat Jun 21 18:43:10 CEST 2014


commit 2c2efdade29a57dddfa7505b951dbb1a6ca6881d
Author: Jakub Bogusz <qboosh at pld-linux.org>
Date:   Sat Jun 21 18:47:07 2014 +0200

    - updated to 0.9.2
    - added giflib patch (update for giflib 5.1+)
    - added poppler patches (one from some external repository, the second self made),
      use system poppler library instead of outdated, vulnerable xpdf sources
    - added install patch (make install fix)

 swftools-giflib.patch   |   54 ++
 swftools-install.patch  |   16 +
 swftools-poppler.patch  | 1279 +++++++++++++++++++++++++++++++++++++++++++++++
 swftools-poppler2.patch |   70 +++
 swftools.spec           |   33 +-
 5 files changed, 1438 insertions(+), 14 deletions(-)
---
diff --git a/swftools.spec b/swftools.spec
index 4ebc9e3..f3ac749 100644
--- a/swftools.spec
+++ b/swftools.spec
@@ -1,25 +1,32 @@
 Summary:	Utilities for SWF files manipulation
 Summary(pl.UTF-8):	Narzędzia do manipulacji na plikach SWF
 Name:		swftools
-Version:	0.9.1
-Release:	2
-License:	GPL
+Version:	0.9.2
+Release:	1
+License:	GPL v2+
 Group:		Applications/Graphics
+#Source0Download: http://www.swftools.org/download.html
 Source0:	http://www.swftools.org/%{name}-%{version}.tar.gz
-# Source0-md5:	72dc4a7bf5cdf98c28f9cf9b1d8f5d7a
+# Source0-md5:	1055ebbe3b4cadcc71e83775a5a0906d
 Patch0:		%{name}-swfstrings-print_unknown_chars.patch
 Patch1:		%{name}-missing-m4.patch
+Patch2:		%{name}-giflib.patch
+Patch3:		%{name}-poppler.patch
+Patch4:		%{name}-poppler2.patch
+Patch5:		%{name}-install.patch
 URL:		http://www.swftools.org/
 BuildRequires:	autoconf
 BuildRequires:	automake
 BuildRequires:	fftw3-devel
 BuildRequires:	fontconfig-devel
 BuildRequires:	freetype-devel
-BuildRequires:	giflib-devel
+BuildRequires:	giflib-devel >= 5.1
 BuildRequires:	lame-libs-devel
 BuildRequires:	libjpeg-devel
 BuildRequires:	libstdc++-devel
 BuildRequires:	libtool
+BuildRequires:	poppler-devel
+BuildRequires:	t1lib-devel >= 5.0.1
 BuildRequires:	zlib-devel
 BuildRequires:	zziplib-devel
 Requires:	fonts-Type1-urw
@@ -36,6 +43,10 @@ Narzędzia do manipulacji na plikach SWF.
 %setup -q
 %patch0 -p1
 %patch1 -p1
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+%patch5 -p1
 
 %build
 %{__libtoolize}
@@ -43,7 +54,9 @@ Narzędzia do manipulacji na plikach SWF.
 %{__autoconf}
 %configure \
 	ac_cv_header_pdflib_h=no \
-	AVIFILE_CONFIG=x
+	AVIFILE_CONFIG=x \
+	POPPLER_CFLAGS="-I/usr/include/poppler" \
+	--enable-poppler
 
 %{__make}
 
@@ -56,14 +69,6 @@ rm -rf $RPM_BUILD_ROOT
 	mandir=$RPM_BUILD_ROOT%{_mandir} \
 	datadir=$RPM_BUILD_ROOT%{_datadir}
 
-# fix broken .swf symlinks
-rm -f $RPM_BUILD_ROOT%{_datadir}/swftools/swfs/default_*
-ln -sf tessel_loader.swf $RPM_BUILD_ROOT%{_datadir}/swftools/swfs/default_loader.swf
-ln -sf simple_viewer.swf $RPM_BUILD_ROOT%{_datadir}/swftools/swfs/default_viewer.swf
-
-# no -devel package, shut up check-files
-rm -f $RPM_BUILD_ROOT%{_libdir}/lib*.{la,so}
-
 %clean
 rm -rf $RPM_BUILD_ROOT
 
diff --git a/swftools-giflib.patch b/swftools-giflib.patch
new file mode 100644
index 0000000..8838f11
--- /dev/null
+++ b/swftools-giflib.patch
@@ -0,0 +1,54 @@
+--- swftools-0.9.2/src/gif2swf.c.orig	2011-01-02 04:30:29.000000000 +0100
++++ swftools-0.9.2/src/gif2swf.c	2014-06-19 21:18:02.578953540 +0200
+@@ -230,13 +230,13 @@
+     }
+     fclose(fi);
+ 
+-    if ((gft = DGifOpenFileName(sname)) == NULL) {
++    if ((gft = DGifOpenFileName(sname, NULL)) == NULL) {
+         fprintf(stderr, "%s is not a GIF file!\n", sname);
+         return t;
+     }
+ 
+     if (DGifSlurp(gft) != GIF_OK) {
+-        PrintGifError();
++        fprintf(stderr, "GIF-LIB error: %s\n", GifErrorString(gft->Error));
+         return t;
+     }
+ 
+@@ -455,7 +455,7 @@
+ 
+     free(pal);
+     free(imagedata);
+-    DGifCloseFile(gft);
++    DGifCloseFile(gft, NULL);
+ 
+     return t;
+ }
+@@ -488,7 +488,7 @@
+     }
+     fclose(fi);
+ 
+-    if ((gft = DGifOpenFileName(s)) == NULL) {
++    if ((gft = DGifOpenFileName(s, NULL)) == NULL) {
+         fprintf(stderr, "%s is not a GIF file!\n", fname);
+         return -1;
+     }
+@@ -499,7 +499,7 @@
+         global.max_image_height = gft->SHeight;
+ 
+     if (DGifSlurp(gft) != GIF_OK) { 
+-        PrintGifError();
++        fprintf(stderr, "GIF-LIB error: %s\n", GifErrorString(gft->Error));
+         return -1;
+     }
+     // After DGifSlurp() call, gft->ImageCount become available
+@@ -518,7 +518,7 @@
+             fprintf(stderr, "frame: %u, delay: %.3f sec\n", i + 1, getGifDelayTime(gft, i) / 100.0);
+     }
+ 
+-    DGifCloseFile(gft);
++    DGifCloseFile(gft, NULL);
+ 
+     return 0;
+ }
diff --git a/swftools-install.patch b/swftools-install.patch
new file mode 100644
index 0000000..b015eec
--- /dev/null
+++ b/swftools-install.patch
@@ -0,0 +1,16 @@
+--- swftools-0.9.2/swfs/Makefile.in.orig	2012-04-08 19:25:26.000000000 +0200
++++ swftools-0.9.2/swfs/Makefile.in	2014-06-21 17:55:24.215605265 +0200
+@@ -41,9 +41,9 @@
+ 	$(INSTALL_DATA) ./PreLoaderTemplate.swf $(pkgdatadir)/swfs/PreLoaderTemplate.swf
+ 	$(INSTALL_DATA) ./tessel_loader.swf $(pkgdatadir)/swfs/tessel_loader.swf
+ 	$(INSTALL_DATA) ./swft_loader.swf $(pkgdatadir)/swfs/swft_loader.swf
+-	rm -f $(pkgdatadir)/swfs/default_viewer.swf -o -L $(pkgdatadir)/swfs/default_viewer.swf
+-	$(LN_S) $(pkgdatadir)/swfs/simple_viewer.swf $(pkgdatadir)/swfs/default_viewer.swf
+-	rm -f $(pkgdatadir)/swfs/default_loader.swf -o -L $(pkgdatadir)/swfs/default_loader.swf
+-	$(LN_S) $(pkgdatadir)/swfs/tessel_loader.swf $(pkgdatadir)/swfs/default_loader.swf
++	rm -f $(pkgdatadir)/swfs/default_viewer.swf
++	$(LN_S) simple_viewer.swf $(pkgdatadir)/swfs/default_viewer.swf
++	rm -f $(pkgdatadir)/swfs/default_loader.swf
++	$(LN_S) tessel_loader.swf $(pkgdatadir)/swfs/default_loader.swf
+ 		
+ uninstall:
diff --git a/swftools-poppler.patch b/swftools-poppler.patch
new file mode 100644
index 0000000..c5eeebc
--- /dev/null
+++ b/swftools-poppler.patch
@@ -0,0 +1,1279 @@
+From git://people.freedesktop.org/~carlosgc/swftools ; git diff master xpdf303
+diff --git a/config.h.in b/config.h.in
+index 0ec7fb9..51fe5a3 100644
+--- a/config.h.in
++++ b/config.h.in
+@@ -266,6 +266,7 @@
+ #ifdef HAVE_POPPLER
+ #define GString GooString
+ #define GHash GooHash
++#define GHashIter GooHashIter
+ #endif
+ 
+ #ifdef HAVE_ZZIP_LIB_H
+diff --git a/configure.in b/configure.in
+index 8b04d6f..7895338 100644
+--- a/configure.in
++++ b/configure.in
+@@ -331,7 +331,7 @@ xpdf_include=
+ 
+ if test "x$USE_POPPLER" = "xtrue"; then
+     AC_DEFINE([HAVE_POPPLER],[1],[use poppler])
+-    #PKG_CHECK_MODULES([POPPLER],[poppler poppler-splash],,[poppler_pkgconfig=no])
++    PKG_CHECK_MODULES([POPPLER],[poppler >= 0.20.0 poppler-splash >= 0.20.0],,[poppler_pkgconfig=no])
+     if test "x$poppler_pkgconfig" = "xno"; then
+         AC_LANG_PUSH([C++])
+         AC_CHECK_HEADERS([OutputDev.h],[
+diff --git a/lib/pdf/BitmapOutputDev.cc b/lib/pdf/BitmapOutputDev.cc
+index 7b175b3..11fa842 100644
+--- a/lib/pdf/BitmapOutputDev.cc
++++ b/lib/pdf/BitmapOutputDev.cc
+@@ -23,10 +23,12 @@
+ #include <assert.h>
+ #include "BitmapOutputDev.h"
+ #include "CharOutputDev.h"
++#include "GFXSplashOutputDev.h"
+ 
+ #ifdef HAVE_POPPLER
+   #include "splash/SplashBitmap.h"
+   #include "splash/SplashPattern.h"
++  #include "splash/SplashGlyphBitmap.h"
+   #include "splash/Splash.h"
+ #else
+   #include "xpdf/config.h"
+@@ -70,28 +72,28 @@ BitmapOutputDev::BitmapOutputDev(InfoOutputDev*info, PDFDoc*doc, int*page2page,
+     this->xref = doc->getXRef();
+     
+     /* color graphic output device, for creating bitmaps */
+-    this->rgbdev = new SplashOutputDev(splashModeRGB8, 1, gFalse, splash_white, gTrue, gTrue);
++    this->rgbdev = new GFXSplashOutputDev(splashModeRGB8, 1, gFalse, splash_white, gTrue, gTrue);
+   
+     /* color mode for binary bitmaps */
+     SplashColorMode colorMode = splashModeMono1;
+ 
+     /* two devices for testing things against clipping: one clips, the other doesn't */
+-    this->clip0dev = new SplashOutputDev(colorMode, 1, gFalse, splash_black, gTrue, gFalse);
+-    this->clip1dev = new SplashOutputDev(colorMode, 1, gFalse, splash_black, gTrue, gFalse);
++    this->clip0dev = new GFXSplashOutputDev(colorMode, 1, gFalse, splash_black, gTrue, gFalse);
++    this->clip1dev = new GFXSplashOutputDev(colorMode, 1, gFalse, splash_black, gTrue, gFalse);
+     
+     /* device indicating where polygonal pixels were drawn */
+-    this->boolpolydev = new SplashOutputDev(colorMode, 1, gFalse, splash_black, gTrue, gFalse);
++    this->boolpolydev = new GFXSplashOutputDev(colorMode, 1, gFalse, splash_black, gTrue, gFalse);
+     /* device indicating where text pixels were drawn */
+-    this->booltextdev = new SplashOutputDev(colorMode, 1, gFalse, splash_black, gTrue, gFalse);
++    this->booltextdev = new GFXSplashOutputDev(colorMode, 1, gFalse, splash_black, gTrue, gFalse);
+ 
+     /* device for handling texts and links */
+     this->gfxdev = new CharOutputDev(info, this->doc, page2page, num_pages, x, y, x1, y1, x2, y2);
+ 
+-    this->rgbdev->startDoc(this->xref);
+-    this->boolpolydev->startDoc(this->xref);
+-    this->booltextdev->startDoc(this->xref);
+-    this->clip0dev->startDoc(this->xref);
+-    this->clip1dev->startDoc(this->xref);
++    this->rgbdev->startDoc(POPPLER_STARTDOC_ARG);
++    this->boolpolydev->startDoc(POPPLER_STARTDOC_ARG);
++    this->booltextdev->startDoc(POPPLER_STARTDOC_ARG);
++    this->clip0dev->startDoc(POPPLER_STARTDOC_ARG);
++    this->clip1dev->startDoc(POPPLER_STARTDOC_ARG);
+ 
+     this->gfxoutput_string = device_new_record();
+     this->gfxoutput = device_new_record();
+@@ -153,14 +155,6 @@ BitmapOutputDev::~BitmapOutputDev()
+ 
+ }
+ 
+-GBool BitmapOutputDev::getVectorAntialias()
+-{
+-    return this->rgbdev->getVectorAntialias();
+-}
+-void BitmapOutputDev::setVectorAntialias(GBool vaa)
+-{
+-    this->rgbdev->setVectorAntialias(vaa);
+-}
+ void BitmapOutputDev::setDevice(gfxdevice_t*dev)
+ {
+     this->dev = dev;
+@@ -188,8 +182,8 @@ void BitmapOutputDev::flushBitmap()
+     int bitmap_width = rgbdev->getBitmapWidth();
+     int bitmap_height = rgbdev->getBitmapHeight();
+ 
+-    if(sizeof(SplashColor)!=3) {
+-	msg("<error> sizeof(SplashColor)!=3");
++    if(sizeof(SplashColor)<3) {
++	msg("<error> sizeof(SplashColor)<3");
+ 	return;
+     }
+ 
+@@ -992,9 +986,10 @@ GBool BitmapOutputDev::intersection(SplashBitmap*boolpoly, SplashBitmap*booltext
+ GBool BitmapOutputDev::checkPageSlice(Page *page, double hDPI, double vDPI,
+              int rotate, GBool useMediaBox, GBool crop,
+              int sliceX, int sliceY, int sliceW, int sliceH,
+-             GBool printing, Catalog *catalog,
++             GBool printing,
+              GBool (*abortCheckCbk)(void *data),
+-             void *abortCheckCbkData)
++             void *abortCheckCbkData
++             POPPLER_CHECK_PAGE_SLICE_ANNOT_CBK POPPLER_CHECK_PAGE_SLICE_ANNOT_CBK_DATA)
+ {
+     this->setPage(page);
+     gfxdev->setPage(page);
+@@ -1084,13 +1079,13 @@ GBool BitmapOutputDev::useTilingPatternFill()
+     return rgbdev->useTilingPatternFill();
+ }
+ 
+-GBool BitmapOutputDev::useShadedFills()
++GBool BitmapOutputDev::useShadedFills(POPPLER_SHADED_FILL_TYPE)
+ {
+-    boolpolydev->useShadedFills();
+-    booltextdev->useShadedFills();
+-    clip0dev->useShadedFills();
+-    clip1dev->useShadedFills();
+-    return rgbdev->useShadedFills();
++    boolpolydev->useShadedFills(POPPLER_SHADED_FILL_TYPE_ARG);
++    booltextdev->useShadedFills(POPPLER_SHADED_FILL_TYPE_ARG);
++    clip0dev->useShadedFills(POPPLER_SHADED_FILL_TYPE_ARG);
++    clip1dev->useShadedFills(POPPLER_SHADED_FILL_TYPE_ARG);
++    return rgbdev->useShadedFills(POPPLER_SHADED_FILL_TYPE_ARG);
+ }
+ 
+ GBool BitmapOutputDev::useDrawForm()
+@@ -1507,17 +1502,19 @@ void BitmapOutputDev::eoFill(GfxState *state)
+     dbg_newdata("eofill");
+ }
+ 
+-POPPLER_TILING_PATERN_RETURN BitmapOutputDev::tilingPatternFill(GfxState *state, POPPLER_TILING_PATERN_GFX Object *str,
+-			       int paintType, Dict *resDict,
++POPPLER_TILING_PATERN_RETURN BitmapOutputDev::tilingPatternFill(GfxState *state, Gfx *gfx, POPPLER_TILING_PATTERN_CATALOG Object *str,
++			       POPPLER_TILING_PATTERN_PMAT int paintType, POPPLER_TILING_PATTERN_TILING_TYPE Dict *resDict,
+ 			       double *mat, double *bbox,
+ 			       int x0, int y0, int x1, int y1,
+ 			       double xStep, double yStep) 
+ {
+     msg("<debug> tilingPatternFill");
+-    boolpolydev->tilingPatternFill(state, POPPLER_TILING_PATERN_GFX_ARG str, paintType, resDict, mat,
++    boolpolydev->tilingPatternFill(state, gfx, POPPLER_TILING_PATTERN_CATALOG_ARG str, POPPLER_TILING_PATTERN_PMAT_ARG paintType,
++                                   POPPLER_TILING_PATTERN_TILING_TYPE_ARG resDict, mat,
+                                    bbox, x0, y0, x1, y1, xStep, yStep);
+     checkNewBitmap(UNKNOWN_BOUNDING_BOX);
+-    rgbdev->tilingPatternFill(state, POPPLER_TILING_PATERN_GFX_ARG str, paintType, resDict, mat,
++    rgbdev->tilingPatternFill(state, gfx, POPPLER_TILING_PATTERN_CATALOG_ARG str, POPPLER_TILING_PATTERN_PMAT_ARG paintType,
++                              POPPLER_TILING_PATTERN_TILING_TYPE_ARG resDict, mat,
+                               bbox, x0, y0, x1, y1, xStep, yStep);
+     dbg_newdata("tilingpatternfill");
+ #ifdef HAVE_POPPLER
+@@ -1615,7 +1612,7 @@ void BitmapOutputDev::clearBoolTextDev()
+ 
+ #define USE_GETGLYPH_BBOX
+ 
+-static void getGlyphBbox(GfxState*state, SplashOutputDev*splash, double x, double y, double originX, double originY, CharCode code, int*_x1, int*_y1, int*_x2, int*_y2)
++static void getGlyphBbox(GfxState*state, GFXSplashOutputDev*splash, double x, double y, double originX, double originY, CharCode code, int*_x1, int*_y1, int*_x2, int*_y2)
+ {
+ #ifdef USE_GETGLYPH_BBOX
+     /* use getglyph to derive bounding box */
+@@ -1634,7 +1631,14 @@ static void getGlyphBbox(GfxState*state, SplashOutputDev*splash, double x, doubl
+ 
+     SplashCoord*matrix = font->getMatrix();
+ 
+-    if(font && font->getGlyph(code, xFrac, yFrac, &glyph)) {
++#ifdef HAVE_POPPLER
++    double clipx1, clipy1, clipx2, clipy2;
++    state->getClipBBox(&clipx1, &clipy1, &clipx2, &clipy2);
++    SplashClip clip(clipx1, clipy1, clipx2, clipy2, gFalse);
++    SplashClipResult clipRes;
++#endif
++
++    if(font && font->getGlyph(code, xFrac, yFrac, &glyph POPPLER_GET_GLYPH_ARGS)) {
+         x1 = floor(x0-glyph.x);
+         y1 = floor(y0-glyph.y);
+         x2 = ceil(x0-glyph.x+glyph.w);
+@@ -1648,7 +1652,7 @@ static void getGlyphBbox(GfxState*state, SplashOutputDev*splash, double x, doubl
+     double x0,y0;
+     state->transform(x-originX,y-originY,&x0,&y0);
+     int x1 = (int)x0, x2 = (int)x0+1, y1 = (int)y0, y2 = (int)y0+1;
+-    SplashFont*font = clip0dev->getCurrentFont();
++    SplashFont*font = splash->getCurrentFont();
+     SplashPath*path = font?font->getGlyphPath(code):NULL;
+     if(path) {
+         path->offset((SplashCoord)x, (SplashCoord)y);
+@@ -1980,10 +1984,10 @@ void BitmapOutputDev::drawForm(Ref id)
+     rgbdev->drawForm(id);
+ }
+ 
+-void BitmapOutputDev::processLink(Link *link, Catalog *catalog)
++void BitmapOutputDev::processLink(Link *link)
+ {
+     msg("<debug> processLink");
+-    gfxdev->processLink(link, catalog);
++    gfxdev->processLink(link);
+ }
+ void BitmapOutputDev::flushEverything()
+ {
+diff --git a/lib/pdf/BitmapOutputDev.h b/lib/pdf/BitmapOutputDev.h
+index 3644a0e..1ad7ec6 100644
+--- a/lib/pdf/BitmapOutputDev.h
++++ b/lib/pdf/BitmapOutputDev.h
+@@ -27,6 +27,7 @@
+ #include "../../config.h"
+ #include "CharOutputDev.h"
+ #include "InfoOutputDev.h"
++#include "GFXSplashOutputDev.h"
+ #include "PDFDoc.h"
+ #include "CommonOutputDev.h"
+ #include "popplercompat.h"
+@@ -58,7 +59,7 @@ public:
+     virtual GBool upsideDown();
+     virtual GBool useDrawChar();
+     virtual GBool useTilingPatternFill();
+-    virtual GBool useShadedFills();
++    virtual GBool useShadedFills(POPPLER_SHADED_FILL_TYPE);
+     virtual GBool useDrawForm();
+     virtual GBool interpretType3Chars();
+     virtual GBool needNonText();
+@@ -66,9 +67,11 @@ public:
+     virtual GBool checkPageSlice(Page *page, double hDPI, double vDPI,
+ 			       int rotate, GBool useMediaBox, GBool crop,
+ 			       int sliceX, int sliceY, int sliceW, int sliceH,
+-			       GBool printing, Catalog *catalog,
++			       GBool printing,
+ 			       GBool (*abortCheckCbk)(void *data) = NULL,
+-			       void *abortCheckCbkData = NULL);
++			       void *abortCheckCbkData = NULL
++                               POPPLER_CHECK_PAGE_SLICE_ANNOT_CBK_H
++                               POPPLER_CHECK_PAGE_SLICE_ANNOT_CBK_DATA_H);
+ 
+     virtual void beginPage(GfxState *state, int pageNum);
+     virtual void endPage();
+@@ -110,8 +113,9 @@ public:
+     virtual void fill(GfxState *state);
+     virtual void eoFill(GfxState *state);
+     virtual POPPLER_TILING_PATERN_RETURN tilingPatternFill(
+-             GfxState *state, POPPLER_TILING_PATERN_GFX Object *str,
+-			       int paintType, Dict *resDict,
++                               GfxState *state, Gfx *gfx, POPPLER_TILING_PATTERN_CATALOG Object *str,
++                               POPPLER_TILING_PATTERN_PMAT
++			       int paintType, POPPLER_TILING_PATTERN_TILING_TYPE Dict *resDict,
+ 			       double *mat, double *bbox,
+ 			       int x0, int y0, int x1, int y1,
+ 			       double xStep, double yStep);
+@@ -178,12 +182,9 @@ public:
+     virtual void setSoftMask(GfxState *state, double *bbox, GBool alpha, Function *transferFunc, GfxColor *backdropColor);
+     virtual void clearSoftMask(GfxState *state);
+ 
+-    virtual void processLink(Link *link, Catalog *catalog);
++    virtual void processLink(Link *link);
+   
+-    virtual void setVectorAntialias(GBool vaa);
+-    virtual GBool getVectorAntialias();
+ 
+-    
+ private:
+     void flushEverything();
+     void clearClips(int x1, int y1, int x2, int y2);
+@@ -211,11 +212,11 @@ private:
+ 
+     SplashPath*bboxpath;
+ 
+-    SplashOutputDev*rgbdev;
+-    SplashOutputDev*clip0dev;
+-    SplashOutputDev*clip1dev;
+-    SplashOutputDev*boolpolydev;
+-    SplashOutputDev*booltextdev;
++    GFXSplashOutputDev*rgbdev;
++    GFXSplashOutputDev*clip0dev;
++    GFXSplashOutputDev*clip1dev;
++    GFXSplashOutputDev*boolpolydev;
++    GFXSplashOutputDev*booltextdev;
+ 
+     SplashBitmap*rgbbitmap;
+     SplashBitmap*clip0bitmap;
+diff --git a/lib/pdf/CharOutputDev.cc b/lib/pdf/CharOutputDev.cc
+index cd7ceff..2e6fd1a 100644
+--- a/lib/pdf/CharOutputDev.cc
++++ b/lib/pdf/CharOutputDev.cc
+@@ -83,7 +83,6 @@ struct fontentry {
+     char*pfb;
+     int pfblen;
+     char*fullfilename;
+-    DisplayFontParam *dfp;
+ } pdf2t1map[] ={
+ {"Times-Roman",           "n021003l", n021003l_afm, n021003l_afm_len, n021003l_pfb, n021003l_pfb_len},
+ {"Times-Italic",          "n021023l", n021023l_afm, n021023l_afm_len, n021023l_pfb, n021023l_pfb_len},
+@@ -198,6 +197,7 @@ void unlinkfont(char* filename)
+     }
+ }
+ 
++#ifndef HAVE_POPPLER
+ static int config_use_fontconfig = 1;
+ static int fcinitcalled = 0; 
+ 
+@@ -424,16 +424,7 @@ char* fontconfig_searchForFont(char*name)
+ #endif
+ }
+ 
+-static DisplayFontParamKind detectFontType(const char*filename)
+-{
+-    if(strstr(filename, ".ttf") || strstr(filename, ".TTF"))
+-	return displayFontTT;
+-    if(strstr(filename, ".pfa") || strstr(filename, ".PFA") || strstr(filename, ".pfb"))
+-	return displayFontT1;
+-    return displayFontTT;
+-}
+-
+-DisplayFontParam *GFXGlobalParams::getDisplayFont(GString *fontName)
++GString *GFXGlobalParams::findFontFile(GString *fontName)
+ {
+     msg("<verbose> looking for font %s", fontName->getCString());
+ 
+@@ -450,11 +441,8 @@ DisplayFontParam *GFXGlobalParams::getDisplayFont(GString *fontName)
+ 		} else {
+ 		    msg("<verbose> Storing standard PDF font %s at %s", name, pdf2t1map[t].fullfilename);
+ 		}
+-		DisplayFontParam *dfp = new DisplayFontParam(new GString(fontName), displayFontT1);
+-		dfp->t1.fileName = new GString(pdf2t1map[t].fullfilename);
+-		pdf2t1map[t].dfp = dfp;
+ 	    }
+-	    return pdf2t1map[t].dfp;
++            return pdf2t1map[t].fullfilename ? new GString(pdf2t1map[t].fullfilename) : NULL;
+ 	}
+     }
+     
+@@ -485,30 +473,16 @@ DisplayFontParam *GFXGlobalParams::getDisplayFont(GString *fontName)
+     }
+ 
+     if(filename) {
++        GString*retval = new GString(filename);
+         msg("<verbose> Font %s maps to %s\n", name, filename);
+-	DisplayFontParamKind kind = detectFontType(filename);
+-        DisplayFontParam *dfp = new DisplayFontParam(new GString(fontName), kind);
+-	if(kind == displayFontTT) {
+-	    dfp->tt.fileName = new GString(filename);
+-	} else {
+-	    dfp->t1.fileName = new GString(filename);
+-	}
+-	free(filename);
+-        return dfp;
++        free(filename);
++        return retval;
+     } else {
+ 	msg("<verbose> Font %s not found\n", name);
+-	return GlobalParams::getDisplayFont(fontName);
+-    }
+-}
+-
+-DisplayFontParam *GFXGlobalParams::getDisplayCIDFont(GString *fontName, GString *collection)
+-{
+-    DisplayFontParam*dfp = GlobalParams::getDisplayCIDFont(fontName, collection);
+-    if(!dfp) {
+-        dfp = this->getDisplayFont(fontName);
++        return GlobalParams::findFontFile(fontName);
+     }
+-    return dfp;
+ }
++#endif // HAVE_POPPLER
+ 
+ CharOutputDev::CharOutputDev(InfoOutputDev*info, PDFDoc*doc, int*page2page, int num_pages, int x, int y, int x1, int y1, int x2, int y2)
+ :CommonOutputDev(info, doc, page2page, num_pages, x, y, x1, y1, x2, y2)
+@@ -652,7 +626,7 @@ static void dumpFontInfo(const char*loglevel, GfxFont*font)
+   if(embedded)
+    msg("%s| Embedded id: %s id: %d",loglevel, FIXNULL(embeddedName), embRef.num);
+ 
+-  gstr = font->getExtFontFile();
++  gstr = globalParams->findFontFile(font->getName());
+   if(gstr)
+    msg("%s| External Font file: %s", loglevel, FIXNULL(gstr->getCString()));
+ 
+@@ -1046,7 +1020,7 @@ GFXLink::~GFXLink()
+ }
+ 
+ 
+-void CharOutputDev::processLink(Link *link, Catalog *catalog)
++void CharOutputDev::processLink(Link *link)
+ {
+     double x1, y1, x2, y2;
+     
+@@ -1068,13 +1042,13 @@ void CharOutputDev::processLink(Link *link, Catalog *catalog)
+             LinkGoTo *ha=(LinkGoTo *)link->getAction();
+             LinkDest *dest=NULL;
+             if (ha->getDest()==NULL) 
+-                dest=catalog->findDest(ha->getNamedDest());
++                dest=this->doc->findDest(ha->getNamedDest());
+             else 
+                 dest=ha->getDest()->copy();
+             if (dest){ 
+               if (dest->isPageRef()){
+                 Ref pageref=dest->getPageRef();
+-                page=catalog->findPage(pageref.num,pageref.gen);
++                page=this->doc->findPage(pageref.num,pageref.gen);
+               }
+               else  page=dest->getPageNum();
+               sprintf(buf, "%d", page);
+diff --git a/lib/pdf/CharOutputDev.h b/lib/pdf/CharOutputDev.h
+index 0801090..86124db 100644
+--- a/lib/pdf/CharOutputDev.h
++++ b/lib/pdf/CharOutputDev.h
+@@ -33,7 +33,7 @@ public:
+   virtual GBool upsideDown();
+   virtual GBool useDrawChar();
+ 
+-  virtual void processLink(Link *link, Catalog *catalog);
++  virtual void processLink(Link *link);
+   virtual void saveState(GfxState *state) ;
+   virtual void restoreState(GfxState *state) ;
+ 
+@@ -108,12 +108,13 @@ class GFXLink {
+     ~GFXLink();
+ };
+ 
++#ifndef HAVE_POPPLER
+ class GFXGlobalParams:  public GlobalParams {
+     public:
+     GFXGlobalParams();
+     ~GFXGlobalParams();
+-    virtual DisplayFontParam *getDisplayFont(GString *fontName);
+-    virtual DisplayFontParam *getDisplayCIDFont(GString *fontName, GString *collection);
++    virtual GString *findFontFile(GString *fontName);
+ };
++#endif
+ 
+ #endif //__charoutputdev_h__
+diff --git a/lib/pdf/CommonOutputDev.h b/lib/pdf/CommonOutputDev.h
+index db2f4d8..ae10d7c 100644
+--- a/lib/pdf/CommonOutputDev.h
++++ b/lib/pdf/CommonOutputDev.h
+@@ -80,7 +80,9 @@ class CommonOutputDev: public OutputDev
+ 			       int sliceX, int sliceY, int sliceW, int sliceH,
+ 			       GBool printing, Catalog *catalog,
+ 			       GBool (*abortCheckCbk)(void *data) = NULL,
+-			       void *abortCheckCbkData = NULL)
++			       void *abortCheckCbkData = NULL
++                               POPPLER_CHECK_PAGE_SLICE_ANNOT_CBK_H
++                               POPPLER_CHECK_PAGE_SLICE_ANNOT_CBK_DATA_H)
+     {
+         this->setPage(page);
+         return gTrue;
+#diff --git a/lib/pdf/DummyOutputDev.cc b/lib/pdf/DummyOutputDev.cc
+#index a89b5c7..6ad7608 100644
+#--- a/lib/pdf/DummyOutputDev.cc
+#+++ b/lib/pdf/DummyOutputDev.cc
+#@@ -64,9 +64,9 @@ GBool DummyOutputDev::useTilingPatternFill()
+#     return rgbdev->useTilingPatternFill();
+# }
+# 
+#-GBool DummyOutputDev::useShadedFills()
+#+GBool DummyOutputDev::useShadedFills(POPPLER_SHADED_FILL_TYPE)
+# {
+#-    return rgbdev->useShadedFills();
+#+    return rgbdev->useShadedFills(POPPLER_SHADED_FILL_TYPE_ARG);
+# }
+# 
+# GBool DummyOutputDev::useDrawForm()
+#@@ -348,7 +348,7 @@ void DummyOutputDev::drawForm(Ref id)
+#     rgbdev->drawForm(id);
+# }
+# 
+#-void DummyOutputDev::processLink(Link *link, Catalog *catalog)
+#+void DummyOutputDev::processLink(Link *link)
+# {
+# }
+# 
+#diff --git a/lib/pdf/DummyOutputDev.h b/lib/pdf/DummyOutputDev.h
+#index ca831a8..6cc0519 100644
+#--- a/lib/pdf/DummyOutputDev.h
+#+++ b/lib/pdf/DummyOutputDev.h
+#@@ -41,7 +41,7 @@ public:
+#     virtual GBool upsideDown();
+#     virtual GBool useDrawChar();
+#     virtual GBool useTilingPatternFill();
+#-    virtual GBool useShadedFills();
+#+    virtual GBool useShadedFills(POPPLER_SHADED_FILL_TYPE);
+#     virtual GBool useDrawForm();
+#     virtual GBool interpretType3Chars();
+#     virtual GBool needNonText();
+#@@ -161,7 +161,7 @@ public:
+#     virtual void setSoftMask(GfxState *state, double *bbox, GBool alpha, Function *transferFunc, GfxColor *backdropColor);
+#     virtual void clearSoftMask(GfxState *state);
+# 
+#-    virtual void processLink(Link *link, Catalog *catalog);
+#+    virtual void processLink(Link *link);
+#     
+#     OutputDev*rgbdev;
+# private:
+diff --git a/lib/pdf/FullBitmapOutputDev.cc b/lib/pdf/FullBitmapOutputDev.cc
+index 8faaa0b..b9efc8e 100644
+--- a/lib/pdf/FullBitmapOutputDev.cc
++++ b/lib/pdf/FullBitmapOutputDev.cc
+@@ -54,7 +54,7 @@ FullBitmapOutputDev::FullBitmapOutputDev(InfoOutputDev*info, PDFDoc*doc, int*pag
+     /* device for handling links */
+     this->gfxdev = new CharOutputDev(info, this->doc, page2page, num_pages, x, y, x1, y1, x2, y2);
+ 
+-    this->rgbdev->startDoc(this->xref);
++    this->rgbdev->startDoc(POPPLER_STARTDOC_ARG);
+ }
+ FullBitmapOutputDev::~FullBitmapOutputDev()
+ {
+@@ -66,14 +66,6 @@ FullBitmapOutputDev::~FullBitmapOutputDev()
+     }
+ }
+ 
+-GBool FullBitmapOutputDev::getVectorAntialias()
+-{
+-    return this->rgbdev->getVectorAntialias();
+-}
+-void FullBitmapOutputDev::setVectorAntialias(GBool vaa)
+-{
+-    this->rgbdev->setVectorAntialias(vaa);
+-}
+ void FullBitmapOutputDev::setDevice(gfxdevice_t*dev)
+ {
+     this->dev = dev;
+@@ -138,8 +130,8 @@ void FullBitmapOutputDev::flushBitmap()
+     if((xmax-xmin)<=0 || (ymax-ymin)<=0) // no bitmap, nothing to do
+ 	return;
+ 
+-    if(sizeof(SplashColor)!=3) {
+-	msg("<error> sizeof(SplashColor)!=3");
++    if(sizeof(SplashColor)<3) {
++	msg("<error> sizeof(SplashColor)<3");
+ 	return;
+     }
+     //xmin = ymin = 0;
+@@ -187,9 +179,10 @@ void FullBitmapOutputDev::flushBitmap()
+ GBool FullBitmapOutputDev::checkPageSlice(Page *page, double hDPI, double vDPI,
+              int rotate, GBool useMediaBox, GBool crop,
+              int sliceX, int sliceY, int sliceW, int sliceH,
+-             GBool printing, Catalog *catalog,
++             GBool printing,
+              GBool (*abortCheckCbk)(void *data),
+-             void *abortCheckCbkData)
++             void *abortCheckCbkData
++             POPPLER_CHECK_PAGE_SLICE_ANNOT_CBK POPPLER_CHECK_PAGE_SLICE_ANNOT_CBK_DATA)
+ {
+     this->setPage(page);
+     gfxdev->setPage(page);
+@@ -222,9 +215,9 @@ GBool FullBitmapOutputDev::useTilingPatternFill()
+ {
+     return rgbdev->useTilingPatternFill();
+ }
+-GBool FullBitmapOutputDev::useShadedFills()
++GBool FullBitmapOutputDev::useShadedFills(POPPLER_SHADED_FILL_TYPE)
+ {
+-    return rgbdev->useShadedFills();
++    return rgbdev->useShadedFills(POPPLER_SHADED_FILL_TYPE_ARG);
+ }
+ GBool FullBitmapOutputDev::useDrawForm()
+ {
+@@ -380,18 +373,20 @@ void FullBitmapOutputDev::eoFill(GfxState *state)
+     msg("<debug> eoFill");
+     rgbdev->eoFill(state);
+ }
+-POPPLER_TILING_PATERN_RETURN FullBitmapOutputDev::tilingPatternFill(GfxState *state, POPPLER_TILING_PATERN_GFX
+-             Object *str,
+-			       int paintType, Dict *resDict,
++POPPLER_TILING_PATERN_RETURN FullBitmapOutputDev::tilingPatternFill(GfxState *state, Gfx *gfx,
++                               POPPLER_TILING_PATTERN_CATALOG Object *str,
++                               POPPLER_TILING_PATTERN_PMAT
++			       int paintType, POPPLER_TILING_PATTERN_TILING_TYPE Dict *resDict,
+ 			       double *mat, double *bbox,
+ 			       int x0, int y0, int x1, int y1,
+ 			       double xStep, double yStep)
+ {
+     msg("<debug> tilingPatternFill");
++    rgbdev->tilingPatternFill(state, gfx, POPPLER_TILING_PATTERN_CATALOG_ARG str, POPPLER_TILING_PATTERN_PMAT_ARG paintType,
++                              POPPLER_TILING_PATTERN_TILING_TYPE_ARG resDict, mat, bbox, x0, y0, x1, y1, xStep, yStep);
+ #ifdef HAVE_POPPLER
+-    return
++    return gTrue;
+ #endif
+-    rgbdev->tilingPatternFill(state, POPPLER_TILING_PATERN_GFX_ARG str, paintType, resDict, mat, bbox, x0, y0, x1, y1, xStep, yStep);
+ }
+ 
+ GBool FullBitmapOutputDev::functionShadedFill(GfxState *state, GfxFunctionShading *shading) 
+@@ -536,10 +531,10 @@ void FullBitmapOutputDev::drawForm(Ref id)
+     rgbdev->drawForm(id);
+ }
+ 
+-void FullBitmapOutputDev::processLink(Link *link, Catalog *catalog)
++void FullBitmapOutputDev::processLink(Link *link)
+ {
+     msg("<debug> processLink");
+-    gfxdev->processLink(link, catalog);
++    gfxdev->processLink(link);
+ }
+ 
+ void FullBitmapOutputDev::beginTransparencyGroup(GfxState *state, double *bbox,
+diff --git a/lib/pdf/FullBitmapOutputDev.h b/lib/pdf/FullBitmapOutputDev.h
+index d9eb543..e9ce21e 100644
+--- a/lib/pdf/FullBitmapOutputDev.h
++++ b/lib/pdf/FullBitmapOutputDev.h
+@@ -47,7 +47,7 @@ public:
+     virtual GBool upsideDown();
+     virtual GBool useDrawChar();
+     virtual GBool useTilingPatternFill();
+-    virtual GBool useShadedFills();
++    virtual GBool useShadedFills(POPPLER_SHADED_FILL_TYPE);
+     virtual GBool useDrawForm();
+     virtual GBool interpretType3Chars();
+     virtual GBool needNonText();
+@@ -55,9 +55,11 @@ public:
+     virtual GBool checkPageSlice(Page *page, double hDPI, double vDPI,
+ 			       int rotate, GBool useMediaBox, GBool crop,
+ 			       int sliceX, int sliceY, int sliceW, int sliceH,
+-			       GBool printing, Catalog *catalog,
++			       GBool printing,
+ 			       GBool (*abortCheckCbk)(void *data) = NULL,
+-			       void *abortCheckCbkData = NULL);
++			       void *abortCheckCbkData = NULL
++                               POPPLER_CHECK_PAGE_SLICE_ANNOT_CBK_H
++                               POPPLER_CHECK_PAGE_SLICE_ANNOT_CBK_DATA_H);
+ 
+     virtual void beginPage(GfxState *state, int pageNum);
+     virtual void endPage();
+@@ -98,8 +100,9 @@ public:
+     virtual void fill(GfxState *state);
+     virtual void eoFill(GfxState *state);
+     virtual POPPLER_TILING_PATERN_RETURN tilingPatternFill(GfxState *state,
+-             POPPLER_TILING_PATERN_GFX Object *str,
+-			       int paintType, Dict *resDict,
++                               Gfx *gfx, POPPLER_TILING_PATTERN_CATALOG Object *str,
++                               POPPLER_TILING_PATTERN_PMAT
++			       int paintType, POPPLER_TILING_PATTERN_TILING_TYPE Dict *resDict,
+ 			       double *mat, double *bbox,
+ 			       int x0, int y0, int x1, int y1,
+ 			       double xStep, double yStep);
+@@ -166,12 +169,9 @@ public:
+     virtual void setSoftMask(GfxState *state, double *bbox, GBool alpha, Function *transferFunc, GfxColor *backdropColor);
+     virtual void clearSoftMask(GfxState *state);
+ 
+-    virtual void processLink(Link *link, Catalog *catalog);
++    virtual void processLink(Link *link);
+   
+-    virtual void setVectorAntialias(GBool vaa);
+-    virtual GBool getVectorAntialias();
+ 
+-    
+ private:
+     void flushBitmap();
+     char config_extrafontdata;
+diff --git a/lib/pdf/GFXSplashOutputDev.h b/lib/pdf/GFXSplashOutputDev.h
+new file mode 100644
+index 0000000..05cf47b
+--- /dev/null
++++ b/lib/pdf/GFXSplashOutputDev.h
+@@ -0,0 +1,58 @@
++/* GFXSplashOutputDev.h
++   Output device derived from SplashOutputDev.
++
++   This file is part of swftools.
++
++   Swftools is free software; you can redistribute it and/or modify
++   it under the terms of the GNU General Public License as published by
++   the Free Software Foundation; either version 2 of the License, or
++   (at your option) any later version.
++
++   Swftools is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++   GNU General Public License for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with swftools; if not, write to the Free Software
++   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
++
++#ifndef __GFXSplashOutputDev_h__
++#define __GFXSplashOutputDev_h__
++
++#include "SplashOutputDev.h"
++
++#ifdef HAVE_POPPLER
++
++#include "../../config.h"
++#include <splash/SplashTypes.h>
++#include <splash/SplashPath.h>
++#include <splash/SplashFont.h>
++#include <splash/SplashFontFile.h>
++
++class GFXSplashOutputDev: public SplashOutputDev {
++public:
++    GFXSplashOutputDev(SplashColorMode colorModeA, int bitmapRowPadA,
++                       GBool reverseVideoA, SplashColorPtr paperColorA,
++                       GBool bitmapTopDownA = gTrue,
++                       GBool allowAntialiasA = gTrue)
++        : SplashOutputDev(colorModeA, bitmapRowPadA, reverseVideoA, paperColorA, bitmapTopDownA, allowAntialiasA)
++    {
++        needFontUpdate = gFalse;
++    }
++
++    // OutputDev:
++    virtual void restoreState(GfxState *state) { SplashOutputDev::restoreState(state); needFontUpdate = gTrue; }
++
++    virtual void updateAll(GfxState *state) { SplashOutputDev::updateAll(state); needFontUpdate = gTrue; }
++    virtual void updateFont(GfxState *state) { SplashOutputDev::updateFont(state); needFontUpdate = gTrue; }
++
++    // SplashOutputDev:
++    void doUpdateFont(GfxState *state) { SplashOutputDev::doUpdateFont(state); needFontUpdate = gFalse; }
++
++    GBool needFontUpdate;         // set when the font needs to be updated
++};
++
++#endif // HAVE_POPPLER
++
++#endif
+diff --git a/lib/pdf/InfoOutputDev.cc b/lib/pdf/InfoOutputDev.cc
+index edfb7e7..073bf99 100644
+--- a/lib/pdf/InfoOutputDev.cc
++++ b/lib/pdf/InfoOutputDev.cc
+@@ -1,7 +1,7 @@
+ #include "../../config.h"
+ #include "Object.h"
+ #include "InfoOutputDev.h"
+-#include "SplashOutputDev.h"
++#include "GFXSplashOutputDev.h"
+ #include "GfxState.h"
+ #include "CommonOutputDev.h"
+ #include "../log.h"
+@@ -90,7 +90,7 @@ static type_t fontclass_type = {
+     fontclass_destroy
+ };
+ 
+-InfoOutputDev::InfoOutputDev(XRef*xref) 
++InfoOutputDev::InfoOutputDev(PDFDoc*doc)
+ {
+     num_links = 0;
+     num_jpeg_images = 0;
+@@ -103,8 +103,8 @@ InfoOutputDev::InfoOutputDev(XRef*xref)
+     currentglyph = 0;
+     previous_was_char = 0;
+     SplashColor white = {255,255,255};
+-    splash = new SplashOutputDev(splashModeRGB8,320,0,white,0,0);
+-    splash->startDoc(xref);
++    splash = new GFXSplashOutputDev(splashModeRGB8,320,0,white,0,0);
++    splash->startDoc(INFO_OUTPUT_DEV_STARTDOC_ARG);
+     last_font = 0;
+     current_type3_font = 0;
+     fontcache = dict_new2(&fontclass_type);
+@@ -452,9 +452,10 @@ GBool InfoOutputDev::useTilingPatternFill() {return gFalse;}
+ GBool InfoOutputDev::checkPageSlice(Page *page, double hDPI, double vDPI,
+              int rotate, GBool useMediaBox, GBool crop,
+              int sliceX, int sliceY, int sliceW, int sliceH,
+-             GBool printing, Catalog *catalog,
++             GBool printing,
+              GBool (*abortCheckCbk)(void *data),
+-             void *abortCheckCbkData)
++             void *abortCheckCbkData
++             POPPLER_CHECK_PAGE_SLICE_ANNOT_CBK POPPLER_CHECK_PAGE_SLICE_ANNOT_CBK_DATA)
+ {
+     this->page = page;
+     return gTrue;
+@@ -487,7 +488,7 @@ void InfoOutputDev::endPage()
+     if(num_chars) 
+ 	average_char_size /= num_chars;
+ }
+-void InfoOutputDev::drawLink(Link *link, Catalog *catalog) 
++void InfoOutputDev::processLink(Link *link)
+ {
+     num_links++;
+ }
+@@ -568,11 +569,14 @@ void InfoOutputDev::updateFont(GfxState *state)
+ 	current_splash_font = 0;
+ 	return;
+     }
+-    GfxState* state2 = state->copy();
++    GfxState* state2 = state->copy(POPPLER_COPY_STATE_PATH);
+     state2->setPath(0);
+     state2->setCTM(1.0,0,0,1.0,0,0);
+     splash->updateCTM(state2, 0,0,0,0,0,0);
+     state2->setTextMat(1.0,0,0,1.0,0,0);
++#ifdef HAVE_POPPLER
++    font->incRefCnt();
++#endif
+     state2->setFont(font, 1024.0);
+     splash->doUpdateFont(state2);
+ 
+@@ -693,8 +697,12 @@ FontInfo* InfoOutputDev::getOrCreateFontInfo(GfxState*state)
+ 	fontinfo->font = font;
+ 	fontinfo->max_size = 0;
+ 	if(current_splash_font) {
++#ifdef HAVE_POPPLER
++            fontinfo->ascender = fontinfo->descender = 0;
++#else
+ 	    fontinfo->ascender = current_splash_font->ascender;
+ 	    fontinfo->descender = current_splash_font->descender;
++#endif
+ 	} else {
+ 	    fontinfo->ascender = fontinfo->descender = 0;
+ 	}
+@@ -778,9 +786,15 @@ void InfoOutputDev::drawChar(GfxState *state, double x, double y,
+     if(!g) {
+ 	g = fontinfo->glyphs[code] = new GlyphInfo();
+ 	g->advance_max = 0;
++#ifndef HAVE_POPPLER
+ 	current_splash_font->last_advance = -1;
++#endif
+ 	g->path = current_splash_font->getGlyphPath(code);
++#ifdef HAVE_POPPLER
++        g->advance = -1;
++#else
+ 	g->advance = current_splash_font->last_advance;
++#endif
+ 	g->unicode = 0;
+     }
+     if(uLen && ((u[0]>=32 && u[0]<g->unicode) || !g->unicode)) {
+diff --git a/lib/pdf/InfoOutputDev.h b/lib/pdf/InfoOutputDev.h
+index 07fd2e7..d423589 100644
+--- a/lib/pdf/InfoOutputDev.h
++++ b/lib/pdf/InfoOutputDev.h
+@@ -24,7 +24,7 @@
+ #include "popplercompat.h"
+ #include "GfxFont.h"
+ #include "OutputDev.h"
+-#include "SplashOutputDev.h"
++#include "GFXSplashOutputDev.h"
+ #include "Page.h"
+ 
+ #ifdef HAVE_POPPLER
+@@ -116,7 +116,7 @@ extern gfxmatrix_t gfxmatrix_from_state(GfxState*state);
+ class InfoOutputDev: public OutputDev 
+ {
+     GlyphInfo* currentglyph;
+-    SplashOutputDev*splash;
++    GFXSplashOutputDev*splash;
+     char previous_was_char;
+     Page *page;
+ 
+@@ -140,7 +140,7 @@ class InfoOutputDev: public OutputDev
+     void dumpfonts(gfxdevice_t*dev);
+     FontInfo* getFontInfo(GfxState*state);
+ 
+-    InfoOutputDev(XRef*xref);
++    InfoOutputDev(PDFDoc*doc);
+     virtual ~InfoOutputDev(); 
+     virtual GBool useTilingPatternFill();
+     virtual GBool upsideDown();
+@@ -150,12 +150,15 @@ class InfoOutputDev: public OutputDev
+     virtual GBool checkPageSlice(Page *page, double hDPI, double vDPI,
+ 			       int rotate, GBool useMediaBox, GBool crop,
+ 			       int sliceX, int sliceY, int sliceW, int sliceH,
+-			       GBool printing, Catalog *catalog,
++			       GBool printing,
+ 			       GBool (*abortCheckCbk)(void *data) = NULL,
+-			       void *abortCheckCbkData = NULL);
++                               void *abortCheckCbkData = NULL
++                               POPPLER_CHECK_PAGE_SLICE_ANNOT_CBK_H
++                               POPPLER_CHECK_PAGE_SLICE_ANNOT_CBK_DATA_H);
++
+     virtual void startPage(int pageNum, GfxState *state);
+     virtual void endPage();
+-    virtual void drawLink(Link *link, Catalog *catalog);
++    virtual void processLink(Link *link);
+     virtual void updateFont(GfxState *state);
+   
+     virtual void saveState(GfxState *state);
+diff --git a/lib/pdf/Makefile.in b/lib/pdf/Makefile.in
+index 77ff347..45232b8 100644
+--- a/lib/pdf/Makefile.in
++++ b/lib/pdf/Makefile.in
+@@ -15,7 +15,7 @@ libgfxpdf_objects = VectorGraphicOutputDev.$(O) BitmapOutputDev.$(O) FullBitmapO
+ xpdf_in_source = @xpdf_in_source@
+ 
+ xpdf_objects =  xpdf/GHash.$(O) xpdf/GList.$(O) xpdf/GString.$(O) xpdf/gmem.$(O) xpdf/gfile.$(O) \
+-		  xpdf/FoFiTrueType.$(O) xpdf/FoFiType1.$(O) xpdf/FoFiType1C.$(O) xpdf/FoFiBase.$(O) xpdf/FoFiEncodings.$(O) \
++		  xpdf/FoFiTrueType.$(O) xpdf/FoFiType1.$(O) xpdf/FoFiType1C.$(O) xpdf/FoFiBase.$(O) xpdf/FoFiEncodings.$(O) xpdf/FoFiIdentifier.$(O) \
+ 		  xpdf/OutputDev.$(O) xpdf/PDFDoc.$(O) xpdf/Error.$(O) xpdf/Stream.$(O) xpdf/Object.$(O) \
+ 		  xpdf/Decrypt.$(O) xpdf/Array.$(O) xpdf/XRef.$(O) xpdf/Dict.$(O) xpdf/Parser.$(O) \
+ 		  xpdf/Lexer.$(O) xpdf/Outline.$(O) xpdf/PDFDocEncoding.$(O) xpdf/Catalog.$(O) \
+@@ -23,7 +23,7 @@ xpdf_objects =  xpdf/GHash.$(O) xpdf/GList.$(O) xpdf/GString.$(O) xpdf/gmem.$(O)
+ 		  xpdf/JArithmeticDecoder.$(O) xpdf/Gfx.$(O) xpdf/GfxFont.$(O) xpdf/CMap.$(O) xpdf/CharCodeToUnicode.$(O) \
+ 		  xpdf/PSTokenizer.$(O) xpdf/FontEncodingTables.$(O) xpdf/BuiltinFont.$(O) xpdf/BuiltinFontTables.$(O) \
+ 		  xpdf/GfxState.$(O) xpdf/Function.$(O) xpdf/Annot.$(O) xpdf/NameToCharCode.$(O) xpdf/UnicodeMap.$(O) \
+-		  xpdf/SecurityHandler.$(O) xpdf/TextOutputDev.$(O) xpdf/UnicodeTypeTable.$(O)
++		  xpdf/SecurityHandler.$(O) xpdf/TextOutputDev.$(O) xpdf/UnicodeTypeTable.$(O) xpdf/OptionalContent.$(O)
+ 		  #xpdf/OptionalContent.$(O)
+ 
+ splash_in_source = @splash_in_source@
+@@ -49,9 +49,9 @@ VectorGraphicOutputDev.$(O): VectorGraphicOutputDev.cc VectorGraphicOutputDev.h
+ 	$(CC) -I ./ $(xpdf_include) VectorGraphicOutputDev.cc -o $@
+ CharOutputDev.$(O): CharOutputDev.cc CharOutputDev.h CommonOutputDev.h InfoOutputDev.h ../gfxpoly.h
+ 	$(CC) -I ./ $(xpdf_include) CharOutputDev.cc -o $@
+-InfoOutputDev.$(O): InfoOutputDev.cc InfoOutputDev.h
++InfoOutputDev.$(O): InfoOutputDev.cc InfoOutputDev.h GFXSplashOutputDev.h
+ 	$(CC) -I ./ $(xpdf_include) InfoOutputDev.cc -o $@
+-BitmapOutputDev.$(O): BitmapOutputDev.cc BitmapOutputDev.h CommonOutputDev.h InfoOutputDev.h
++BitmapOutputDev.$(O): BitmapOutputDev.cc BitmapOutputDev.h CommonOutputDev.h InfoOutputDev.h GFXSplashOutputDev.h
+ 	$(CC) -I ./ $(xpdf_include) BitmapOutputDev.cc -o $@
+ XMLOutputDev.$(O): XMLOutputDev.cc XMLOutputDev.h xpdf/TextOutputDev.h
+ 	$(CC) -I ./ $(xpdf_include) XMLOutputDev.cc -o $@
+@@ -65,8 +65,8 @@ pdf.$(O): pdf.cc VectorGraphicOutputDev.h CharOutputDev.h InfoOutputDev.h Common
+ XPDFOK = xpdf/Gfx.cc
+ ifeq ($(shell echo inject*xpdf.pl),inject-xpdf.pl)
+ $(XPDFOK): Makefile.in inject-xpdf.pl xpdf-*tar.gz xpdf*patch
+-	@if test xpdf-changes.patch -nt $(XPDFOK);then perl inject-xpdf.pl xpdf-3.02.tar.gz;fi
+-	@if test '!' -d xpdf;then perl inject-xpdf.pl xpdf-3.02.tar.gz;fi
++	@if test xpdf-changes.patch -nt $(XPDFOK);then perl inject-xpdf.pl xpdf-3.03.tar.gz;fi
++	@if test '!' -d xpdf;then perl inject-xpdf.pl xpdf-3.03.tar.gz;fi
+ endif
+ 
+ xpdf/UnicodeMap.$(O): xpdf/UnicodeMap.cc
+@@ -131,6 +131,8 @@ xpdf/Error.$(O): xpdf/Error.cc aconf.h
+ 	$(CC) -I ./ -I xpdf xpdf/Error.cc -o $@
+ xpdf/Stream.$(O): xpdf/Stream.cc
+ 	$(CC) -I ./ -I xpdf xpdf/Stream.cc -o $@
++xpdf/OptionalContent.$(O): xpdf/OptionalContent.cc
++	$(CC) -I ./ -I xpdf xpdf/OptionalContent.cc -o $@
+ xpdf/PDFDoc.$(O): xpdf/PDFDoc.cc
+ 	$(CC) -I ./ -I xpdf xpdf/PDFDoc.cc -o $@
+ xpdf/SecurityHandler.$(O): xpdf/SecurityHandler.cc xpdf/SecurityHandler.h
+@@ -147,6 +149,8 @@ xpdf/FoFiType1C.$(O): xpdf/FoFiType1C.cc xpdf/FoFiBase.h
+ 	$(CC) -I ./ -I xpdf xpdf/FoFiType1C.cc -o $@
+ xpdf/FoFiType1.$(O): xpdf/FoFiType1.cc xpdf/FoFiBase.h
+ 	$(CC) -I ./ -I xpdf xpdf/FoFiType1.cc -o $@
++xpdf/FoFiIdentifier.$(O): xpdf/FoFiIdentifier.cc
++	$(CC) -I ./ -I xpdf xpdf/FoFiIdentifier.cc -o $@
+ xpdf/GList.$(O): xpdf/GList.cc
+ 	$(CC) -I ./ -I xpdf xpdf/GList.cc -o $@
+ xpdf/GString.$(O): xpdf/GString.cc
+diff --git a/lib/pdf/VectorGraphicOutputDev.cc b/lib/pdf/VectorGraphicOutputDev.cc
+index 9194a02..abade59 100644
+--- a/lib/pdf/VectorGraphicOutputDev.cc
++++ b/lib/pdf/VectorGraphicOutputDev.cc
+@@ -262,7 +262,7 @@ GBool VectorGraphicOutputDev::useTilingPatternFill()
+         return gTrue;
+     return gFalse;
+ }
+-GBool VectorGraphicOutputDev::useShadedFills()
++GBool VectorGraphicOutputDev::useShadedFills(POPPLER_SHADED_FILL_TYPE)
+ {
+     infofeature("shaded fills");
+     if(config_convertgradients)
+@@ -271,9 +271,11 @@ GBool VectorGraphicOutputDev::useShadedFills()
+ }
+ 
+ POPPLER_TILING_PATERN_RETURN VectorGraphicOutputDev::tilingPatternFill(GfxState *state,
+-			       POPPLER_TILING_PATERN_GFX
++                               Gfx *gfx,
++                               POPPLER_TILING_PATTERN_CATALOG
+ 			       Object *str,
+-			       int paintType, Dict *resDict,
++                               POPPLER_TILING_PATTERN_PMAT
++			       int paintType, POPPLER_TILING_PATTERN_TILING_TYPE Dict *resDict,
+ 			       double *mat, double *bbox,
+ 			       int x0, int y0, int x1, int y1,
+ 			       double xStep, double yStep) 
+@@ -680,9 +682,9 @@ void VectorGraphicOutputDev::updateFont(GfxState*state)
+     charDev->updateFont(state);
+ }
+ 
+-void VectorGraphicOutputDev::processLink(Link *link, Catalog *catalog)
++void VectorGraphicOutputDev::processLink(Link *link)
+ {
+-    charDev->processLink(link, catalog);
++    charDev->processLink(link);
+ }
+ 
+ void VectorGraphicOutputDev::beginString(GfxState *state, GString *s) 
+@@ -837,9 +839,10 @@ void VectorGraphicOutputDev::endType3Char(GfxState *state)
+ GBool VectorGraphicOutputDev::checkPageSlice(Page *page, double hDPI, double vDPI,
+ 			   int rotate, GBool useMediaBox, GBool crop,
+ 			   int sliceX, int sliceY, int sliceW, int sliceH,
+-			   GBool printing, Catalog *catalog,
++			   GBool printing,
+ 			   GBool (*abortCheckCbk)(void *data),
+-			   void *abortCheckCbkData)
++			   void *abortCheckCbkData
++                           POPPLER_CHECK_PAGE_SLICE_ANNOT_CBK POPPLER_CHECK_PAGE_SLICE_ANNOT_CBK_DATA)
+ {
+     this->setPage(page);
+     charDev->setPage(page);
+@@ -1362,11 +1365,11 @@ void VectorGraphicOutputDev::drawGeneralImage(GfxState *state, Object *ref, Stre
+ }
+ 
+ void VectorGraphicOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str,
+-				   int width, int height, GBool invert,
++				   int width, int height, GBool invert, POPPLER_INTERPOLATE
+ 				   GBool inlineImg) 
+ {
+     if(config_textonly) {
+-	OutputDev::drawImageMask(state,ref,str,width,height,invert,inlineImg);
++        OutputDev::drawImageMask(state,ref,str,width,height,invert,POPPLER_INTERPOLATE_ARG inlineImg);
+ 	return;
+     }
+     dbg("drawImageMask %dx%d, invert=%d inline=%d", width, height, invert, inlineImg);
+@@ -1375,11 +1378,11 @@ void VectorGraphicOutputDev::drawImageMask(GfxState *state, Object *ref, Stream
+ }
+ 
+ void VectorGraphicOutputDev::drawImage(GfxState *state, Object *ref, Stream *str,
+-			 int width, int height, GfxImageColorMap *colorMap,
++			 int width, int height, GfxImageColorMap *colorMap, POPPLER_INTERPOLATE
+ 			 int *maskColors, GBool inlineImg)
+ {
+     if(config_textonly) {
+-	OutputDev::drawImage(state,ref,str,width,height,colorMap,maskColors,inlineImg);
++	OutputDev::drawImage(state,ref,str,width,height,colorMap,POPPLER_INTERPOLATE_ARG maskColors,inlineImg);
+ 	return;
+     }
+     dbg("drawImage %dx%d, %s, %s, inline=%d", width, height, 
+@@ -1398,12 +1401,12 @@ void VectorGraphicOutputDev::drawImage(GfxState *state, Object *ref, Stream *str
+   
+ void VectorGraphicOutputDev::drawMaskedImage(GfxState *state, Object *ref, Stream *str,
+ 			       int width, int height,
+-			       GfxImageColorMap *colorMap,
++			       GfxImageColorMap *colorMap, POPPLER_INTERPOLATE
+ 			       Stream *maskStr, int maskWidth, int maskHeight,
+-			       GBool maskInvert)
++			       GBool maskInvert POPPLER_MASK_INTERPOLATE)
+ {
+     if(config_textonly) {
+-	OutputDev::drawMaskedImage(state,ref,str,width,height,colorMap,maskStr,maskWidth,maskHeight,maskInvert);
++	OutputDev::drawMaskedImage(state,ref,str,width,height,colorMap,POPPLER_INTERPOLATE_ARG maskStr,maskWidth,maskHeight,maskInvert POPPLER_MASK_INTERPOLATE_ARG);
+ 	return;
+     }
+     dbg("drawMaskedImage %dx%d, %s, %dx%d mask", width, height, 
+@@ -1420,13 +1423,13 @@ void VectorGraphicOutputDev::drawMaskedImage(GfxState *state, Object *ref, Strea
+ 
+ void VectorGraphicOutputDev::drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str,
+ 				   int width, int height,
+-				   GfxImageColorMap *colorMap,
++				   GfxImageColorMap *colorMap, POPPLER_INTERPOLATE
+ 				   Stream *maskStr,
+ 				   int maskWidth, int maskHeight,
+-				   GfxImageColorMap *maskColorMap)
++				   GfxImageColorMap *maskColorMap POPPLER_MASK_INTERPOLATE)
+ {
+     if(config_textonly) {
+-	OutputDev::drawSoftMaskedImage(state,ref,str,width,height,colorMap,maskStr,maskWidth,maskHeight,maskColorMap);
++	OutputDev::drawSoftMaskedImage(state,ref,str,width,height,colorMap,POPPLER_INTERPOLATE_ARG maskStr,maskWidth,maskHeight,maskColorMap POPPLER_MASK_INTERPOLATE_ARG);
+ 	return;
+     }
+     dbg("drawSoftMaskedImage %dx%d, %s, %dx%d mask", width, height, 
+diff --git a/lib/pdf/VectorGraphicOutputDev.h b/lib/pdf/VectorGraphicOutputDev.h
+index 6e530d6..7a1e58f 100644
+--- a/lib/pdf/VectorGraphicOutputDev.h
++++ b/lib/pdf/VectorGraphicOutputDev.h
+@@ -64,9 +64,11 @@ public:
+   virtual GBool checkPageSlice(Page *page, double hDPI, double vDPI,
+ 			       int rotate, GBool useMediaBox, GBool crop,
+ 			       int sliceX, int sliceY, int sliceW, int sliceH,
+-			       GBool printing, Catalog *catalog,
++			       GBool printing,
+ 			       GBool (*abortCheckCbk)(void *data) = NULL,
+-			       void *abortCheckCbkData = NULL);
++			       void *abortCheckCbkData = NULL
++                               POPPLER_CHECK_PAGE_SLICE_ANNOT_CBK_H
++                               POPPLER_CHECK_PAGE_SLICE_ANNOT_CBK_DATA_H);
+   //----- get info about output device
+ 
+   // Does this device use upside-down coordinates?
+@@ -79,7 +81,7 @@ public:
+   //virtual GBool useShadedFills() { return gTrue; }
+ 
+   //----- link borders
+-  virtual void processLink(Link *link, Catalog *catalog);
++  virtual void processLink(Link *link);
+   virtual void setDefaultCTM(double *ctm);
+ 
+   //----- save/restore graphics state
+@@ -103,12 +105,14 @@ public:
+   
+   //----- shaded fills
+   virtual GBool useTilingPatternFill();
+-  virtual GBool useShadedFills();
++  virtual GBool useShadedFills(POPPLER_SHADED_FILL_TYPE);
+ 
+ virtual POPPLER_TILING_PATERN_RETURN tilingPatternFill(GfxState *state,
+-			     POPPLER_TILING_PATERN_GFX
++                             Gfx *gfx,
++                             POPPLER_TILING_PATTERN_CATALOG
+ 			     Object *str,
+-			     int paintType, Dict *resDict,
++                             POPPLER_TILING_PATTERN_PMAT
++			     int paintType, POPPLER_TILING_PATTERN_TILING_TYPE Dict *resDict,
+ 			     double *mat, double *bbox,
+ 			     int x0, int y0, int x1, int y1,
+ 			     double xStep, double yStep);
+@@ -128,22 +132,22 @@ virtual POPPLER_TILING_PATERN_RETURN tilingPatternFill(GfxState *state,
+ 
+   //----- image drawing
+   virtual void drawImageMask(GfxState *state, Object *ref, Stream *str,
+-			     int width, int height, GBool invert,
++			     int width, int height, GBool invert, POPPLER_INTERPOLATE
+ 			     GBool inlineImg);
+   virtual void drawImage(GfxState *state, Object *ref, Stream *str,
+-			 int width, int height, GfxImageColorMap *colorMap,
++			 int width, int height, GfxImageColorMap *colorMap, POPPLER_INTERPOLATE
+ 			 int *maskColors, GBool inlineImg);
+   virtual void drawMaskedImage(GfxState *state, Object *ref, Stream *str,
+ 			       int width, int height,
+-			       GfxImageColorMap *colorMap,
++			       GfxImageColorMap *colorMap, POPPLER_INTERPOLATE
+ 			       Stream *maskStr, int maskWidth, int maskHeight,
+-			       GBool maskInvert);
++			       GBool maskInvert POPPLER_MASK_INTERPOLATE);
+   virtual void drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str,
+ 				   int width, int height,
+-				   GfxImageColorMap *colorMap,
++				   GfxImageColorMap *colorMap, POPPLER_INTERPOLATE
+ 				   Stream *maskStr,
+ 				   int maskWidth, int maskHeight,
+-				   GfxImageColorMap *maskColorMap);
++				   GfxImageColorMap *maskColorMap POPPLER_MASK_INTERPOLATE);
+ 
+   //----- transparency groups and soft masks (xpdf >= ~ 3.01.16)
+   virtual void beginTransparencyGroup(GfxState *state, double *bbox,
+diff --git a/lib/pdf/XMLOutputDev.cc b/lib/pdf/XMLOutputDev.cc
+index 06aad02..fb3aee1 100644
+--- a/lib/pdf/XMLOutputDev.cc
++++ b/lib/pdf/XMLOutputDev.cc
+@@ -27,7 +27,7 @@
+ #endif
+ 
+ XMLOutputDev::XMLOutputDev(char*filename)
+-:TextOutputDev(mktmpname(0), false, false, false)
++:TextOutputDev(mktmpname(0), false, 0, false, false)
+ {
+   out = fopen(filename, "wb");
+   if(!out) {
+#diff --git a/lib/pdf/inject-xpdf.pl b/lib/pdf/inject-xpdf.pl
+#index 386dc12..f0e2fc1 100755
+#--- a/lib/pdf/inject-xpdf.pl
+#+++ b/lib/pdf/inject-xpdf.pl
+#@@ -59,7 +59,7 @@ fi
+# if test "x\$VERSION" = "xstable";then
+#     echo "Switching to stable version"
+#     rm -f xpdf
+#-    ln -s xpdf-3.02 xpdf
+#+    ln -s xpdf-3.03 xpdf
+# elif test "x\$VERSION" = "xlatest";then
+#     echo "Switching to latest version"
+#     rm -f xpdf
+diff --git a/lib/pdf/pdf.cc b/lib/pdf/pdf.cc
+index 1e668a0..61165fb 100644
+--- a/lib/pdf/pdf.cc
++++ b/lib/pdf/pdf.cc
+@@ -16,6 +16,7 @@
+ #include "FullBitmapOutputDev.h"
+ #include "BitmapOutputDev.h"
+ #include "VectorGraphicOutputDev.h"
++#include "popplercompat.h"
+ #include "../mem.h"
+ #include "pdf.h"
+ #define NO_ARGPARSER
+@@ -533,7 +534,7 @@ static gfxdocument_t*pdf_open(gfxsource_t*src, const char*filename)
+ 	msg("<notice> Rendering at %f DPI. (Page width at 72 DPI: %f, target width: %d)", zoom, width_before, zoomtowidth);
+     }
+ 
+-    i->info = new InfoOutputDev(i->doc->getXRef());
++    i->info = new InfoOutputDev(i->doc);
+     int t;
+     i->pages = (pdf_page_info_t*)malloc(sizeof(pdf_page_info_t)*pdf_doc->num_pages);
+     memset(i->pages,0,sizeof(pdf_page_info_t)*pdf_doc->num_pages);
+diff --git a/lib/pdf/popplercompat.h b/lib/pdf/popplercompat.h
+index 8303369..9727733 100644
+--- a/lib/pdf/popplercompat.h
++++ b/lib/pdf/popplercompat.h
+@@ -17,17 +17,8 @@
+ 
+ #ifdef HAVE_POPPLER
+   #define POPPLER_TILING_PATERN_RETURN GBool
+-  #define POPPLER_TILING_PATERN_GFX
+-  #define POPPLER_TILING_PATERN_GFX_ARG
+ #else
+   #define POPPLER_TILING_PATERN_RETURN void
+-  #if (xpdfMajorVersion*10000 + xpdfMinorVersion*100 + xpdfUpdateVersion) < 30207
+-    #define POPPLER_TILING_PATERN_GFX
+-    #define POPPLER_TILING_PATERN_GFX_ARG
+-  #else
+-    #define POPPLER_TILING_PATERN_GFX Gfx *gfx,
+-    #define POPPLER_TILING_PATERN_GFX_ARG gfx,
+-  #endif
+ #endif
+ 
+ #ifdef HAVE_POPPLER
+@@ -43,6 +34,74 @@ char* mktmpname(char*ptr);
+ #endif
+ 
+ #ifdef HAVE_POPPLER
++#define AnnotLink Link
++#endif
++
++#ifdef HAVE_POPPLER
++  #define POPPLER_STARTDOC_ARG this->doc
++  #define INFO_OUTPUT_DEV_STARTDOC_ARG doc
++#else
++  #define POPPLER_STARTDOC_ARG this->xref
++  #define INFO_OUTPUT_DEV_STARTDOC_ARG doc->getXRef()
++#endif
++
++#ifdef HAVE_POPPLER
++  #define POPPLER_SHADED_FILL_TYPE int type
++  #define POPPLER_SHADED_FILL_TYPE_ARG type
++#else
++  #define POPPLER_SHADED_FILL_TYPE
++  #define POPPLER_SHADED_FILL_TYPE_ARG
++#endif
++
++#ifdef HAVE_POPPLER
++  #define POPPLER_TILING_PATTERN_CATALOG Catalog *cat,
++  #define POPPLER_TILING_PATTERN_CATALOG_ARG cat,
++  #define POPPLER_TILING_PATTERN_PMAT double *pmat,
++  #define POPPLER_TILING_PATTERN_PMAT_ARG pmat,
++  #define POPPLER_TILING_PATTERN_TILING_TYPE int tilingType,
++  #define POPPLER_TILING_PATTERN_TILING_TYPE_ARG tilingType,
++#else
++  #define POPPLER_TILING_PATTERN_CATALOG
++  #define POPPLER_TILING_PATTERN_CATALOG_ARG
++  #define POPPLER_TILING_PATTERN_PMAT
++  #define POPPLER_TILING_PATTERN_PMAT_ARG
++  #define POPPLER_TILING_PATTERN_TILING_TYPE
++  #define POPPLER_TILING_PATTERN_TILING_TYPE_ARG
++#endif
++
++#ifdef HAVE_POPPLER
++  #define POPPLER_GET_GLYPH_ARGS , x0, y0, &clip, &clipRes
++#else
++  #define POPPLER_GET_GLYPH_ARGS
++#endif
++
++#ifndef HAVE_POPPLER
++  #define GFXSplashOutputDev SplashOutputDev
++#endif
++
++#ifdef HAVE_POPPLER
++  #define POPPLER_CHECK_PAGE_SLICE_ANNOT_CBK_H , GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data) = NULL
++  #define POPPLER_CHECK_PAGE_SLICE_ANNOT_CBK , GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data)
++  #define POPPLER_CHECK_PAGE_SLICE_ANNOT_CBK_DATA_H , void *annotDisplayDecideCbkData = NULL
++  #define POPPLER_CHECK_PAGE_SLICE_ANNOT_CBK_DATA , void *annotDisplayDecideCbkData
++#else
++  #define POPPLER_CHECK_PAGE_SLICE_ANNOT_CBK_H
++  #define POPPLER_CHECK_PAGE_SLICE_ANNOT_CBK
++  #define POPPLER_CHECK_PAGE_SLICE_ANNOT_CBK_DATA_H
++  #define POPPLER_CHECK_PAGE_SLICE_ANNOT_CBK_DATA
++#endif
++
++#ifdef HAVE_POPPLER
++  #define POPPLER_COPY_STATE_PATH gTrue
++#else
++  #define POPPLER_COPY_STATE_PATH gFalse
++#endif
++
++#ifdef HAVE_POPPLER
++  #define GFXGlobalParams GlobalParams
++#endif
++
++#ifdef HAVE_POPPLER
+   #include <goo/GooString.h>
+   #include <goo/gfile.h>
+ #else
+#diff --git a/lib/pdf/xpdf-3.02.tar.gz b/lib/pdf/xpdf-3.02.tar.gz
+#deleted file mode 100644
+#index 1411a87..0000000
+#Binary files a/lib/pdf/xpdf-3.02.tar.gz and /dev/null differ
+#diff --git a/lib/pdf/xpdf-3.03.tar.gz b/lib/pdf/xpdf-3.03.tar.gz
+#new file mode 100644
+#index 0000000..488e9bd
+#Binary files /dev/null and b/lib/pdf/xpdf-3.03.tar.gz differ
+#diff --git a/lib/pdf/xpdf-changes.patch b/lib/pdf/xpdf-changes.patch
+#index 23d19a4..ca547b7 100644
+#--- a/lib/pdf/xpdf-changes.patch
+#+++ b/lib/pdf/xpdf-changes.patch
+# *** deleted ***
diff --git a/swftools-poppler2.patch b/swftools-poppler2.patch
new file mode 100644
index 0000000..f308a1e
--- /dev/null
+++ b/swftools-poppler2.patch
@@ -0,0 +1,70 @@
+--- swftools-0.9.2/lib/pdf/BitmapOutputDev.cc.orig	2014-06-21 08:53:04.062950171 +0200
++++ swftools-0.9.2/lib/pdf/BitmapOutputDev.cc	2014-06-21 09:14:39.449589839 +0200
+@@ -998,11 +998,11 @@
+ 
+ void BitmapOutputDev::beginPage(GfxState *state, int pageNum)
+ {
+-    rgbdev->startPage(pageNum, state);
+-    boolpolydev->startPage(pageNum, state);
+-    booltextdev->startPage(pageNum, state);
+-    clip0dev->startPage(pageNum, state);
+-    clip1dev->startPage(pageNum, state);
++    rgbdev->startPage(pageNum, state, NULL);
++    boolpolydev->startPage(pageNum, state, NULL);
++    booltextdev->startPage(pageNum, state, NULL);
++    clip0dev->startPage(pageNum, state, NULL);
++    clip1dev->startPage(pageNum, state, NULL);
+     gfxdev->startPage(pageNum, state);
+ 
+     boolpolybitmap = boolpolydev->getBitmap();
+--- swftools-0.9.2/lib/pdf/FullBitmapOutputDev.cc.orig	2014-06-21 08:53:04.066283501 +0200
++++ swftools-0.9.2/lib/pdf/FullBitmapOutputDev.cc	2014-06-21 09:15:29.096255472 +0200
+@@ -192,7 +192,7 @@
+ void FullBitmapOutputDev::beginPage(GfxState *state, int pageNum)
+ {
+     msg("<debug> startPage");
+-    rgbdev->startPage(pageNum, state);
++    rgbdev->startPage(pageNum, state, NULL);
+     gfxdev->startPage(pageNum, state);
+ }
+ 
+--- swftools-0.9.2/lib/pdf/XMLOutputDev.cc.orig	2014-06-21 08:53:04.072950171 +0200
++++ swftools-0.9.2/lib/pdf/XMLOutputDev.cc	2014-06-21 09:31:00.109569398 +0200
+@@ -46,7 +46,7 @@
+ 
+ void XMLOutputDev::startPage(int pageNum, GfxState *state)
+ {
+-    TextOutputDev::startPage(pageNum, state);
++    TextOutputDev::startPage(pageNum, state, NULL);
+     fprintf(out, "<page nr=\"%d\" width=\"%.0f\" height=\"%.0f\">\n", pageNum,
+ 	state->getPageWidth(), state->getPageHeight());
+ }
+@@ -67,7 +67,7 @@
+     double color_b = -1;
+     for(i=0;i<len;i++) {
+ 	TextWord*word = list->get(i);
+-	GString*newfont = word->getFontName();
++	GString*newfont = word->getFontName(0);
+ 	double newsize = word->getFontSize();
+ #ifdef HAVE_POPPLER
+ 	double newbase = word->getBaseline();
+@@ -87,7 +87,7 @@
+ 	   newcolor_b != color_b
+ 	   ) 
+ 	{
+-	    TextFontInfo*info = word->getFontInfo();
++	    TextFontInfo*info = word->getFontInfo(0);
+ 	    if(textTag)
+ 		fprintf(out, "</t>\n");
+ 	    textTag = 1;
+--- swftools-0.9.2/lib/pdf/pdf.cc.orig	2014-06-21 10:48:46.916138792 +0200
++++ swftools-0.9.2/lib/pdf/pdf.cc	2014-06-21 10:48:54.919471960 +0200
+@@ -375,7 +375,7 @@
+     else if(!strcmp(name, "creationdate")) return getInfoDate(i->docinfo.getDict(), "CreationDate");
+     else if(!strcmp(name, "moddate")) return getInfoDate(i->docinfo.getDict(), "ModDate");
+     else if(!strcmp(name, "linearized")) return strdup(i->doc->isLinearized() ? "yes" : "no");
+-    else if(!strcmp(name, "tagged")) return strdup(i->doc->getStructTreeRoot()->isDict() ? "yes" : "no");
++    else if(!strcmp(name, "tagged")) return strdup((i->doc->getCatalog()->getMarkInfo() & Catalog::markInfoMarked) ? "yes" : "no");
+     else if(!strcmp(name, "encrypted")) return strdup(i->doc->isEncrypted() ? "yes" : "no");
+     else if(!strcmp(name, "oktoprint")) return strdup(i->doc->okToPrint() ? "yes" : "no");
+     else if(!strcmp(name, "oktocopy")) return strdup(i->doc->okToCopy() ? "yes" : "no");
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/swftools.git/commitdiff/2c2efdade29a57dddfa7505b951dbb1a6ca6881d



More information about the pld-cvs-commit mailing list