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
$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
$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
}\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
// 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
$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
$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
$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
}\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
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
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
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