]> _ Git - cubist_pdf.git/commitdiff
wait #6149 @0.25
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Thu, 18 Jan 2024 12:10:11 +0000 (13:10 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Thu, 18 Jan 2024 12:10:11 +0000 (13:10 +0100)
.idea/cubist_pdf.iml
.idea/deployment.xml
.idea/php.xml
src/PDFTools.php

index 5fb2ac80bc1d89035ff842324d167f1b864fbb15..a25224413f89d081c30ac23ecd9a1deb17748ac1 100644 (file)
@@ -74,6 +74,7 @@
       <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-php83" />
       <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-uuid" />
       <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/uid" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/carbonphp/carbon-doctrine-types" />
     </content>
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
index 6b9787362a7ae563e1cedaa78dca08267f841288..43d3d7bc1e1394adf2ac1d9c759db33b33e17eed 100644 (file)
@@ -1,8 +1,22 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
-  <component name="PublishConfigData" autoUpload="Always" serverName="toolbox.fluidbook.com" remoteFilesAllowedToDisappearOnAutoupload="false" confirmBeforeUploading="false" showAutoUploadSettingsWarning="false">
+  <component name="PublishConfigData" autoUpload="Always" serverName="alphaville.cubedesigners.com" remoteFilesAllowedToDisappearOnAutoupload="false" confirmBeforeUploading="false" showAutoUploadSettingsWarning="false">
     <option name="confirmBeforeUploading" value="false" />
     <serverData>
+      <paths name="alpha.toolbox.fluidbook.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="alpha.toolbox.fluidbook.com (Host)">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
       <paths name="alphaville.cubedesigners.com">
         <serverdata>
           <mappings>
           </mappings>
         </serverdata>
       </paths>
+      <paths name="extranet.cubedesigners.com (Host)">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
       <paths name="extranet.preventicom.com">
         <serverdata>
           <mappings>
           </mappings>
         </serverdata>
       </paths>
-      <paths name="pro.cubjeans.com">
-        <serverdata>
-          <mappings>
-            <mapping local="$PROJECT_DIR$" web="/" />
-          </mappings>
-        </serverdata>
-      </paths>
       <paths name="simeox.dev.cubedesigners.com">
         <serverdata>
           <mappings>
           </mappings>
         </serverdata>
       </paths>
-      <paths name="vps-e87c4d02.vps.ovh.net">
+      <paths name="v4.fluidbook.com">
         <serverdata>
           <mappings>
             <mapping local="$PROJECT_DIR$" web="/" />
           </mappings>
         </serverdata>
       </paths>
-      <paths name="workshop.fluidbook.com">
+      <paths name="vps-e87c4d02.vps.ovh.net">
         <serverdata>
           <mappings>
             <mapping local="$PROJECT_DIR$" web="/" />
           </mappings>
         </serverdata>
       </paths>
-      <paths name="www.adangelis.com">
+      <paths name="workshop.fluidbook.com">
         <serverdata>
           <mappings>
             <mapping local="$PROJECT_DIR$" web="/" />
           </mappings>
         </serverdata>
       </paths>
-      <paths name="www.animeland.com">
+      <paths name="www.adangelis.com">
         <serverdata>
           <mappings>
             <mapping local="$PROJECT_DIR$" web="/" />
           </mappings>
         </serverdata>
       </paths>
-      <paths name="www.cubjeans.com">
-        <serverdata>
-          <mappings>
-            <mapping local="$PROJECT_DIR$" web="/" />
-          </mappings>
-        </serverdata>
-      </paths>
       <paths name="www.detouteslescouleurs.com">
         <serverdata>
           <mappings>
           </mappings>
         </serverdata>
       </paths>
-      <paths name="www.enko-running-shoes.com">
-        <serverdata>
-          <mappings>
-            <mapping local="$PROJECT_DIR$" web="/" />
-          </mappings>
-        </serverdata>
-      </paths>
       <paths name="www.eurofinsadmebioanalyses.com">
         <serverdata>
           <mappings>
           </mappings>
         </serverdata>
       </paths>
-      <paths name="www.kadreo.com">
-        <serverdata>
-          <mappings>
-            <mapping local="$PROJECT_DIR$" web="/" />
-          </mappings>
-        </serverdata>
-      </paths>
       <paths name="www.mdryvescouzy.com">
         <serverdata>
           <mappings>
           </mappings>
         </serverdata>
       </paths>
-      <paths name="www.preventicom.com">
-        <serverdata>
-          <mappings>
-            <mapping local="$PROJECT_DIR$" web="/" />
-          </mappings>
-        </serverdata>
-      </paths>
-      <paths name="www.rbcmobilier.com">
-        <serverdata>
-          <mappings>
-            <mapping local="$PROJECT_DIR$" web="/" />
-          </mappings>
-        </serverdata>
-      </paths>
-      <paths name="www.renversez.com">
-        <serverdata>
-          <mappings>
-            <mapping local="$PROJECT_DIR$" web="/" />
-          </mappings>
-        </serverdata>
-      </paths>
-      <paths name="www.sycomore-am.com (1)">
-        <serverdata>
-          <mappings>
-            <mapping local="$PROJECT_DIR$" web="/" />
-          </mappings>
-        </serverdata>
-      </paths>
     </serverData>
     <option name="myAutoUpload" value="ALWAYS" />
   </component>
index 64d41f3074695255b29d194a30ce93d476268f5f..bae7fdea637172a90d11f213ee01ae09c8429153 100644 (file)
@@ -71,6 +71,7 @@
       <path value="$PROJECT_DIR$/vendor/symfony/polyfill-uuid" />
       <path value="$PROJECT_DIR$/vendor/symfony/uid" />
       <path value="$PROJECT_DIR$/vendor/symfony/mailer" />
+      <path value="$PROJECT_DIR$/vendor/carbonphp/carbon-doctrine-types" />
     </include_path>
   </component>
   <component name="PhpProjectSharedConfiguration" php_language_level="7.4">
index fe384a27aa894fe8acaa46ad173259b1918eb7e6..280ae5d5dd7ac0de1a74ffc461b132116f939efd 100644 (file)
@@ -12,7 +12,6 @@ use DOMElement;
 use DOMNode;
 use DOMXPath;
 use Cubist\PDF\CommandLine\FWSTK;
-use Illuminate\Support\Facades\Log;
 
 class PDFTools
 {
@@ -231,7 +230,7 @@ class PDFTools
     }
 
 
-    public static function makeBaseSVGFile($in, $out, $page)
+    public static function makeBaseSVGFile($in, $out, $page, $attempts = 3)
     {
         $pdftocairo = new CommandLine('pdftocairo');
         $pdftocairo->setArg('f', $page);
@@ -242,6 +241,14 @@ class PDFTools
         $pdftocairo->setArg(null, $in);
         $pdftocairo->setArg(null, $out);
         $pdftocairo->execute();
+
+        if (self::hasPopplerError($pdftocairo->getOutput())) {
+            if ($attempts > 0) {
+                static::makeBaseSVGFile($in, $out, $page, $attempts - 1);
+            } else {
+                unlink($out);
+            }
+        }
     }
 
     public static function makeTextSVGFile($in, $out)
@@ -371,7 +378,7 @@ class PDFTools
         $antialiasing = $antialiasing ? 'yes' : 'no';
         $freetype = $texts ? 'yes' : 'no';
         // Exporte les fichiers
-        $pdftoppm = new CommandLine('pdftoppm', null, true);
+        $pdftoppm = new CommandLine('pdftoppm', null, true, 'pdftoppm_' . ($texts ? 't' : 'h') . '_' . (round($resolution)) . '_');
         $pdftoppm->setArg('f', $page);
         $pdftoppm->setArg('l', $page);
         $pdftoppm->setArg('-cropbox');
@@ -388,14 +395,34 @@ class PDFTools
         if (null !== $height) {
             $pdftoppm->setArg('-scale-to-y ' . $height);
         }
+        if ($format === 'jpg') {
+            $pdftoppm->setArg('-jpeg');
+            $pdftoppm->setArg('-jpegopt "quality=' . $quality . '"');
+        } else if ($format === 'png') {
+            $pdftoppm->setArg('-png');
+        }
         $pdftoppm->setArg(null, $in);
         $pdftoppm->setArg(null, $tmp);
         $pdftoppm->execute();
-        $tmp .= '.ppm';
+        $tmp .= '.' . $format;
+
+        if (self::hasPopplerError($pdftoppm->getOutput())) {
+            unlink($tmp);
+            $pdftoppm->error_log();
+            return;
+        }
+
+        if (file_exists($tmp)) {
+            rename($tmp, $out);
+        } else {
+            $pdftoppm->error_log();
+        }
+    }
 
