]> _ Git - cubeextranet.git/commitdiff
(no commit message)
authorvincent@cubedesigners.com <vincent@cubedesigners.com@f5622870-0f3c-0410-866d-9cb505b7a8ef>
Mon, 22 Feb 2010 13:34:18 +0000 (13:34 +0000)
committervincent@cubedesigners.com <vincent@cubedesigners.com@f5622870-0f3c-0410-866d-9cb505b7a8ef>
Mon, 22 Feb 2010 13:34:18 +0000 (13:34 +0000)
inc/extranet/Controlleur/class.ws.conversion.session.php
inc/extranet/Metier/class.ws.document.php

index 89a990b18a0dd6dc22ed6b00238b8285c252d6c0..913495e69f18603053c6aae381a06788b8ab941e 100644 (file)
@@ -37,6 +37,10 @@ class wsConversionSession {
                $this->processing = true;\r
                $this->initDocuments();\r
 \r
+               foreach($this->documents as $doc){\r
+                       $doc->getTextes();\r
+               }\r
+\r
                $this->complete = true;\r
                $this->processing = false;\r
        }\r
index 3b319609271f8c8e28b5d57b18f7e702b2c6af9e..3f7d093f5b85bfaffe833e23dab53b9703798672 100644 (file)
@@ -139,12 +139,40 @@ class wsDocument extends cubeMetier {
                return $this->generalInfos['pages'];\r
        }\r
 \r
