Release 0.26.1
        core:
         * Use field value V for radio buttons. Bug #75979
         * Fix extraction of text in some files. Bug #78145
         * Only add annotations of the current page when splitting. Bug #77549

        build system:
         * autoconf: Fix libopenjpeg 1.5 detection on some systems. Bug #78389

        glib:
         * Fix multiple definition of PopplerTextSpan

Release 0.26.0
        qt4:
         * Fix mismatched boolean logic in TextAnnotation::setInplaceIntent

        qt5:
         * Fix mismatched boolean logic in TextAnnotation::setInplaceIntent

        core:
         * Very small code cleanup

        cpp:
         * Very small code cleanup

Release 0.25.3
        core:
         * Fix crashes on broken files
         * Avoid MinGW/Cygwin warnings due to redefinition of NOMINMAX
         * Fix some small memory leaks

        qt5:
         * Fix some kinds of OCG models
         * Cleanup some deprecated methods

        glib:
         * Fix the first coord of the quadrilateral in create_poppler_quads_from_annot_quads(). Bug #76504

        utils:
         * pdftohtml: Fix typo in manpage

        qt4:
         * Fix some kinds of OCG models

Release 0.25.2
        core:
         * Tagged-PDF support
         * Open some broken files. Bug #75232
         * Fix crashes on broken files
         * Fix regression parsing some broken files. KDE Bug #329600
         * Improve compilation under Win 8 with Visual Studio 2012. Bug #73111
         * PSOutputDev: Ensure paper size takes into account rotation. Bug #72312
         * PSOutputDev: Fix DocumentMedia/Page/Media/PageBBox DSC comments
         * PSOutputDev: Use crop box as page size
         * PSOutputDev: Remove origpagesizes mode and make -origpagesizes an alias for -paper match
         * PSOutputDev: Only change paper size when different to previous size
         * PSOutputDev: Ensure there is always a page size in the output
         * PSOutputDev: Fix regression when creating level1 PS. Bug #75241 
         * CairoOutputDev: Clip to crop box. Gnome Bug #649886
         * Splash: Blend usage in PDF with spot colors casue random output. Bug #74883
         * Splash: Fix off by one that caused crash in a file. Bug #76387
         * Make sure number of least objects in hints table is valid. Bug #74741
         * Limit numeric parsing of character names. Bug #38456

        glib:
         * Tagged-PDF support
         * Annotation improvements
         * Install error callback. Bug #73269
         * Fix gobject-introspection warnings
         * demo: Fix performance in text markup annotations
         * Increase gtk3 dependency

        qt4:
         * Improve naming of internal export/import macros
         * Add GCC visibility export attributes
         * Expose document-supplied text direction

        qt5:
         * Improve naming of internal export/import macros
         * Add GCC visibility export attributes
         * Expose document-supplied text direction

        utils: 
         * pdftocairo: Ensure page size and crop box works the same as pdftops
         * Fix TIFF writting in Windows. Bug #75969 

        buildsystem:
         * Learn about automake 1.14
         * Do not define -ansi. Bug #72499
         * cmake: Install JpegWriter.h depending on libjpeg
         * cmake: Use c99 for the c compiler

Release 0.25.1
        core:
         * GooString format: Added some tests + improved documentation
         * GooString format: fixed bug with printing LLONG_MIN
         * regression test improvements

        qt4:
         * Arthur backend font rendering improvements
         * test program to save to file

        qt5:
         * Arthur backend font rendering improvements
         * Improve detection of Qt5 moc. Bug #72744
         * test program to save to file

        utils:
         * pdfunite: Work even if there's a single file given
         * pdfunite: do not lose fonts when merging some files

Release 0.25.0
        core:
         * Annotation improvements
         * Tagged PDF work
         * Improve speed on some files using ICC color space
         * Use ICC profile in OutputIntents. Bug #34053
         * Limit use of ZapfDingbats character names. Bug #60243
         * Splash: correction for knockout transparency groups
         * regression test improvements

        utils:
         * pdftoppm: Added thinlinemode option setting
         * pdfinfo: Indicate if pdf contains javascript
         * pdfinfo: Add option to print out javascript
         * pdfimages: Print size, ratio, and ppi
         * pdfimages: More image output format support
         * pdfseparate: allow zero-padded pagespecs

        glib:
         * Annotation improvements
         * Add API to get text, text layout and text attributes for a given area
         * demo improvements

Release 0.24.5
        core:
         * Fix crash due to wrong formatting of error message. KDE Bug #328511

Release 0.24.4
        core:
         * Fix regression in broken endstream detection. Bug #70854
         * Catalog: sort entries of NameTrees to make sure lookup works. Bug #26049
         * Don't infinite loop if reading from GooFile::read fails. Bug #71835

        utils:
         * pdftotext: Do not close stdout. Bug #71639
         * pdftotext: Silence warning for may be used uninitialized variable. Bug #71640
         * pdftotext: Escape the text of the xml headers
         * Warn the user if he provides a wrong range

        qt4:
         * Fix typo in xml API. Bug #71643

        qt5:
         * Fix typo in xml API. Bug #71643

Release 0.24.3
        core:
         * PSOutputDev: Fix PFB font embedding. Bug #69717
         * CairoOutputDev: Do not set an invalid matrix in drawImage(). Bug #70085 

        qt4:
         * Don't crash if getXRef()->copy() fails

        qt5:
         * Don't crash if getXRef()->copy() fails

        utils:
         * pdfseparate: Allow only one %d in the filename. Bug #69434
        
Release 0.24.2
        core:
         * Windows: Fix CreateFile fails with ERROR_SHARING_VIOLATION. Bug #69597

        utils:
         * pdfseparate: improve the path building
         * pdftocairo: check file opening failure in beginDocument()
        
Release 0.24.1
        core:
         * SplashOutputDev: use getRGBLine images if available. Bug #66928
         * SplashOutputDev: Don't copy bitmap if we don't need to.
         * PSOutputDev: Fix regression in -eps -level1sep rendering. Bug #68321
         * Fix crash in malformed file 1026.asan.0.42.pdf
         * use copyString instead of strdup where memory is freed with gfree. Bug #67666

        utils:
         * pdfdetach: don't mention xpdfrc
         * pdftotext: Fix -bbox with stdin as input. Bug #45163
         * pdftohtml: Fix jpeg image export. Bug #48270
         * pdfimages: Fix typos in man page

        glib:
         * demo: Remove GTK_DISABLE_DEPRECATED compilation flag

        qt4:
         * Fix small typo in documentation

        qt5:
         * Fix small typo in documentation

Release 0.24.0
        core:
         * TextOutputDev: Do not draw ligatures more than once when selected. Bug #9001
         * PSOutputDev: Make some pdftops conversions much faster
         * PSOutputDev: Initialize t3FillColorOnly
         * SplashOutputDev: Fallback to 1x1 bitmap if we fail to create the real size

Release 0.23.4
        core:
         * TextOutputDev: clip the selected text rendering to the selection box. Bug #66983
         * CairoImageOutputDev: Fix the bounding box of saved images

        build system:
         * Improve linking against pthreads

Release 0.23.3
        core:
         * Annotation improvements
         * Fix crashes on malformed files
         * TextSelectionPainter: Draw glyphs after selection background
         * TextOutputDev: add a method to TextPage to get the selection as a list of words

        qt5:
         * Initial Qt5 port

        qt4:
         * Windows compile fixes
         * Demo: Allow the choose the page rotation

        build system:
         * Fix mingw build
         * Minor autotools fixes

Release 0.23.2
        core:
         * SplashOutputDev: Speed-up some tiling on a 10x factor
         * Improve caching of lcms2 ICC color profiles
         * Put some private classes in an anonymous namespace

        qt4:
         * Add a thread stresser tool

        build system:
         * Fix mingw build