-        $output = $pdftoppm->getOutput();
+    protected static function hasPopplerError($output)
+    {
         $errors = [
-            //'end of file inside dictionary',
+            'end of file inside',
             'leftover args in content stream',
             'document stream is empty',
             //'premature end of data segment',
@@ -403,36 +430,16 @@ class PDFTools
             //'couldn\'t find trailer dictionary',
             //'invalid xref entry',
             //'incorrect stream length',
-            //'try to reconstruct',
+            'try to reconstruct',
             //'error opening pdf file',
         ];
 
         foreach ($errors as $error) {
             if (stristr($output, $error)) {
-                unlink($tmp);
-                $pdftoppm->debug();
-                return;
+                return true;
             }
         }
-
-
-        if (file_exists($tmp)) {
-            if ($format === 'jpg') {
-                $cjpeg = new CommandLine('cjpeg', null, true);
-                $cjpeg->setArg('-quality ' . ($quality + 6));
-                $cjpeg->setArg('-outfile ' . $out);
-                $cjpeg->setArg(null, $tmp);
-                $cjpeg->execute();
-            } else if ($format === 'png') {
-                $pnmtopng = new CommandLine('pnmtopng', $out, false);
-                $pnmtopng->setArg('-background white');
-                $pnmtopng->setArg(null, $tmp);
-                $pnmtopng->execute();
-            }
-            unlink($tmp);
-        } else {
-            $pdftoppm->debug();
-        }
+        return false;
     }
 
     public static function getThumbFromPDF($pdf, $page, $format = 'jpg')