-       public function getTexts()\r
+       public function processOnePage($page)\r
+       {\r
+               $this->getTexts($page);\r
+               $this->makeMiniShot($page);\r
+               $this->makeRealShot($page);\r
+               $out = $this->makeSWFFiles($page);\r
+               $this->extractLinks($page,$out,$multiply);\r
+       }\r
+\r
+       public function processAllPages()\r
+       {\r
+               for($i = 1;$i <= $this->generalInfos['pages'];$i++) {\r
+                       $this->processOnePage($i);\r
+               }\r
+       }\r
+\r
+       public function processRange($range)\r
+       {\r
+               foreach($pages as $i) {\r
+                       $this->processOnePage($i);\r
+               }\r
+       }\r
+\r
+       public function getTexts($page = null)\r
        {\r
                $pdftotext = new cubeCommandLine('pdftotext', null, true);\r
                $pdftotext->setArg('q');\r
-               $pdftotext->setArg('f', 1);\r
-               $pdftotext->setArg('l', 10000);\r
+               if (is_null($page)) {\r
+                       $pdftotext->setArg('f', 1);\r
+                       $pdftotext->setArg('l', 10000);\r
+               } else {\r
+                       $pdftotext->setArg('f', $page);\r
+                       $pdftotext->setArg('l', $page);\r
+               }\r
                $pdftotext->setArg('-eol', 'unix');\r
                $pdftotext->setArg('-enc', 'UTF-8');\r
                $pdftotext->setArg(null, $this->in);\r
@@ -153,26 +181,26 @@ class wsDocument extends cubeMetier {
                $this->addToLog($pdftotext);\r
        }\r
 \r
-       public function makeMiniShot()\r
+       public function makeMiniShot($page = null)\r
        {\r
-               $this->makeShotFixedWidth('p', 300, 70, 4, 'GS');\r
+               $this->makeShotFixedWidth($page, 'p', 100, 70, 4, 'GS');\r
        }\r
 \r
-       public function makeRealShot()\r
+       public function makeRealShot($page = null)\r
        {\r
-               $this->makeShot('te', 72);\r
+               $this->makeShot($page, 'te', 72);\r
        }\r
 \r
-       public function makeShotFixedWidth($prefix, $w, $quality = 90, $antialiasing = 4, $method = 'GS')\r
+       public function makeShotFixedWidth($page = null, $prefix = '', $w = 100, $quality = 90, $antialiasing = 4, $method = 'GS')\r
        {\r
                // Make thumbs of $w width\r
                // resolution 72 make 1pt=1px\r
                $width = $this->generalInfos['size'][0];\r
                $ratio = $width / $w;\r
-               $this->makeShot($prefix, round(72 / $ratio, 2), $quality, $antialiasing, $method);\r
+               $this->makeShot($page, $prefix, round(72 / $ratio, 2), $quality, $antialiasing, $method);\r
        }\r
 \r
-       public function makeShotFixedHeight($prefix, $h, $quality = 90, $antialiasing = 4, $method = 'GS')\r
+       public function makeShotFixedHeight($page = null, $prefix = '', $h = '', $quality = 90, $antialiasing = 4, $method = 'GS')\r
        {\r
                // Make thumbs of $w height\r
                // resolution 72 make 1pt=1px\r
@@ -181,7 +209,7 @@ class wsDocument extends cubeMetier {
                $this->makeShot($prefix, round(72 / $ratio, 2), $quality, $antialiasing, $method);\r
        }\r
 \r
-       public function makeShot($prefix, $resolution = 72, $quality = 90, $antialiasing = 4, $method = 'GS')\r
+       public function makeShot($page = null, $prefix = '', $resolution = 72, $quality = 90, $antialiasing = 4, $method = 'GS')\r
        {\r
                // Delete all old files\r
                for($i = 1;$i <= $this->generalInfos['pages'];$i++) {\r
@@ -190,13 +218,16 @@ class wsDocument extends cubeMetier {
                        }\r
                }\r
                if ($method == 'GS') {\r
-                       $this->makeShotGS($prefix, $resolution, $quality, $antialiasing);\r
+                       $this->makeShotGS($page, $prefix, $resolution, $quality, $antialiasing);\r
                } elseif ($method == 'PNM') {\r
-                       $this->makeShotPNM($prefix, $resolution, $quality, $antialiasing);\r
+                       $this->makeShotPNM($page, $prefix, $resolution, $quality, $antialiasing);\r
                }\r
                // Test the result by checking all files\r
                $error = false;\r
-               for($i = 1;$i <= $this->generalInfos['pages'];$i++) {\r
+               $startpage = is_null($page)?1:$page;\r
+               $endpage = is_null($page)?$this->generalInfos['pages']:$page;\r
+\r
+               for($i = $startpage;$i <= $endpage;$i++) {\r
                        if (!file_exists($this->out . $prefix . $i . '.jpg')) {\r
                                $error = true;\r
                                break;\r
@@ -205,14 +236,14 @@ class wsDocument extends cubeMetier {
                // If error, we try to make thumbs with other method\r
                if ($error) {\r
                        if ($method == 'GS') {\r
-                               $this->makeShotPNM($prefix, $resolution, $quality, $antialiasing);\r
+                               $this->makeShotPNM($page, $prefix, $resolution, $quality, $antialiasing);\r
                        } elseif ($method == 'PNM') {\r
-                               $this->makeShotGS($prefix, $resolution, $quality, $antialiasing);\r
+                               $this->makeShotGS($page, $prefix, $resolution, $quality, $antialiasing);\r
                        }\r
                }\r
        }\r
 \r
-       protected function makeShotGS($prefix, $resolution = 72, $quality = 90, $antialiasing = 4)\r
+       protected function makeShotGS($page = null, $prefix = null, $resolution = 72, $quality = 90, $antialiasing = 4)\r
        {\r
                // Fabrication des thumbanails avec ghostscript\r
                $gs = new cubeCommandLine('gs', null, true);\r
@@ -227,6 +258,10 @@ class wsDocument extends cubeMetier {
                $gs->setArg('-dTextAlphaBits=' . $antialiasing);\r
                $gs->setArg('-dGraphicsAlphaBits=' . $antialiasing);\r
                // $gs->setArg('-dUseCropBox');\r
+               if (!is_null($page)) {\r
+                       $gs->setArg('-dStartPage=' . $page);\r
+                       $gs->setArg('-dEndPage=' . $page);\r
+               }\r
                $gs->setArg('-sOutputFile=' . $this->out . '/' . $prefix . '%d.jpg');\r
                $gs->setArg('-dAutoRotatePages=/None');\r
                $gs->setArg(null, $this->in);\r
@@ -234,14 +269,19 @@ class wsDocument extends cubeMetier {
                $this->addToLog($gs);\r
        }\r
 \r
-       protected function makeShotPNM($prefix, $resolution = 72, $quality = 90, $antialiasing = 4)\r
+       protected function makeShotPNM($page = null, $prefix = '', $resolution = 72, $quality = 90, $antialiasing = 4)\r
        {\r
                $antialiasing = $antialiasing?'yes':'no';\r
                $resolution = round($resolution);\r
                // Exporte les fichiers\r
                $pdftoppm = new cubeCommandLine('pdftoppm', null, true);\r
-               $pdftoppm->setArg('f', 1);\r
-               $pdftoppm->setArg('l', 10000);\r
+               if (is_null($page)) {\r
+                       $pdftoppm->setArg('f', 1);\r
+                       $pdftoppm->setArg('l', 10000);\r
+               } else {\r
+                       $pdftoppm->setArg('f', $page);\r
+                       $pdftoppm->setArg('l', $page);\r
+               }\r
 \r
                $pdftoppm->setArg('-freetype yes');\r
                $pdftoppm->setArg('-aa ' . $antialiasing);\r
@@ -255,7 +295,9 @@ class wsDocument extends cubeMetier {
                $pdftoppm->execute();\r
                $this->addToLog($pdftoppm);\r
 \r
-               for($i = 1;true;$i++) {\r
+               $startpage = is_null($page)?1:$page;\r
+\r
+               for($i = $startpage;true;$i++) {\r
                        $ppmfile = $this->out . 'ppm-' . cubeMath::fill($i, 6) . '.ppm';\r
                        $jpegfile = $this->out . $prefix . $i . '.jpg';\r
                        if (!file_exists($ppmfile)) {\r
@@ -272,13 +314,13 @@ class wsDocument extends cubeMetier {
                }\r
        }\r
 \r
-       public function makeSWFFiles($resolution = 150, $quality = 90, $storeAllChars = true, $maxObjects = 1800, $method = 'flatten')\r
+       public function makeSWFFiles($page = null, $resolution = 150, $quality = 90, $storeAllChars = true, $maxObjects = 1800, $method = 'normal')\r
        {\r
                if ($maxObjects <= 1) {\r
                        $method = 'poly2bitmap';\r
                }\r
 \r
-               $out = $this->pdf2swf($resolution, $quality, $storeAllChars, $method);\r
+               $out = $this->pdf2swf($page, $resolution, $quality, $storeAllChars, $method);\r
                // Analyse de la sortie pour détecter des typos manquantes\r
                $overflow = false;\r
                $overflowObjects = false;\r
@@ -312,14 +354,16 @@ class wsDocument extends cubeMetier {
                if (!$written && !$overflow) {\r
                        // Si le fichier n'a pas été généré et que il était en plus n'était pas en overflow,\r
                        // on tente directement la méthode de barbare\r
+                       $out = $this->pdf2swf($page, $resolution, $quality, false, 'barbare');\r
                } elseif ($overflow || $overflowObjects) {\r
                        // Si le nombre d'objets max ou définis par l'utilisateur est trop important\r
                        // On écrase les graphismes.\r
-                       $out = $this->pdf2swf($resolution, $quality, $storeAllChars, 'poly2bitmap');\r
+                       $out = $this->pdf2swf($page, $resolution, $quality, $storeAllChars, 'poly2bitmap');\r
                }\r
+               return $out;\r
        }\r
 \r
-       protected function pdf2swf($resolution = 150, $quality = 90, $storeAllChars = true, $method = 'flatten')\r
+       protected function pdf2swf($page = null, $resolution = 150, $quality = 90, $storeAllChars = true, $method = 'normal')\r
        {\r
                /*\r
 -h , --help                    Print short help message and exit\r
@@ -393,65 +437,97 @@ splinequality=<value>       Set the quality of spline convertion to value (0-100
 disablelinks                Disable links.\r
        */\r
 \r
-               $resolution2multiply = array(72 => 2, 100 => 2, 150 => 3, 200 => 3, 300 => 3, 450 => 4, 600 => 5);\r
-\r
-               $pdf2swf = new cubeCommandLine('pdf2swf', null, true);\r
-               if ($method == 'flatten') {\r
-                       // Default\r
-                       $pdf2swf->setArg('flatten');\r
-                       $multiply = 1;\r
-               } elseif ($method == 'poly2bitmap') {\r
-                       // Raster graphics, keep texts\r
-                       $pdf2swf->setArg('poly2bitmap');\r
-                       $multiply = $resolution2multiply[$resolution];\r
-                       $pdf2swf->setArg('multiply', $multiply);\r
-               } elseif ($method == 'bitmap') {\r
-                       // Raster all\r
-                       $pdf2swf->setArg('bitmap');\r
-                       $multiply = $resolution2multiply[$resolution];\r
-                       $pdf2swf->setArg('multiply', $multiply);\r
-               }\r
+               if ($method != 'barbare') {\r
+                       $resolution2multiply = array(72 => 2, 100 => 2, 150 => 3, 200 => 3, 300 => 3, 450 => 4, 600 => 5);\r
 \r
-               $pdf2swf->setArg('stop');\r
-               $pdf2swf->setManualArg('-vvvv');\r
-               $pdf2swf->setArg('T', 9);\r
-               if ($storeAllChars) {\r
-                       $pdf2swf->setArg('fonts');\r
-               }\r
-               if (DEV) {\r
-                       $pdf2swf->setArg('F', 'C:/Windows/Fonts');\r
-               } else {\r
-                       $pdf2swf->setArg('F', '/home/typo/fonts');\r
-               }\r
-               $pdf2swf->setArg('set subpixels', $resolution / 72);\r
-               $pdf2swf->setArg('set jpegquality', $quality);\r
-               $pdf2swf->setArg('set disablelinks');\r
-               $pdf2swf->setArg('set dots');\r
+                       $pdf2swf = new cubeCommandLine('pdf2swf', null, true);\r
+                       if (!is_null($page)) {\r
+                               $pdf2swf->setArg('p', $page);\r
+                       }\r
+                       if ($method == 'normal') {\r
+                               // Default\r
+                               $multiply=1;\r
+                       } elseif ($method == 'flatten') {\r
+                               $pdf2swf->setArg('flatten');\r
+                               $multiply=1;\r
+                       } elseif ($method == 'poly2bitmap') {\r
+                               // Raster graphics, keep texts\r
+                               $pdf2swf->setArg('poly2bitmap');\r
+                               $multiply = $resolution2multiply[$resolution];\r
+                               $pdf2swf->setArg('multiply', $multiply);\r
+                       } elseif ($method == 'bitmap') {\r
+                               // Raster all\r
+                               $pdf2swf->setArg('bitmap');\r
+                               $multiply = $resolution2multiply[$resolution];\r
+                               $pdf2swf->setArg('multiply', $multiply);\r
+                       }\r
+\r
+                       $pdf2swf->setArg('stop');\r
+                       $pdf2swf->setManualArg('-vvvv');\r
+                       $pdf2swf->setArg('T', 8);\r
+                       if ($storeAllChars) {\r
+                               $pdf2swf->setArg('fonts');\r
+                       }\r
+                       if (DEV) {\r
+                               $pdf2swf->setArg('F', 'C:/Windows/Fonts');\r
+                       } else {\r
+                               $pdf2swf->setArg('F', '/home/typo/fonts');\r
+                       }\r
+                       $pdf2swf->setArg('set subpixels', $resolution / 72);\r
+                       $pdf2swf->setArg('set jpegquality', $quality);\r
+                       $pdf2swf->setArg('set disablelinks');\r
+                       $pdf2swf->setArg('set dots');\r
 \r
-               $pdf2swf->setArg(null, $this->in);\r
-               $pdf2swf->setArg('output', $this->out . 'p%.swf');\r
-               $pdf2swf->execute();\r
+                       $pdf2swf->setArg(null, $this->in);\r
+                       $pdf2swf->setArg('output', $this->out . 'p%.swf');\r
+                       $pdf2swf->execute();\r
 \r
-               $this->addToLog($pdf2swf, true);\r
+                       $this->addToLog($pdf2swf, true);\r
+                       return $pdf2swf->outputfile;\r
+               } else {\r
+                       return $this->pdf2swfBarbare($page, $resolution, $quality);\r
+               }\r
+       }\r
 \r
-               return $pdf2swf->outputfile;\r
+       protected function makeAS3($swffile)\r
+       {\r
+               $swfcombine = new cubeCommandLine('swfcombine');\r
+               $swfcombine->setEnv('PATH', self::$path);\r
+               $swfcombine->setArg('merge');\r
+               $swfcombine->setArg('stack1');\r
+               $swfcombine->setArg('z');\r
+               $swfcombine->setManualArg('-vvvv');\r
+               $swfcombine->setArg('o', $swffile);\r
+               $swfcombine->setArg(null, ROOT . '/swf/as3Container.swf');\r
+               $swfcombine->setManualArg('content=' . $swffile);\r
+               $swfcombine->execute();\r
+               $this->addToLog($swfcombine);\r
        }\r
 \r
-       protected function pdf2swfBarbare($resolution, $quality, $page = 'all')\r
+       protected function pdf2swfBarbare($page = null, $resolution = 150, $quality = 85)\r
        {\r
                // Fabrique les images\r
-               $this->makeShot('barbare', $resolution, $quality, 'PNM');\r
+               $this->makeShot($page, 'barbare', $resolution, $quality, 'PNM');\r
                // A partir des images, on crée les swf\r
-               $jpeg2swf = new cubeCommandLine('jpeg2swf');\r
-               $jpeg2swf->setArg('q', $quality);\r
-               $jpeg2swf->setArg('o', $this->out . 'p' . $i . '.swf');\r
-               $jpeg2swf->setArg('f');\r
-               $jpeg2swf->setArg('T', 9);\r
-               $jpeg2swf->setArg(null, $this->out . 'barbare' . $i . '.jpg');\r
-               $jpeg2swf->execute();\r
-               $this->addToLog($jpeg2swf);\r
-               // Suppression du jpeg\r
-               @unlink($this->out . '/barbare' . $page . '.jpg') ;\r
+               if (is_null($page)) {\r
+                       $startpage = 1;\r
+                       $endpage = $this->generalInfos['pages'];\r
+               } else {\r
+                       $startpage = $endpage = $page;\r
+               }\r
+\r
+               for($i = $startpage;$i <= $endpage;$i++) {\r
+                       $jpeg2swf = new cubeCommandLine('jpeg2swf');\r
+                       $jpeg2swf->setArg('q', $quality);\r
+                       $jpeg2swf->setArg('o', $this->out . 'p' . $i . '.swf');\r
+                       $jpeg2swf->setArg('f');\r
+                       $jpeg2swf->setArg(null, $this->out . 'barbare' . $i . '.jpg');\r
+                       $jpeg2swf->execute();\r
+                       $this->addToLog($jpeg2swf);\r
+                       // Suppression du jpeg\r
+                       @unlink($this->out . '/barbare' . $i . '.jpg') ;\r
+               }\r
+               return '';\r
        }\r
 \r
        public function addToLog($cl, $output = true)\r
@@ -463,6 +539,58 @@ disablelinks                Disable links.
                fwrite($this->log_pointer, $c);\r
        }\r
 \r
+       public function extractLinks($page, $logfile, $multiply = 1)\r
+       {\r
+               /*\r
+DEBUG   drawlink\r
+TRACE   drawlink 122.00/579.00 236.00/579.00 236.00/527.00 122.00/527.00\r
+DEBUG   |     moveTo 122.00 579.00\r
+DEBUG   |     lineTo 236.00 579.00\r
+DEBUG   |     lineTo 236.00 527.00\r
+DEBUG   |     lineTo 122.00 527.00\r
+DEBUG   |     lineTo 122.00 579.00\r
+TRACE   drawlink action=3\r
+TRACE   drawlink s=http://www.ladocumentationfrancaise.fr/\r
+*/\r
+\r
+               $fp = fopen($logfile, 'rb');\r
+               $log = 'BEGIN extracting link' . "\n";\r
+               $link = null;\r
+               while ($line = fgets($fp)) {\r
+                       $line = trim($line);\r
+                       if (preg_match('|TRACE   drawlink(( [-0-9\./]+)+)|', $line, $matches)) {\r
+                               $log .= 'FOUND a link' . "\n";\r
+                               $link = new fwsLink($multiply);\r
+                               $log .= 'SETTING POINTS ' . $matches[1] . "\n";\r
+                               $points = explode(' ', trim($matches[1]));\r
+                               foreach($points as $point) {\r
+                                       $p = explode('/', $point);\r
+                                       $log .= 'SET POINT ' . $p[0] . ' ' . $p[1] . "\n";\r
+                                       $link->addPoint($p);\r
+                               }\r
+                       } elseif (preg_match('|TRACE   drawlink action=(.*)|', $line, $matches)) {\r
+                               $log .= 'SETTING ACTION ' . $matches[1] . "\n";\r
+                               if (is_null($link)) {\r
+                                       continue;\r
+                               }\r
+                               $link->setAction($matches[1]);\r
+                       } elseif (preg_match('|TRACE   drawlink s=(.*)|', $line, $matches)) {\r
+                               $log .= 'SETTING LINK ' . $matches[1] . "\n";\r
+                               if (is_null($link)) {\r
+                                       continue;\r
+                               }\r
+                               $link->setLink($matches[1]);\r
+                               $this->links[$page][] = $link->toArray();\r
+                               $log .= 'SAVE LINK' . print_r($link->toArray(), true) . "\n";\r
+                               $link = null;\r
+                       }\r
+               }\r
+               $log .= 'END OF EXTRACTING' . "\n";\r
+               fclose($fp);\r
+\r
+               return $log;\r
+       }\r
+\r
        public function __destruct()\r
        {\r
                if (isset($this->log_pointer)) {\r