Release 0.23.1
        core:
         * XRef stream writing: Write 32-bit offsets when possible
         * Fix splashModeBGR8 rendering (Bug #64381)

        glib:
         * Do not use deprecated gtk_scrolled_window_add_with_viewport() (Bug #64683)

        build system:
         * Fix Large file support when using cmake

Release 0.23.0
        core:
         * Make rendering thread safe
         * Large file support
         * Implement Crypt filter (Bug #62800)
         * Fix endstream detection (Bug #62985)
         * CairoOutputDev: support uncolored tiling patterns (Bug #59179)
         * SplashOutputDev: Introduce Thin Line mode support (Bug #37347)

        qt4:
         * Expose Thin Line mode support

Release 0.22.4
        core:
         * Always consider a softmask transfer function (Bug #63587)
         * Fix crash on malformed files (Bug #63190)
         * Splash: Fix compilation with fixed point mode enabled

        utils:
         * Fix crash on some files (Bug #63909)

        qt4:
         * Fix name decoding of some attachments (KDE Bug #307786)

        build system:
         * Fix compilation with mingw-w64 compiler

Release 0.22.3
        core:
         * Check order bounding box values in tiling pattern (Bug #62369)
         * CairoImageOutputDev: Don't change image interpolation when printing (Bug #62418)
         * TextOutputDev: Set text matrix when painting selection (Bug #61042)
         * Only write the file once when saving (Bug #62739)
         * Fix for complete rewrites in repaired files
         * Fixlet regarding spec interpretation for Link Zoom value
         * Fix typos in man pages
         * Fix compile when not using libjpeg

        glib:
         * Always start from the beginning when starting a new search on a page (Bug #59972)

        qt4:
         * Fix crash in files with LinkRendition (KDE Bug #317710)

        build system:
         * Small cmake improvements

Release 0.22.2
        core:
         * Correct rendering of underline and strike out annotations (Bug #61518)
         * Workaround broken jpeg stream definitions (Bug #61994)
         * SplashOutputDev: Restore CTM on early exits (Bug #61413)
         * SplashOutputDev: Make sure we don't try to paint in x < 0 (KDE Bug #315432)
         * Fix latin page labels. (Bug #61034)
         * Fix compilation with jpeglib9
         * Fix minor valgrind warning

        utils:
         * pdfimages: Fix extraction of some images (Bug #61168)

        build system:
         * Fix the build with automake-1.13

Release 0.22.1
        core:
         * Fix crash in some pdf files when extracting text (Bug #59561)
         * Fix crashes in wrongly formed files
         * Fix wrong warning when opening some files (Bug #58966)

        build system:
         * Improve autoconf jpeglib.h detection (Bug #59186)

Release 0.22.0
        core:
         * Fix crash in invalid files that define a <= 0 bits per image value
         * Fix a few issues in JPX decoding when not using OpenJPEG
         * TextOutputDev: Use page size for max value in TextPage::visitSelection
         * Fix typo in error message

        utils:
         * Fix pdfunite regression (Bug #58569)
         * Demo fixes and improvements

        misc:
         * pdf-inspector improvements

Release 0.21.4
        core:
         * SplashOutputDev: Fix crash when rendering in monochrome mode
         * SplashOutputDev: Fix line widths in monochrome mode (Bug #57294)
         * PSOutputDev: Fix crop on EPS conversion (Bug #30692)
         * TextOutputDev: Fix minor logic mistake
         * Fix assert on some malformed files (Bug #58257)
         * Move #include "jpeglib.h" into .cc file (Bug #57687)
         * Filter text that may end up being written to the shell
         * Fix windows compile warnings

        glib:
         * Add poppler_annot_set_flags (Bug #58015)
         * Demo fixes and improvements

        qt4:
         * Fix check_lexer on 32-bit systems

Release 0.21.3
        core:
         * Splash: Implement bilinear image scaling (Bug #22138)
         * CairoOutputDev: Update fill and stroke color in startPage (Bug #54526)
         * Fix GooString::insert()
         * Allow large chars in TextPage
         * Fix crash on ActualText::end
         * Don't use memcpy to copy classes
         * Fix warnings

        glib:
         * Check if words end with spaces (Bug #54504)
         * Ensure text is only computed on first render
         * Fix warnings while generating introspection file
         * Fix returns tag in PopplerAttachmentSaveFunc api doc
         * Minor demo fixes

Release 0.21.2
        core:
         * CairoOutputDev: make drawImage work with images > 32767 in width/height (Bug #56858)
         * CairoOutputDev: Fix soft mask when image resolution != smask resolution (Bug #57070)
         * CairoOutputDev: Fix crash in CairoImageOutputDev with setSoftMaskFromImageMask (Bug #57067)
         * Remove a check on fonts that we don't need (Bug #56753)
         * Misc code cleanups

        utils:
         * pdftocairo: Add tiff output support (Bug #57006)
         * pdfunite: Fix -v (Bug #56817)
         * Misc code cleanups

Release 0.21.1
        core:
         * Annotation improvements
         * Form improvements
         * CairoImageOutputDev: Support parameterized Gouraud shading (Bug #56463)
         * UTF validation fixes
         * Do not call drawing routines if we don't need non text (Bug #54617)
         * Fix Memory leak in CharCodeToUnicode (Bug #54702)

        qt4:
         * Make LinkRendition properties available (Bug #55378)
         * Accessors for FormWidgetChoice::editChoice
         * Implement overprint

Release 0.21.0
        core:
         * Support the modification of files with Encrypt
         * Annotation improvements
         * Form improvements
         * Splash: Implement DeviceN support
         * Splash: Avoid bogus memory error for tilingPattern
         * TextOutputDev: Allow multiple fonts in a TextWord
         * Kill the concept of base dir
         * PSOutputDev: Always write HiResBoundingBox (Bug #53159)
         * Convert UTF-16 to UCS-4 when reading toUnicode cmap
         * GooString formatting: add support for uppercase hexadecimal
         * Use error() instead of fprintf(stderr, ...) in Annot::layoutText
         * poppler-config.h: remove WITH_FONTCONFIGURATION_* macros

        glib:
         * Annotation improvements
         * Add poppler_page_remove_annot()
         * Add poppler_document_new_from_stream
         * Add poppler_document_new_from_gfile
         * Add poppler_page_find_text_with_options (Bug #2951)
         * Demo improvements
         * Port tests and demo to GTK+3

        qt4:
         * Add accessor methods for movie poster information
         * Make 'additional actions' available in Annotation API (Bug #53589)
         * Add whole-page search method to Poppler::Page
         * Small changes in tests

        utils:
         * pdftohtml: Make the output more xhtml compliant
         * pdftohtml: Add -fontfullname. (Bug #49872)
         * pdftohtml: Do not invoke gs anymore

        build system:
         * Add the possibility of using lcms1 even if lcms2 is installed
         * Remove extra fontconfig CFLAGS and LIBS

Release 0.20.5
        core:
         * Fix crashes in malformed documents
         * Fix parsing of very big numbers
         * Splash: Do not render invalid font outlines (Bug #55573)
         * Check for NaN in TextPage::addChar

        build system:
         * Fix build using mingw64 with winpthread
         * autotools: Fix compilation when lcms is on non standard locations (Bug #55326)
         * Support automake-1.12 (Bug #55541)

        glib:
         * Chain up finalize to the parent class (Bug #55521)

Release 0.20.4
        core:
         * Improvements regarding embedded file handling. (KDE Bug #306008)
         * Fix opening some broken files (Bug #14303)
         * Fix memory leaks
         * Fix crashes in various broken files
         * Refine warning to only complain when really needed
         * Remove function declared but not implemented
         * Remove execution permissions from a header file

        qt4:
         * Improvements regarding embedded file handling. (KDE Bug #306008)

Release 0.20.3
        core:
         * If NULL, NULL fails as password try EMPTY, EMPTY before failing (Bug #3498)
         * SplashOutputDev: Fix bogus memory allocation size in Splash::arbitraryTransformImage (Bug #49523)
         * SplashOutputDev: Fix segfault when scaleImage returns NULL (Bug #52488)
         * SplashOutputDev: Blend mode enhancements for CMYK
         * PSOutputDev: Fix conversion when creating multiple strips (Bug #51982)
         * PSOutputDev: Fix Bitmaps in level2sep or level3sep (Bug #52384)
         * PSOutputDev: Fix DeviceN images with alternate Lab colorspace in level 3 PostScript (Bug #51822)
         * PSOutputDev: Make sure xScale and yScale are always initialized (Bug #52215)
         * Unify poppler-config.h includes in core "installed" headers (Bug #52193)
         * Replace c++ style includes with c style ones (Bug #52426)

        utils:
         * pdfseparate: Return 0 on success
        
Release 0.20.2
        core:
         * Fix compilation on Windows
         * Copy resources content defined in the pages dict on save (Bug #51369)
         * PSOutputDev: Correct %%DocumentCustomColors (Bug #51479)
         * PSOutputDev: Fix handling of DeviceN images in level 3 PostScript (Bug #51548)
         * Fix crash in malformed documents
        
        qt4:
         * Do not hang on malformed /Annots objects (Bug #51361)

Release 0.20.1
        core:
         * Remove unnecesary transparency group handling in splash (Bug #13487)
         * Include substitute font name in system font cache (Bug #49826)
         * Fix logic on SplashBitmap::writeImgFile
         * PSOutputDev: use setoverprintmode only if rip knows it
         * Fix crash in malformed documents
        
        qt4:
         * Make TextAnnotation constructor public
         * Fix saving of default TextAnnotation to xml
         * Keep page rotation into account when normalizing annotation coords
        
        glib:
         * Fix memory leak when document fails to load
         * Make sure password is always converted to latin1
         * Fix typo in documentation

        build system:
         * Distribute cmake/modules/FindLCMS2.cmake (Bug #49818)

        utils:
         * pdftohtml: Determine if font is bold or italic based on FontDescriptor (Bug #49758)
         * pdfseparate: Syntax fixes in the man page

Release 0.20.0
        core:
         * Reconstruct xref table if xref needed but missing (Bug #40719)
         * Fix getFullyQualifiedName with unicode field names (Bug #49256)
         * SplashOutputDev: Fix rendering of knockout groups (Bug #12185)
         * SplashOutputDev: Fix cmyk transfer bug (Bug #49341)
         * Fix crashes in broken documents
         * Bring back the Outputdev::begin/endMarkedContent virtuals
         * Build fixes
        
        qt4:
         * Convert propertly unicode encoded field qualified names
        
        glib:
         * glib: Use delete[] to free array allocated with new[] (Bug #48447)

Release 0.19.4
        core:
         * Annotation improvements
         * More compatible file writing
         * SplashOutputDev: Fix slow rendering of pdf with a lot of image masks in pattern colorspace
         * Fix crashes in broken documents
         * Fix spurious warning messages
        
        utils:
         * pdftotext: Add missing section heading to man page
         * pdftohtml: Fix crash when the destination file does not exist
        
        build system:
         * autoconf: Do not append "-ansi" to CXXFLAG, if "-std=XXX" is already specified.
         * autoconf: Do not clear FREETYPE_CFLAGS, FREETYPE_LIBS before PKG_CHECK_MODULES()
         * autoconf: Copying graphics library CFLAGS to cpp frontend Makefile.am

Release 0.19.3
        core:
         * Annotation improvements
         * CairoOutputDev: Fix regression caused by mesh gradients
         * CairoOutputDev: Use correct userfont font bbox (Bug #48399)
         * CairoOutputDev: Fix paintTransparencyGroup when both mask and fill opacity are required (Bug #48453)
         * CairoOutputDev: Ensure 0 width lines with stroke_adjust are aligned
         * CairoOutputDev: Only align stroke coords for horizontal and vertical lines (Bug #48318)
         * CairoOutputDev: Fix stroke pattern with transparency group (Bug #48468)
         * Fix crash in JBIG2Stream decoding
         * Fix memory leak when looking for a substitute font
         * Fix page labels to not have a null character at the end
         * Fix Splash CMYK merge error
         * ttc<->ttf fallback is expected for CJK font list in for Windows (Bug #48046)
        
        qt4:
         * Annotations can now be modified
         * Annotations can now be added
         * Annotations can now be removed

        utils:
         * pdftohtml: Add producer and version to xml output
         * pdftohtml: Fix the mask inversion for PNG
         
Release 0.19.2
        core:
         * Annotation improvements
         * CairoOutputDev: update cairo mesh pattern to 1.12 api
         * CairoOutputDev: fix some transparency issues (Bug #47739)
         * CairoOutputDev: Fix regression in some shadings
         * TextOutputDev: Don't add newline to last line extracted by TextSelectionDumper (Bug #45955)
         * CJK font improvements
         * Improve font matching for non embedded fonts
         * Fix regression regarding forceRasterize in PSOutputDev
         * Fix typos glyph names in truetype 'post' table standard mac ordering
        
        build system:
         * minor cmake fixes
         * misc autoconf fixes
         * POPPLER_VERSION is now wrapped in quotes

        utils:
         * pdftohtml: extract mask images even if they are not JPEG (Bug #47186)
         * pdftohtml: Flip images if they need to (Bug #32340)
         
Release 0.19.1
        core:
         * Improve CJK suport in PSOutputDev
         * CJK substitute implementation on WIndows platforms
         * Do not crash on malformed files with 0 bits in the color map of an image
         * Fix regression in some PSOutputDev array sizing
         * Improvements to Annotation editing
         * Fix logic error in Rendition parsing code (Bug #47063)
         * Minor API changes to SplashOutputDev (Bug #46622)
         * Fix mismatch in some functions declarations
         * Update poppler copyright year
        
        utils:
         * pdftops: Fix -passfonts regression. (Bug #46744)
         * pdffonts: List the encoding of each font. (Bug #46888)
         * pdftohtml: Add possibilty of controlling word breaks percentage. (Bug #47022)
         
        qt4:
         * Support for LinkMovie object (Bug #40561)
         * Support for Media Rendition
         
        glib:
         * Add poppler_fonts_iter_get_encoding
         * Improvements to the demo

Release 0.19.0
        core:
         * Merge Xpdf 3.03
         * Add support for lcms2
         * SplashOutputDev: Implement Overprint
         * PSOutputDev: Implement Overprint
         * Expand glyph name ligatures such as "ff", "ffi" etc to normal form (Bug #7002)
         * Use an Identity CharCodeToUnicode for Adobe-Identity and Adobe-UCS collections (Bug #35468)
         * CairoOutputDev: Avoid setting huge clip area when printing (Bug #44002)
         * CairoOutputDev: Fix test for rotation (Bug #14619)
         * CairoOutputDev: Don't read inline image streams twice (Bug #45668)
         * CairoOutputDev: set mask matrix before drawing an image with a mask (Bug #40828)
         * Update glyph names to Unicode values mapping (Bug #13131)
         * Only use Hints table when there are no parse errors (Bug #46459)
         * Expose POPPLER_VERSION in poppler-config.h
        
        utils:
         * pdftohtml: Output images in -xml mode if no -i option is specified
         * pdftohtml: Get rid of static data members; merge duplicated jpeg dumping code
         * pdftohtml: Be more consistent generating the outlines
         * pdftohtml: Generate outlines in pdftohtml in -xml mode (Bug #56993)
         * pdftohtml: Combine UTF16 surrogate pairs (Bug #46521)
         * pdfinfo: Report page rotation
         * pdfinfo: Decode utf-16 surrogate pairs
         * pdftoppm: Allow one of -scale-to-[xy] = -1 to mean the aspect ratio is to be preserved (Bug #43393)
         * pdftocairo: Allow one of -scale-to-[xy] = -1 to mean the aspect ratio is to be preserved
         * pdffonts: Add -subst option to list the substitute font name and filename
         * pdfseparate: Produce PDF/X conformant pdf pages if the original PDF was PDF/X conformant
         * pdfimages: Add -list option to list all images (Bug #46066)
         * Improve various manpages
         
        glib:
         * Add poppler_fonts_iter_get_substitute_name
         * Demo improvements
         * Update gtk-doc makefile and m4 file
         * Fix typos in documentation
        
        qt4:
         * Add the option of PSConverter creating EPS
         * Form support improvements
        
        build system:
         * autotools: Print the cairo version required if not found (Bug #44619)
         * autotools: Print the glib version required if not found
         * autotools: Use pkgconfig to check for libopenjpeg (Bug #21789)
         * autotools: Replace openjpeg compile test with a version test
         * Add a configuration option for the test data dir

Release 0.18.4
        core:
         * CairoOutputDev: Restore temporary clip used in CairoOutputDev::fill when painting a mask
         * CairoOutputDev: Ensure paintTransparencyGroup uses same ctm as beginTransparencyGroup. Bug #29968
         * CairoOutputDev: Use fabs when comparing the transformed line width. Bug #43441
         * CairoOutputDev: Remove unused variable in CairoFontEngine.cc. Bug #45442
         * SplashOutputDev: Do not use 50Kb of stack in SplashXPath::addCurve. Bug #44905
         * JpegWriter: set image parameters after jpeg_set_defaults(). Bug #45224
         * OpenJPEG decoder: Set OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG if you have it. Bug #43414
         * Lexer: convert integer to real when overflow occurs. Bug #45605

        glib:
         * Various minor introspection and documentation improvements. Bug #44790
         * Fix return values. Bug #45440. Bug #45441
         * gtk-doc improvements. Bug #45549
         * Introspection improvements. Bug #45455
        
        utils:
         * HtmlOutputDev: Proper unicode support when dumping PDF outline. Bug #45572
         * HtmlOutputDev: Fix leaks. Bug #45805
         * HtmlOutputDev: Close li tags in generated outlines. Bug #45807
         * man pages: fix minor issues with hypens and %

        build system:
         * automake: Link to lcms if needed
         * automake: Fix build for builddir != srcdir. Bug #45434
         * automake: Improve moc detection when cross compiling
         * Fix build with latest mingw-w64 headers. Bug #45407
        
        qt4:
         * remove non-existing 'qt' include dirs
        
Release 0.18.3
        core:
         * Do not fail if we are trying to save a file with Encrypt that has not been modified. KDE Bug #288045
         * Include .otf fonts when finding substitute fonts. Bug #44412
         * Fix stack overflow in PDFDoc::markObject(). Bug #44660
         * Include strings.h as we use memcpy. Bug #43558

        utils:
         * pdfunite: Properly initialize globalParams. Bug #44659
         * pdfseparate: Properly initialize globalParams
         * Fix iniliazialization of GooString arguments

        build system:
         * autoconf: Check for cairo-ft and other cairo backends. Bug #43969
        
Release 0.18.2
        core:
         * Fix leak in GooString when resizing to a smaller string
         * Fix crash if failing to parse the colorspace. Bug #42793
         * Make GfxColorSpace::parse accept dicts

        qt4:
         * Use PDFDoc(wchar_t *, ...) on Windows. Bug #35378
         * Add missing include
         * Minor fixes in documentation

        utils:
         * pdftocairo: Fix crash when rendering only odd/even pages in a printing format
        
        build system:
         * Fix pkg-config files
        
Release 0.18.1
        core:
         * PSOutputDev: Output PS that does not confuse libspectre
         * PSOutputDev: Fix tiling pattern fill matrix. Bug #41374
         * PSOutputDev: Emit non repeating patterns just once
         * PSOutputDev: Fix uncolored tiling patterns. Bug #41462
         * CairoOutputDev: Fix crash when using poppler_page_get_image()
         * CairoOutputDev: Fix various setSoftMask bugs. Bug #41005
        
        utils:
         * pdftocairo: Flush/close files one we are done using them
         * pdftocairo: Compile in Windows
        
        build system:
         * CMake: Fix typo in option description
         * CMake: Correctly include fontconfig include dir
         * Remove poppler-cairo dependency from poppler-glib pkg-config file
        
        qt4:
         * Minor fixes in documentation

Release 0.18.0
        core:
         * Fix small memory leak when dealing with marked content
         * Remove DCTStream::getRawStream since Stream::getNextStream does the same
        
        utils:
         * Rename pdfmerge to pdfunite
         * Rename pdfextract to pdfseparate
         * pdfseparate: Complain if %d is not present and it should
         * Add pdfseparate and pdfunite man pages
        
        build system:
         * Minor cleanup in regarding removed qt code

Release 0.17.4 (0.18 RC)
        core:
         * SplashOutputDev: Compile when defining USE_FIXEDPOINT
         * PNGWriter: Compile with libpng >= 1.5.0
        
Release 0.17.3 (0.18 Beta 3)
        core:
         * PSOutputDev: Use Patterns for tiling fill when PS level >= 2
         * PSOutputDev: Avoid using /PatternType if only one instance of the pattern is used
         * PSOutputDev: Add poppler version as comment in the file
         * CairoOutputDev: Set mime data for soft masked images (Bug #40192)
         * CairoOutputDev: Assume printer pixel size is 1/600" when stroking 0 width lines (Bug #39067)
         * CairoOutputDev: Use cairo_show_text_glyphs() when printing
         * CairoOutputDev: Fix stroke patterns (Bug #11719)
         * CairoOutputDev: Fix unique id mime data
         * CairoOutputDev: fix stroking of very thin lines
         * CairoOutputDev: align strokes when Stroke Adjust is true and line width <= 1 (Bug #4536)
         * TextOutputDev: Add TextFontInfo::matches()
         * Improve PNGWriter
         * Rework writing of PDF files

        utils:
         * Introduce pdftocairo - utility for creating png/jpeg/ps/eps/pdf/svg using CairoOutputDev
         * Introduce pdfextract - utility to extract PDF pages
         * Introduce pdfmerge - utility to merge PDF files
         * Fix compilation warning
         * pdftohtml: Support text rotation (Bug #38586)
         * Update SEE ALSO section of man pages

        glib:
         * Add poppler_page_get_text_attributes()
         * Add text attributes information to text demo

        qt4:
         * Add a way to get the fully qualified name of a FormField
         * Minor documentation improvements
        
Release 0.17.2 (0.18 Beta 2)
        core:
         * EmbeddedFile improvements
         * don't gmalloc(-1) upon ftell failure
         * Fix missing content in some pages (Bug #39637)
         * Improve selection of CJK fonts (Bug #36474)
         * SplashOutputDev: Implement overprint
         * SplashOutputDev: Render dots for 0 length dashed lines (Bug #34150)
         * SplashOutputDev: Fix bad memory access when not using antialias (Bug #37189)
         * PSOutputDev: Make level2sep and level3sep write cmyk instead of rgb
         * PSOutputDev: Make level1sep, level2sep and level3sep write gray instead of rgb for gray images
         * Fix numerical overflow in libopenjpeg JPXStream (Bug #39361)
         * Fix crash on truncated JPEG/DCT stream (Bug #36693)
         * Make sure the dict is a page dict (Bugs #35925 #39072)
         * Fix calculation of startXRefPos
         * Handle missing startxref properly (Bug #38209)
         * Parse the "Medium" modifier when asking fontconfig for a font
         * Header cleanup
         * Include cleanup
         * Define cleanup

        glib:
         * Add missing permissions flags to PopplerPermissions
         * Add missing permission flags to info demo
         * Update gtk-doc.make
         * Add poppler_document_get_n_attachments()
        
        utils:
         * pdftohtml: Fix encoding of PDF document metadata (Bug #37900)
         * pdftohtml: Fix vertical spacing issues  (Bug #38019)
         * pdftotext: Fix -htmlmeta to correctly output U+2019 in PDF metadata (Bug #37900)
         * pdftoppm: Implement overprint

        qt4:
         * Rework EmbeddedFile internals
         * Fix possible crash in test
        
Release 0.17.1 (0.18 Beta 1)
        core:
         * Rework the way form fields tree is built
         * Cleanup unused parameters/variables

        glib:
         * Add JavaScript actions
         * demo: Show javascript actions in actions view
        
        qt4:
         * tests: Turn some assignments to bool into QVERIFY checks

Release 0.17.0 (0.18 Alpha)
        core:
         * Splash: Implement tiling patterns
         * Splash: Support slight hinting
         * Splash: Radial shading improvements
         * Splash: General speed improvements
         * Arthur: Add Hinting API
         * Cairo: Implement Type 4,5,6,7 shadings using cairo mesh gradients
         * Cairo: Use the new cairo unique id to set the surface id when printing
         * PS: Add PS level1 non standard binary output option
         * PS: Allow setting the rasterization resolution
         * Form support improvements
         * Annotation support improvements
         * General speed improvements
         * Add support for handling ViewerPreferences
         * Remove abiword output device

        utils:
         * pdftoppm: Add -singlefile option (Bug #32025)
         * pdftoppm: Add TIFF output format support (Bug #32027)
         * pdftops: Add PS level1 non standard binary output option
         * pdftops: Allow setting the rasterization resolution
         * pdftoabw has been removed
        
        glib:
         * Add poppler_form_field_get_action() (Bug 33174)
         * Remove GDK API
         * Remove test-poppler-glib
         * demo: Add a tooltip with current selected character in text demo
         * demo: show the activation action of form fields if there's one

        cpp:
         * Add TIFF output possibility
         * Add PNM output possibility

        qt4:
         * Support slight hinting
         * Form support improvements
        
        qt3:
         * The Qt3 frontend has been removed
        
        tests:
         * Merge splash and cairo tests into a single gtk-test tool

Release 0.16.4
        core:
         * Small improvements in Annot parsing

        glib:
         * Add g_return macros to make sure index is correct in form field choice methods
         * Fix a crash when a choice form field has no items selected in glib-demo

        utils:
         * Small fixes to the pdftohtml manpage
         * Fix copyright years

        qt4:
         * Fix caption of push button fields

Release 0.16.3
        core:
         * Increase precision in PS output device
         * Workaround bug when converting pdf to ps with level1 (Bug #31926)
         * Fix crash in Splash output device in some broken pdf
         * Fix infinite loop in some broken files
         * Fix rendering of some substituted fonts (Bug #34522)
         * Do not ask Freetype for 0x0 fonts in Splash output device (Bug #34602)
         * Don't assume y1 > y3 for points of a highlight annotation (Gnome Bug #643028)
         * Handle fontCIDType2OT when creating freetype font in Cairo output device (Gnome Bug #643273)
         * Fix crash in some pdf that use ICC color space (Bug #34357)

        glib:
         * Don't use an uninitialized local variable in demo
         * Add some introspection markers

        qt4:
         * Fix crash regression in unicodeToQString (again)

        utils:
         * pdftotext: Do not crash when using -bbox

Release 0.16.2
	core:
	 * Fix text extraction for some files

	qt4:
	 * Fix crash regression in unicodeToQString

Release 0.16.1
	core:
	 * Fix colorspace issues in the Cairo backend (Bug #32746)
	 * Remove declaration of function without implementation
	 * Do not crash in case jpeg_create_decompress fails (Bug #32890)
	 * Fix variable access mismatch (Bug #33063)
	 * Fix converting some pdf to ps with -level1sep (Bug #32365)
	 * Fix line selection, dont check y for Line selections
	 * Include zlib header in PNGWriter.cc
	 * Fix leak in Splash backend when doing axial shaded fills
	 * Fix label to index conversion on multiple prefixes

	glib:
	 * Use NULL instead of FALSE for functions returning a pointer
	 * Fix memory leak in poppler_page_get_text_layout() for pages with no text

	qt4:
	 * Fix unicodeToQString() to correctly decode the Unicode sequence

Release 0.16.0

	core:
	 * Improve the correctness of radial shadings (Bug #32349)
	 * Adapt the zlib-based FlateStream code to API changes  (Bug #32065)
	 * Make PreScanOutputDev be less agressive when deciding to rasterize (Bug #30107)
	 * Fix some warnings in newer gcc in Splash backend
	 * Fix the preliminary bbox/clip calculation in Splash backend
	 * Use A1 instead of A8 for imagemask in the Cairo backend
	 * Windows compile fixes

	utils:
	 * Do not return 99 (or 1) with -h, -v and -printenc (Bug #32149)
	 * Misc style improvements to pdftohtml code
	 * pdftohtml: Remove the -resolution flag introduced in 0.15.0 and fix the
	              existing -zoom flag

	build system:
	 * Add more warning flags to the default gcc builds
	 * Enable GObject introspection support in the cmake build system

	qt4:
	 * Windows compile fixes

Release 0.15.3 (0.16 RC)

	core:
	 * Improve rendering of radial shadings
	 * Open a broken file (Bug #31861)
	 * Correct parsing of linearization table (Bug #31627)
	 * Find fonts inside patterns (Bug #31948)
	 * [win32] Simplify strtok_r implementation
	 * Use a std::vector<char> instead of a var-length-array of chars
	 * Fix crashes in broken files
	 * Use sets instead of arrays for looking for duplicate fonts

	cpp:
	 * Include correction

	utils:
	 * pdffonts: Remove duplicated code

Release 0.15.2 (0.16 Beta 2)

	core:
	 * Improve shadings and antialias in the Splash backend (Bug #30436)
	 * Linearization improvements
	 * Small improvements to the Arthur backend
	 * Fix calculation of the size of some pages (Bug #30784)
	 * Fix crashes in broken documents

	qt4:
	 * Add Page::renderToPainter() method
	 * Add setDebugErrorFunction() method

	cpp:
	 * Add the hability to render pages to an image

	utils:
	 * Add -p flag to pdfimages

	build system:
	 * Remove -ansi flag for cywin and mingw

Release 0.15.1 (0.16 Beta 1)

	core:
	 * Consider render value when colorizing text (Bug #2807)
	 * Improve rendering of Shading Type 6 and 7
	 * Improve dict lookup speed for big dicts
	 * Fix multiple crashes in malformed PDF files
	 * Fix memory leak in in malformed PDF files
	 * Fix memory leak in the Catalog names
	 * Fix uninitialized uses on DCTScanInfo
	 * Fix a crash when drawing square/circle annots without a border (Bug #30580)
	 * Only clip boxes to mediabox if we are at the page level (Bug #30784)
	 * Do not omit the notdef glyph in the Splash backend
	 * Fix a crash when redering documents with invalid type 3 fonts in the Cairo backend
	 * Form improvements
	 * Add a method to get the PDF file identifier

	glib:
	 * Add more printing options to the API
	 * Add a method to get the PDF file identifier
	 * Add accessor for all PopplerDocument properties
	 * Form improvements
	 * Documentation improvements
	 * Improvements to the demo

	qt4:
	 * Add a callback to know which page has been printed
	 * Add a method to get the PDF file identifier
	 * Optimize GooString to QString conversion
	 * Some more autotests
	 * Update Doxyfile (enables .qch file for assistant)

	build system:
	 * Require Cairo 1.10

	utils:
	 * pdftohtml: Add -s option to generate a single HTML page
	 * pdftotext: Add -bbox option

	cpp:
	 * Add the possibility of loading a document from raw data
	 * Add a method to get the PDF file identifier
	 * Improve Unicode to ustring conversion
	 * Documentation improvements
	 * Update Doxyfile

Release 0.15.0 (0.16 Alpha)

	core:
	 * Remove exception support
	 * Improve creation of Annotations
	 * Fix failure to parse PDF with damaged internal structure. (Bugs #29189 #3870)
	 * Add a way to access the raw text of a page
	 * Speed improvements when reading multiple characters from a given Stream
	 * Speed improvements in the Splash backend
	 * Speed improvement in gray color space calculations
	 * Speed improvement in ICC color space calculations
	 * Speed improvement when reading some fonts
	 * Make GBool a bool instead of an int

	glib:
	 * Add GObject introspection support
	 * Improve creation of Annotations
	 * Add a way to get the coordinates of each character of a page
	 * Add a way to get the page label
	 * Documentation improvements
	 * Support password protected documents in the demo
	 * Support for selection in the demo
	 * Support for adding annotationss in the demo
	 * Misc improvements in the internals
	
	qt4:
	 * Add a way to access the raw text of a page
	 * Recognize "Print" as named action
	 * Documentation improvements
	
	build system:
	 * Add option for autogen.sh to skip configure
	 * Nicer autogen.sh output
	 * Improvements when build the glib frontend with CMake
	
	utils:
	 * pdftohtml: Use splash instead of external gs invocation to render the background
	 * pdftohtml: Let the user specify the resolution of the background. (Bug #29551)
	
	cpp:
	 * Add a way to access the raw text of a page

Release 0.14.3

	core:
	 * Tell Windows we are writing/reading binary data from stdout/stdio (Bug #29329)
	 * Fix crash when parsing some Movie elements (KDE Bug #249586)

Release 0.14.2

	core:
	 * Fix rendering of some documents involving tilingPatternFill in the cairo output device
	 * Improve rendering of some annotations
	 * Handle ColorTransform in DCT streams when using libjpeg (Bug #28873)
	 * Fix crash in the ps output device in some files (KDE Bug #246269)
	 * Fix crash in some malformed files (Bug #28842)
	
	build system:
	 * Improve build on windows
	 * Add uninstalled .pc file support when using autoconf
	
	glib:
	 * Fix a crash when a layer doesn't have a name (Bug #28842)
	
	utils:
	 * Fix padding of names in pdftoppm

Release 0.14.1

	core:
	 * Add ObjectStream caching, makes opening some files ten times faster (Bug #26759)
	 * Fix crash when writing to negative coordinates (Bug #28480)
	 * Check objects are the type we want them to be when parsing GfxICCBasedColorSpace
	 * Optimize Splash::compositeBackground
	 * Optimize color space calculations by using sqrt instead of pow 0.5
	 * Fix crash in JBIG2Stream with malformed documents
	
	build system:
	 * Make sure we ship two needed cmake files
	 * Do not distribute glib/poppler-features.h and poppler/poppler-config.h
	 * Improve compilation with Sun Studio
	 * Fix linking of the cpp frontend when using autotools
	
	glib:
	 * Fix links/annots area for some documents (Bug #28588)
	 * Fix poppler_page_find_tex() when called more than once (Bug #27927)
	
	utils:
	 * Add -cropbox to pdftoppm manual

Release 0.14.0

	core:
	 * Fix crash when parsing pdf with broken JBIG2Stream (Bug #28170)
	 * Do not follow loops blindly when parsing XRef (Bug #28172)
	 * Allow quality & progressive mode to be utilised in JpegWriter
	 * Fix potential assert in Lexer code (KDE bug #240208)
	 * Fix opening of files whose /P is stored as unsigned integer
	 * Do not exit() when trying to allocate memory for the XRef fails
	
	cpp:
	 * Minor bugfixes
	 * Documentation improvements
	
	build system:
	 * Fix build in mingw32 when using autotools
	 * Preserve compiler flags when using cmake

Release 0.13.4 (0.14 RC 1)

	core:
	 * Include standard float.h instead of unportable values.h
	 * Fix first color stop offset of linear gradients. Bug #27837
	 * Fix compilation if JPEG nor PNG is used
	 * Use fabs for doubles instead of abs
	 * Use strtok_r instead strtok
	 * Adjust bbox for line annots when y1 = y2
	 * Some fixes and regressions in the cairo output device
	 * Better check of overlapping of table cells when selecting text
	
	cpp:
	 * Make the pkg-config files really work
	 * Fix in/out buffer sizes in some functions

Release 0.13.3 (0.14 Beta 2)

	core:
	 * Fix roll optimization in the PS function interpreter
	 * Correctly parse numbers with '+' sign. Gnome bug #614549
	 * Add support for cached files
	 * Add support for reading a cached file from stdin
	 * Add HTTP support using libcurl, disabled by default
	 * Add some const correctnes to GooString
	 * Rework DCTStream error handling. Bug #26280
	 * Use current fill_opacity when drawing soft masked images in Cairo backend. Gnome bug #614915
	 * Use the topleft of the Rect of text annots to draw
	 * Fix saving update docs that have a compressed xref table. Bug #27450
	 * Parse varius part of the document catalog on demand
	 * Implement colorizing image masks with pattern colorspace in Cairo backend
	 * Fix a crash when rendering 0x0 images in Cairo backend
	 * Check pattern status after setting matrix when rendering images
	 * Improve text selection/extraction order. Bug #3188
	 * Fix pattern size when bbox is not at 0,0
	 * Improve colorizing text and masks in pattern colorspace. Bug #27482
	 * Silence some Illegal entry in bfrange block in ToUnicode CMap. Bug #27728

	utils:
	 * Add the -o[dd] and -e[ven] options to pdftoppm
	 * Allow read from stdin using the new cached files feature
	 * Fix crash in pdftohtml when output filename was shorter than 5 characters

	glib:
	 * Use existing cairo api when rendering to a pixbuf
	 * Compile with -DGSEAL_ENABLE. Bug #27579

Release 0.13.2 (0.14 Beta 1)

	core:
	 * Improve Movie support
	 * Fix experimental Arthur backend to compile when if Splash backend is disable
	 * Fix usage of some streams in the Cairo backend
	 * Small improvements in the experimental Arthur backend
	 * Minor annotation improvements
	 * Rework LinkRendition to follow the spec
	 * Add support for Set-OCG-State actions
	 * Correctly initialize the grayscale softmask color in the Splash backend
	 * Correctly initialize actualText in TextOutputDev when initialization fails
	 * Various MSVC fixes

	glib:
	 * Add support for Movie objects
	 * Add support for Screen annotations
	 * Add support for rendition actions
	 * Add support for OCG State actions
	 * Improvements to the demo
	
	qt4:
	 * Always compile the experimental Arthur backend
	 * Minor speed improvement in QPainter usage
	 * Add a search overload that takes doubles instead of QRectF
	
	cpp:
	 * Fix iconv usage
	 * use gmtime() when gmtime_r() is not available
	 * Fix building in autotools in windows
	 * {from,to}_utf_8() -> {from,to}_utf8()
	
	build system:
	 * Multiple CMake build system fixes
	 * Fix of some DIST targets in autotools
	 * Make finding of Qt3 in autotools use pkg-config

Release 0.13.1 (0.14 Alpha 2)

	core:
	 * New C++ frontend to interface with Poppler using only STL
	 * Use the right matrix for the mask in drawMaskedImage in Cairo output device. Bug #16906
	 * Fix downscaling images when document is rotated in Cairo output device. Bug #26264
	 * GooVector rewrite, old version had "unknown" origins/license
	 * Fix use after free in a error condition
	 * Improve handling of broken commands. Bug #24575
	 * Fix potential use after free in Cairo output device.
	 * Fix regression in painting. Bug #26243
	 * Improve handling of FontConfig. Bug #26544
	 * Only assume the OC is not visible if it exists and is set to no. Bug #26532
	 * Fix a potential crash in Splash font handling on out of memory conditions
	 * Implement writeImgFile for splashModeXBGR8
	 * Several speed increases (around 40% in some documents) in the Splash output device
	 * Improve printing on the Cairo output device
	 * Do not use '\' character in PostScript names
	 * Omit writing of embedded fonts into temporary files in the Cairo output device. Bug #26694
	 * Improve filtering of some images in the Cairo output device. Bugs #25268, #9860

	utils:
	 * pdftoppm: Only swap w with h if rotation is 90 or 270
	
	build system:
	 * Add POPPLER_WITH_GDK in cmake build system. Bug #26247
	 * Fix typo: "MULTITHREAD" -> "MULTITHREADED in cmake build system
	 * Wrap #include <jpeglib.h> in extern "C" to fix build. Bug #26351
	 * Add the Win32-specific ENABLE_RELOCATABLE option to cmake build system
	 * Reflect that poppler-glib needs cairo now in cmake build system
	 * Use pkgconfig to detect libpng on autotools build system
	 * Detect the need for nanosleep in solaris in cmake build system. Bug #26650

Release 0.13.0 (0.14 Alpha)

	core:
	 * Improvements to Annotation rendering. Bug #23108
	 * Do not give an error when opening files without pages. Bug #24720
	 * Try to read streams without Length
	 * Do not crop the transformation matrix at an arbitrary value. Bug #25763
	 * Make poppler (optionally) relocatable on Windows
	 * Use a small object cache in GfxResources to cache GState objects
	 * Reduce the number of redundant pattern creations in the Cairo output device
	 * Use colToDbl() to avoid rounding error in the Cairo output device
	 * Fix problems with mask handling in the Cairo output device. Bug #8474
	 * Use a better scale down implementation in the Cairo output device
	 * Various optimizations to the Splash output device
	 * Add the possibility to use floats instead of doubles in the Splash output device. Bug #25578
	 * Write out fixed-content portion of Type 1 fonts in the PS output device
	 
	build system:
	 * Improvements to the CMake build system
	 * Enable AM_SILENT_RULES by default in autotools
	 * Require glib 2.18
	 * Require GTK+ 2.14
	 * Make fontconfig optional with mingw compiler
	 * Remove makefile.vc
	
	glib:
	 * Add support for file attachment annotations
	 * Improvements to the demo
	 * Use TextOutputDev to get TextPage when we haven't rendered the page
	 * Remove support for the Splash output device
	
	utils:
	 * pdftoppm can now write to jpeg
	 * pdftoppm embeds the correct resolution in png and jpeg files
	 
	qt4:
	 * Minor improvements to the tests

Release 0.12.3

	core:
	 * Be more lenient with /Decode key on images. Bug #17439
	 * Correctly initialize fileName in LinkGoToR. Bug #25221
	 * Improve the reconstruction of the XRef for broken files
	 * [Cairo backend] Do not crash on malformed files. Bug #24575
	 * Accept Fontname if FontName is not present. KDE bug #217013
	 * Make PSOutputDev code a bit more resilient
	 * Fix writing of null objects. Bug #25465
	 * [Cairo backend] Fix crash in some documents. GNOME bug #603934
	 * Correctly initialize profileCommands in Gfx constructor
	
	build system:
	 * Check for openjpeg in the C++ part as it uses bool in the header. Bug #25103
	
Release 0.12.2

	core:
	 * Fix a memory leak when converting to PostScript
	 * Fix crash when reading a font fails. Bug #24525
	 * Make the ICC cache per page instead of global. Bug #24686
	 * Do not accept negative interval lengths in the page labels tree. Bug #24721
	 * Do not crash on files Aspect of Movie objects are reals instead of integers. Bug #24733
	 * Do not render patterns when using CairoImageOutputDev
	 * Allow Transitions dictionary to be a Ref
	 * Do not crash if jpeg_start_decompress fails. KDE bug #214317
	
	glib:
	 * Fix CVE-2009-3607
	
	qt4:
	 * Use '.' in the annotations XML instead of the decimal separator of the current locale

Release 0.12.1

	core:
	 * Fix compilation on some compilers
	 * Only initialize the font list once in Windows32/MSVC
	 * Do not crash on fonts without CharCodeToUnicode. Bug #24036
	 * Fix regression due to not setting LC_NUMERIC anymore
	 * Improve realibility for Streams with broken Length. Bug #6841
	 * Write the Info into the trailer dict if there is one. Bug #24091
	 * Do not crash when saving files that come from a stream without name. Bug #24090
	 * Improve relability of the save function
	 * Fix the Length value if it was wrong when saving
	 * Fix includes for those using internal headers
	 * Rework how hinting is used in the splash backend. It is disabled by default now
	 * fix constructor of DCTStream when using internal decoder
	 * Security fixes based xpdf 3.02pl4
	
	qt4:
	 * Add the possibility of setting wheter to use or not font hinting
	 * Add a way for converters to return more exact errors they had when converting
	 * Check the document is not locked when converting to PS
	
	build system:
	 * Compile on Cygwin
	 * Use _WIN32 instead of WIN32. Bug #24259
	 * Add the possibility to pass LIB_SUFFIX when using CMake

Release 0.12.0

	core:
	 * Fix printf format security warnings
	 * Improve rendering of radial shadings. Bug #20238
	 * Better fallback when there's a font type mismatch. Bug #17252
	 * Do not crash on attachments without data stream. Bug #10386
	 * Fix infinite loop in JBIG2Decoder. Bug #23025
	
	build system:
	 * Minimizes pkg-config dependencies for Qt frontends
	 * Add automake 1.11 support
	 * Use the newest automake found and not the oldest
	 * Support AM_SILENT_RULES when using automake 1.11
	
	utils:
	 * Add common options to pdftoabw

Release 0.11.3 (0.12 RC 1)

	core:
	 * Optimization in the Cairo renderer for some fonts
	 * Do not apply masks when fill color space mode is csPattern in the Cairo renderer. Bug #22216
	 * Check for overflow when parsing integers. Bug #23078
	 * Do not save the font file twice for FreeType fonts in the Cairo renderer. Bug #20491
	 * Use current fill_opacity when drawing images in the Cairo renderer
	 * Fix alpha rendering in some files in the Splash renderer. Bug #22143, #22152
	 * Implement tiling patterns in the Cairo renderer
	 * When converting a cm matrix to PS write 4 significant digits for numbers < 1 not 4 decimals. Bug #23332
	 * Fix changing of locale, now poppler no longer changes LC_NUMERIC to "C"
	 * Return PDF version as two integers instead of as a double
	
	Qt4:
	 * Addition of the Color Management API
	 * Small fix to documentation
	 * Fix backwards text search
	
	utils:
	 * Add the -png flag to pdftoppm to output to PNG

Release 0.11.2 (0.12 Beta 2)

	core:
	 * Make DecryptStream return sane values for getPos(). Bug #19706
	 * Fix bug when printing pdf with multiple page sizes in duplex mode
	 * Initilize AnnotColot properly when the Array is not correct
	 * Fix crash on some files with forms. Bug #22485
	 * Fix crash in files with invalid embedded files. Bug #22551
	 * Improve FileSpec attribute parsing
	 * Cairo output device improvements. Bugs #10942, #18017, #14160
	 * Implement blend modes in cairo backend
	 * Handle fontType1COT fonts in CairoFontEngine
	 * Fix generation of PS for some files. Bug #18908
	 * Don't use byte_lookup table when color space doesn't support getLine methods. Bug #11027
	 * Fix rendering of PDF files with malformed patterns. Bug #22835
	 * Add the possibility of disabling font substitution in pdftops. Bug #23030
	 * Fix some radio buttons not being detected as such
	
	glib:
	 * Improvements to the demo
	
	Qt4:
	 * Improvements to the demo
	
	build system:
	 * Use gtkbuilder rather than libglade for some tests
	
	utils:
	 * Fix bug with noCrop parameter in pdftops 

Release 0.11.1 (0.12 Beta 1)

	core:
	 * Support colorizing text in pattern colorspace. Bug #19670 and #19994
	 * Add the possibility of forcing no hinting of fonts in the Splash backend
	 * Support multiple page sizes when converting to PS. Bug #19777
	 * Also tokens with leading 00 when parsing the char to unicode map. Bug #22025
	 * Improvements of rendering speed in documents using PS transformations a lot. Bug #21562
	 * More work on Annotations support
	 * Use Interpolate flag to decide whether applying image interpolation during rendering. Bug #9860
	 * Handle Streams in CMap definitions. Bug #22334
	 * Fix some bugs in JBIG2Stream handling
	 * Fix dashed line in page 1 of bug 20011
	 * Fix exit(1) when rendering a file
	 * Fix pdftops crash on file from KDE bug #174899
	 * Fix PS generation in some files. Bug #20420
	 * Do not create the GfxColorTransform if the lcms could not be created. Bug #20108
	 * Check Mask entries are int before using them, if they are real cast to int and try to use them. Bug #21841
	 * Use the correct value when creating the V field for form combo boxes
	 * Give an error when using level1sep in pdftops without having CMYK support. Bug #22026
	 * Don't include lcms.h in GfxState.h
	 * Fix splashColorModeNComps to correctly include all values for each SplashColorMode
	 * Add splashClearColor that assigns white to the given colorptr
	 * Kill support for specifying extension in openTmpFile. Bug #21713
	 * Fix "Conditional jump or move depends on uninitialised value". Bug #20011
	
	glib:
	 * Add poppler_annot_markup_has_popup()
	 * Hyphenate UTF-8 and UTF-16BE. Bug #21953
	 * Use g_strerror instead of strerror. Bug #22095
	 * Fix a crash when a destination points to an invalid page
	 * Improvements to the demo
	
	Qt4:
	 * Add LinkDestination::destinationName()
	 * Do not try to resolve named destinations for GoTo links pointing to external documents
	 * Add Page::thumbnail()
	 * Improvements to the demo
	 * Improvements to the documentation
	
	build system:
	 * Build fix for MSVC
	 * Better lcms cmake check comming from kdelibs
	 * Use pkgconfig for autotools lcms check
	 * Remove unneeded files from repo. Bug #22094

Release 0.11.0 (0.12 Alpha)

	core:
	 * Add initial support for color management
	 * Remove case-insensitive matching of filenames in PDFDoc constructor
	 * Fix extraction of some ActualText content
	 * More work on Annotations support
	 * Improve font rendering in Cairo output device
	 * Fix bug in cairo backend with nested masks
	 * Fix cairo luminosity smask rendering
	 * Add optionally text support to Cairo output device
	 * Add the possibility of setting the datadir on runtime
	 * Return an error code instead of a boolean when saving
	 * Make the font scanner more versatile
	 * Small opimization in documents that use PostScriptFunction transforms
	 * Minor optimization to Stream handling
	 * Fix some compile warnings
	
	glib:
	 * Optional content support
	 * More work on Annotations support
	 * Improvements to the demo
	 * Documentation improvements
	 * Fix build when compiling with GTK_DISABLE_SINGLE_INCLUDES
	
	Qt4:
	 * Support URI actions for Table Of Contents items
	 * Documentation improvements
	 * Improvements to the demo
	 * Add a FontIterator for iterating through the fonts of the document
	
	utils:
	 * Allow the use of cropbox in pdftoppm
	 * Make pdftohtml output png images when the image stream is not a jpeg
	 * Make pdftotext accept cropping options like pdftoppm
	 * Support rendering non-square pixels in pdftoppm
	
	build system:
	 * Require Cairo 1.8.4 for the Cairo output device
	 * Require CMake 2.6 when using the CMake build system
	 * Optionally require libpng for pdftohtml
	 * Optionally require libcms for color management

Release 0.10.6

	core:
	 * Fix problems that happen when parsing broken JBIG2 files.
	   CVE-2009-0799, CVE-2009-0800, CVE-2009-1179, CVE-2009-1180
	   CVE-2009-1181, CVE-2009-1182, CVE-2009-1183, CVE-2009-1187, CVE-2009-1188
	 * Fix parsing of incorrect border arrays. Bug #19761
	 * Fix clip test for fonts. Bug #20950
	 * Fix getGlyphAdvance to behave correctly on font size changes. Bug #20769
	 * Misc build fixes
	 
	build system:
	 * Fix the Qt4 version we need

Release 0.10.5

	core:
	 * Read the UF entry if present and prefer it over F in Filespec dictionary
	 * Fix typo that was making CairoOutputDev crash on some files. Bug #17337
	 * Make JBIG2Stream more robust to corrupt input data
	 * Do not blindly follow loops parsing OutlineItem. Bug #18364
	 * Set up the error manager before calling jpeg_create_decompress. Bug #20484
	 * Check there is an optional content config before using it. Bug #20587
	 * Fix rendering of some PDF with OpenType fonts. Bug #20605

	build system:
	 * Yet more support for build on windows
	 * Use AC_CHECK_HEADER to find headers. Bug #20538
	 * Check for pkgconfig before using it
	 * General autotools improvements

Release 0.10.4

	core:
	 * Fix a memory leak when asking for a document-level JS
	 * Do not crash in some PDF we do not parse correctly. Bug #19702
	 * Fix crash on unexepcted form Opt value. Bug #19790
	
	utils:
	 * Fix pdfimages to extract i color components per pixel jpeg images. Bug #19789

Release 0.10.3

	core:
	 * Fix a crash on documents with malformed outline. Bug #19024
	 * Fix leak on AnnotScreen destructor. Bug #19095
	 * Fix wrong PS generation when a large image is in Patterns. Bug #18908
	 * Remove BaseFile.h it was never used. Bug #19298
	 * Improve document saving
	 * Fix PS generation of PDF with malformed font Length2 definition
	 * Fix a leak while parsing annotations
	 * Fix rendering of some checkboxes
	
	Qt4:
	 * Fix positioning of Form rects on PDF with cropbox
	 * Fix positioning of Annotation rects on PDF with cropbox. Bug #18558.
	 * Small documentation improvements
	 * Make Document::fonts() work when called more than once. Bug #19405
	
	build system:
	 * CMake: look harder for openjpeg
	 * CMake: update the poppler core headers installation
	 * Autotools: do not install Function.cc as it's not a header
	
	Qt:
	 * Fix deserialization of links right coordinate

Release 0.10.2

	core:
	 * Fix a crash when selecting text in word mode
	 * Fix a crash in some malformed documents (second argument of opMarkPoint is not a dictionary)
	 * Ensure cairo font matrix is invertable. Fixes bugs #18254 and #18429
	 * Fix a memory leak (Bug #18924)
	
	Qt4:
	 * Fix deserization of links right coordinate
	
	misc:
	 * Fix build on Solaris 10 + Sun Studio 12
	 * Compile with -pedantic

Release 0.10.1

	core:
	 * Improvements in Optional Content support
	 * Small fix in Form support
	 * Fix memory leak in case of error
	 * Fix potential crash on text search
	 * Try render documents with invalid indexed color space parameters. Bug #18374
	 * Fix crash on text extraction when poppler-data is not installed. Bug #18023
	
	Qt:
	 * Fix two memory leaks
	
	Qt4:
	 * Small documentation improvement
	 * Fix memory leak in the demo code

Release 0.10.0

	core:
	 * Fix crashes on PDF using Stitching or Axial Shading painting
	 * Fix rendering of PDF with Type1 fonts that have more than
	   one encoding definition per line
	 * Do not try to save documents that have Encryption as we
	   do not support that and the user ended with a broken file
	 * Fix crash on files with OptionalContentGroup but no Name
	
	Qt4:
	 * Fix the area of the links to be correctly reported on rotated documents
	
	misc:
	 * Mingw+Msys should work

Release 0.9.3 (0.10 RC 2)

	core:
	 * Fix rendering regression on some embedded fonts
	 * Fix rendering regression of some special fonts
	 * Fix crash on documents with bogus jpeg data
	
	Qt4:
	 * The printing flag defaults to true on PSConverter
	 * Documentation improvement
	
	utils:
	 * Fix regression that made HmtlOutputDev ignore jpeg images
	
	misc:
	 * Improve compilation on mingw

Release 0.9.2 (0.10 RC 1)

	core:
	 * Fix conversion to PS some files (bug #17645)
	 * Small Form fixes
	 * Small JS fixes
	 * Improve memory usage of the cairo renderer
	
	utils:
	 * Fix mismatched free/delete in pdftohtml
	 * Fix memory leak in pdftohtml
	 * Fix crash in pdftohtml
	
	glib:
	 * Fix a crash in forms demo
	
	misc:
	 * Compile with -pedantic

Release 0.9.1 (0.10 Beta 2)

	Core:
		* Fix crash on some AESv2 encrypted files (bugs #13972, #16092, #17523)
		* Improve parsing of broken files (bug #17568)
		
	glib frontend:
		* Minor improvements to the demo application
	
	utils:
		* pdftohtml: Generate the outline file in the same place
		             of the other generated files (bug #17504)

Release 0.9.0 (0.10 Beta 1)

	Core:
	 * Initial JavaScript support
	 * Annotation improvements
	 * Improvements in the Arthur based renderer
	 * Improvements in the Cairo based renderer
	 * Added a JPEG2000 decoder based on OpenJPEG
	 * Small fixes in ActualText implementation
	 * Fix jpeg rendering when not using the libjpeg based decoder
	 * Movie fixes
	 * Do not get out of memory on documents that specify huge fonts
	 * Emulate Adobe Reader behaviour on documents with duplicate keys in Dictionaries
	 * Forms improvements	
	
	Qt4 frontend:
	 * Annotation improvements
	 * Forms improvements
	 * Add the possibility of extracting embedded fonts
	 * Initial Movie support
	 * Documentation improvements
	 * Small improvements in the PS exporter
	
	glib frontend:
	 * Annotation improvements
	 * Attachment fixes
	
	utils:
	 * updated man pages
	 * Added -listenc to pdfinfo and pdftotext

Release 0.8.7

	Core:
	 * Fix regression in Form rendering
	 * Fix memory leak in the cairo backend

Release 0.8.6

	Core:
	 * Call error() when font loading fails
	 * Be less strict parsing TTF tables (bug #16940)
	 * Fix crash due to uninitialized variable

	Qt 4 frontend:
	 * Make the paper color setting working as it should
	 * Make sure to use the correct page width/height for form widgets coordinates

Release 0.8.5

	Core:
	 * Fix crash on PDF that define a page thumbnail but it's not a Stream
	 * Fix crash when Annots object is not of the desired type
	 * Fix crash when obtaining fonts in PDF where XObjects link themselves in loops
	 * Fix crash on documents with an IRT object
	 * Saving should work much better now
	 * Plug some memory leaks in Annotation handling
	
	Utils:
	 * pdftohtml: Don't crash on documents that specify an invalid named dest for a link
	 * pdftohtml: Make html output to keep all the spaces with &nbsp;
	 * pdftohtml: Improve a bit text layout
	 * pdftohtml: Make xml output valid xml

Release 0.8.4

	Core:
	 * Fix leak in ABWOutputDev.cc
	 * Fix uninitialized variable that broke file saving in some cases
	 * Use a single global FT_Library in CairoOutputDev.
	   Fixes some crashes in CairoOutputDev.
	
	Qt 4 frontend:
	 * Fix saving over existing files
	
	build system:
	 * Make sure Qt4 moc is used to generate moc files in Qt4 frontend

Release 0.8.3

	Core:
	 * Fix crash when reading some PDF with annotations
	 * Fix crash on PDF that reference Optional Content elements that don't exist
	 * Fix leaks on error conditions
	 * Do not limit CharCodeToUnicodeString to 8 characters
	 * Support for surrogates outside the BMP plane
	
	Qt 3 frontend:
	 * Fix crash when reading PDF with password
	 * Fix leak when calling scanForFonts()
	
	Qt 4 frontend:
	 * Fix the text() method
	
	Splash renderer:
	 * Fix compilation with --enable-fixedpoint

Release 0.8.2

	core:
	 * Fix call broken by a fix introduced in 0.8.1

Release 0.8.1

	core:
	 * Do not call FT_Done_Face on a live cairo_font_face_t as it might cause crashes
	 * Do not take into account Colorspace resource subdictionary for image XObjects
	 * Downsample 16 bit per component images to 8 bit per component so they render
	
	build system:
	 * Link to pthread when the system needs it

	windows:
	 * Fix comparing against NULL instead against INVALID_HANDLE_VALUE when calling FindFirstFile

Release 0.8.0

	* Fix caching of members in the glib frontend causing issues with rendering
	* Change glib public api to have a correct naming
	* Some better error handling on corner cases
	* Check the document stream is seekable when opening it
	* Build fixes with autotools and with cmake
	* Fix infinite recursion on some malformed documents when consulting the fonts
	* Fix possible crash when asking for Movie contents

Release 0.7.3 (0.8 RC 2)

	* Fix regression in Splash renderer
	* Fix off-by-one write in Splash
	* Plug some minor leaks in Optional Content code
	* Improve error handling when creating a document in the glib frontend

Release 0.7.2 (0.8 RC 1)

	Major Changes:
	 * Improve font matching not forcing default values onto Fontconfig
	 * Add preliminary annotations support in the glib frontend
	 * Initial Movie support in the core
	 * Make GDK dependency optional in glib bindings

	Minor Changes:
	 * Make the core able to read mime types of embedded files
	 * Qt4 API for accessing mime types of embedded files
	 * Handle correctly check state of optional content groups
	   regarding parents state
	 * Avoid setting singular CTM matrices on the Cairo backend
	 * Improved Qt4 API to get character position
	 * Qt4 api documentation improvements
	 * Qt4 minor stability fixes
	 * Proper lib64 Qt detection
	 * Fix build when compiling without cairo support

Release 0.7.1 (0.8 Beta 2)

	Major Changes:
	 * Really distribute CMake files as optional build tool
	 * Initial Optional Content support in core and in the Qt4 frontend

	Minor Changes:
	 * Allow grouped checkboxes to be selected individually
	 * Qt4 demo program improvements
	 * Keep cairo and cairo_shape consistent
	 * Safety checks on Splash renderer so that it does not draw outside the allocated bitmap
	 * Do not try to display bitmaps of invalid size
	 * Fix building with exceptions
	 * Improvements for building with MSVC and CMake

Release 0.7.0 (0.8 Beta 1)

	* Saving support
	* Partial annotation support
	* Forms improvements
	* Add support for ActualText entries
	* Display characters outside of unicode BMP with TT font
	* CJK rendering fixes
	* Implement Adobe Glyph Naming convention for fonts
	* CMake as optional build tool
	* Better font scaling for non embedded fonts
	* Preserve PDF page labels when we output as postscript

Release 0.6.4

	Qt4 frontend:
	 * Fix crash on links that point to a non existant page
	 * Make Document::renderHints return the correct render hints
	 * Fix infinite loop when parsing LineAnnotation

	core:
	 * Fix crash in the Splash renderer when T3 fonts are badly defined
	 * Draw underlined Links correctly

	utils:
	 * Fix two use after free bugs in HtmlOutputDev.cc

	build system:
	 * Fix build on mingw32

	tests:
	 * Distribute the glade file of pdf-inspector

Release 0.6.3

	core:
	 * Fix crash in extra debug code

	glib frontend:
	 * Make sure passwords are passed correctly to poppler core

	Qt frontend:
	 * Fix crash on documents that specify an empty date
	
	build system:
	 * Disable gtk tests if the user disabled glib frontend

Release 0.6.2

	poppler core:
	 * Fix CVE-2007-4352, CVE-2007-5392 and CVE-2007-5393
	 * Fix a crash on documents with wrong CCITTFaxStream
	 * Fix a crash in the Cairo renderer with invalid embedded fonts
	 * Fix a crash with invalid TrueType fonts
	 * Check if font is inside the clip area before rendering
	   it to a temporary bitmap in the Splash renderer. Fixes crashes on
	   incorrect documents
	 * Do not use exit(1) on DCTStream errors
	 * Detect form fields at any depth level
	 * Do not generate appearance stream for radio buttons that are not active
	 * mingw fixes
	
	build system:
	 * Require fontconfig >= 2.0
	 * builddir != srcdir fixes
	
	Qt4 frontend:
	 * Improved documentation
	
	misc:
	 * Fix FSF address

Release 0.6.1

	poppler core:
	 * Fix printing with different x and y scale
	 * Fix crash when Form Fields array contains references to non existent objects
	 * Fix crash in CairoOutputDev::drawMaskedImage()
	 * Fix embedded file description not working on some cases
	
	Qt4 frontend:
	 * Fix printing issue
	 * Avoid double free
	 * Fix memory leak when dealing with embedded files
	
	glib frontend:
	 * Fix build with --disable-cairo-output
	 * Do not return unknown field type for signature form fields
	
	build system:
	 * Support automake-1.10
	 * More compatible sh code in qt.m4
	
	utils:
	 * Fix build on Sun Studio compiler

Release 0.6

	- CairoOutputDev fixes
	- Allow pdftoppm to read/write from stdin/stdout
	- API work on Qt4 frontend
	- Fix pdfimages produces inverted image for black & white image
	- Fix error on the NFKC text matching routine
	- Add support for word and line selections
	- Do not enforce %%EOF at the end of file
	- Pad zeroes instead of aborting when rendering 1-bit images
	  and the stream is too short
	- Update glib bindings documentation

Release 0.5.91 (0.6 Release Candidate 2)

	- Various memory leaks fixed
	- Compile with --enable-fixedpoint. Bug #11110
	- Header cleanup
	- Remove dependency on debugxml. Bug #11187
	- Allow access to document metadata in glib and qt4 frontends
	- Several glib API frontend improvements
	- Fix crash on accessing embedded files
	- Build on Sun Force compiler
	- Render '*' instead of the actual content in password form fields
	- Fix pdftohtml complex output. Bug #9746 and #11610
	- Windows build fixes
	- Improve Japanese font support. Bug #11413
	- Do not exit the program on files that confuse libjpeg
	- Update required cairo version to 1.4
	- Fix CVE-2007-3387

Release 0.5.9 (0.6 Release Candidate)

	- Merge xpdf 3.02 changes
	- Qt4 frontend is not marked anymore as unstable
	- Support for Sound objects
	- Support for Opening/Closing page actions 
	- Support for page duration
	- Improve PS Tokenizer performance thanks to Scott Turner
	- Various speed ups by Krzysztof Kowalczyk
	- Beginning of Interactive Form support by Julien Rebetez
	- xpdfrc is no longer used for anything
	- Add AbiWord output device and pdftoabw program by Jauco Noordzij
	- Fix security issue MOAB-06-01-2007
	- Lots of bugs fixed

Release 0.5.4

	- Automatically read in CJK encoding files if they're
          installed (#2984, #7105, #7093).  This works with the new
          poppler-data package.
	- Speed ups by Krzysztof Kowalczyk (#8112)
	- Patch from Dom Lachowicz to let the utils take input on stdin.
	- Bugs fixed (#8182, #4649, #7906, #8048, #7113, #4515, #3948,
          #7924, #7780, #7646, #6948, #7788, #7661, #7005)

Release 0.5.3

	- Add poppler as a private requires of poppler-glib.
	- Allow CairoFont creation to fail more gracefully (#4030).
	- Back out the rest of krh's type3 font work.
	- Revert splashModeRGB8 changes.
 	- Add missing poppler-annotation-helper.h.

Release 0.5.2

	- Much improved Qt bindings (Albert Astals Cid).
	- Cairo backend now supports masked images (Jeff Muizelaar, #6174).
	- Patches from Kouhei Sutou to make glib bindings more
	  language binding friendly (#6907, #6897, #6899, #6905).
	- Search now works with ligatures (Ed Catmull, #2929).
	- The glib bindings now has an entry point to render to a cairo_t.
	- GCC 4.1 and MSVC compilation fixes.
	- Memory leaks plugged: #6908, #6947, #6765, #6764, #6187
	- Misc bug fixes: #6984, #6896, #6913, #6926, #4481, #5951,
	  #6551, #6500, #6492, #6454, #6079, #6167.

Release 0.5.1

	- Support for embedded files.
	- Handle 0-width lines correctly.
	- Avoid external file use when opening fonts.
	- Only use vector fonts returned from fontconfig (#5758).
	- Fix scaled 1x1 pixmaps use for drawing lines (#3387).
	- drawSoftMaskedImage support in cairo backend.
	- Misc bug fixes: #5922, #5946, #5749, #5952, #4030, #5420.

Release 0.5.0

	- Font matching code for non embedded fonts now use fontconfig
          instead of hard coded list of fonts.
	- Merge in Xpdf 3.01 changes.
	- Add command line tools from Xpdf.
	- Make install of Xpdf header files ./configure'able.

Release 0.4.0

	- Real text selection.
	- API breakage in glib wrapper: dropping dest_x and dest_y
	  arguments from poppler_page_render_to_pixbuf().

Release 0.3.3

	- New glib API to get document font information (Marco).
	- More document properties available as glib properties (Emil
	  Soleyman-Zomalan, #3359)
	- Optimize color conversion for images.
	- Support for constant opacity.
	- Fix problems with pkg-config files.
	- Bugs fixes: #3491, #2911, #3362, #3340, #3265, #3239, #3396.

Release 0.3.2

	- New API to get poppler version and backend type. 
	- Various font fixes from Albert Astals Cid.
	- Update to cairo 0.5.0 API, including better font support.
	- Meta data for the glib binding.

Release 0.3.1

	- Add qt/poppler-private.h to SOURCES
	- Jeff's path to use zlib instead of builtin decompression.
	- Bug fixes: #2934, segfault on invalid links, #3114

Release 0.3.0

	- First cut at qt wrapper, including a getText() method for
	  getting text from a page.
	- More glib functionality: meta data, set page orientation,
	  print to PS
	- Performance fixes for glib cairo
	- Bug fixes

Release 0.2.0  (Tue Apr  5 12:32:10 EDT 2005)

	- Add glib wrapper for poppler, which will use cairo rendering
	  if available
	- Support for page labels
	- configure and build fixes.

Release 0.1.2  (Wed Mar  9 10:45:58 EST 2005)

	- cairo optimizations and fixes from Jeff Muizelaar
	- Bump cairo requirement to 0.4
	- Make cairo and gtk checks fail gracefully

Release 0.1.1

	- Fix issues with installed header files including config.h
	- Fix a couple of typos in pkg-config files
	- Install splash and cairo header files when necessary

Release 0.1 - no date yet

	- First release
	- More NEWS here
