diff options
author | Peter Breitenlohner <peb@mppmu.mpg.de> | 2011-07-20 07:00:05 +0000 |
---|---|---|
committer | Peter Breitenlohner <peb@mppmu.mpg.de> | 2011-07-20 07:00:05 +0000 |
commit | 89755f7344de571c4b1b7c68e90de39363a4d1ff (patch) | |
tree | d735587f7030f0536272048df7a4b53cefc133a4 /Build/source/texk/web2c/pdftexdir | |
parent | 713aef9b071ca2b5dd68d014e99897f0e5e2036c (diff) |
libs/t1lib + texk/ps2pkm: bug fix and update
git-svn-id: svn://tug.org/texlive/trunk@23187 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/pdftexdir')
-rw-r--r-- | Build/source/texk/web2c/pdftexdir/ChangeLog | 8 | ||||
-rw-r--r-- | Build/source/texk/web2c/pdftexdir/pdftoepdf.cc | 4 | ||||
-rw-r--r-- | Build/source/texk/web2c/pdftexdir/pdftosrc.cc | 36 |
3 files changed, 45 insertions, 3 deletions
diff --git a/Build/source/texk/web2c/pdftexdir/ChangeLog b/Build/source/texk/web2c/pdftexdir/ChangeLog index e6ebf36e44c..e154e64e33c 100644 --- a/Build/source/texk/web2c/pdftexdir/ChangeLog +++ b/Build/source/texk/web2c/pdftexdir/ChangeLog @@ -1,3 +1,11 @@ +2011-07-11 Peter Breitenlohner <peb@mppmu.mpg.de> + + * pdftosrc.cc: Rewrite the Object Stream handling for poppler + (or xpdf without patch-40-objectStream-support-for-pdftosrc). + + * pdftoepdf.cc: Replace `#ifdef HAVE_GETPDFMAJORVERSION' by + '#ifdef POPPLER_VERSION' for poppler >= 0.12. + 2011-05-12 Peter Breitenlohner <peb@mppmu.mpg.de> * writepng.c: #define PNG_FP_1 for libpng < 1.5.0. diff --git a/Build/source/texk/web2c/pdftexdir/pdftoepdf.cc b/Build/source/texk/web2c/pdftexdir/pdftoepdf.cc index a5e8d3f79a8..e0981022485 100644 --- a/Build/source/texk/web2c/pdftexdir/pdftoepdf.cc +++ b/Build/source/texk/web2c/pdftexdir/pdftoepdf.cc @@ -717,7 +717,7 @@ read_pdf_info(char *image_name, char *page_name, int page_num, PdfDocument *pdf_doc; Page *page; PDFRectangle *pagebox; -#ifdef HAVE_GETPDFMAJORVERSION +#ifdef POPPLER_VERSION int pdf_major_version_found, pdf_minor_version_found; #else float pdf_version_found, pdf_version_wanted; @@ -736,7 +736,7 @@ read_pdf_info(char *image_name, char *page_name, int page_num, // this works only for PDF 1.x -- but since any versions of PDF newer // than 1.x will not be backwards compatible to PDF 1.x, pdfTeX will // then have to changed drastically anyway. -#ifdef HAVE_GETPDFMAJORVERSION +#ifdef POPPLER_VERSION pdf_major_version_found = pdf_doc->doc->getPDFMajorVersion(); pdf_minor_version_found = pdf_doc->doc->getPDFMinorVersion(); if ((pdf_major_version_found > 1) diff --git a/Build/source/texk/web2c/pdftexdir/pdftosrc.cc b/Build/source/texk/web2c/pdftexdir/pdftosrc.cc index a6debc4acc5..85021303cb5 100644 --- a/Build/source/texk/web2c/pdftexdir/pdftosrc.cc +++ b/Build/source/texk/web2c/pdftexdir/pdftosrc.cc @@ -40,6 +40,8 @@ with this program. If not, see <http://www.gnu.org/licenses/>. #include "Object.h" #include "Stream.h" +#include "Lexer.h" +#include "Parser.h" #include "Array.h" #include "Dict.h" #include "XRef.h" @@ -149,7 +151,39 @@ int main(int argc, char *argv[]) (e->type == xrefEntryFree ? "f" : "n")); else { // e->offset is the object number of the object stream #ifdef POPPLER_VERSION - fprintf(stderr, "warning: this version of pdftosrc doesn't support object stream (use pdftosrc from TeX Live if you need it)\n"); + Stream *str; + Parser *parser; + Object objStr, obj1, obj2; + int nObjects, first, n; + int localOffset = 0; + Guint firstOffset; + + assert(xref->fetch(e->offset, 0, &objStr)->isStream()); + nObjects = objStr.streamGetDict()->lookup("N", &obj1)->getInt(); + obj1.free(); + first = objStr.streamGetDict()->lookup("First", &obj1)->getInt(); + obj1.free(); + firstOffset = objStr.getStream()->getBaseStream()->getStart() + first; + + // parse the header: object numbers and offsets + objStr.streamReset(); + obj1.initNull(); + str = new EmbedStream(objStr.getStream(), &obj1, gTrue, first); + parser = new Parser(xref, new Lexer(xref, str), gFalse); + for (n = 0; n < nObjects; ++n) { + parser->getObj(&obj1); + parser->getObj(&obj2); + if (n == e->gen) + localOffset = obj2.getInt(); + obj1.free(); + obj2.free(); + } + while (str->getChar() != EOF) ; + delete parser; + objStr.free(); + + fprintf(outfile, "%.10lu 00000 n\n", + (long unsigned)(firstOffset + localOffset)); #else // e->gen is the local index inside that object stream //int objStrOffset = xref->getEntry(e->offset)->offset; |