none
Powershell и Ghostscript. Конвертирование многостраничного PDF в Jpeg RRS feed

  • Вопрос

  • Добрый день.

    Может кто сталкивался - подскажет что не так. Вопрос скорей даже больше по Ghostscript. Создал по примерам скрипт:

    #Path to your Ghostscript EXE
    $tool = 'C:\\Ghostscript\\bin\\gswin64c.exe'
    
    #Directory containing the PDF files that will be converted
    $inputDir = 'C:\\PDF\\'
    
    #Output path where the JPEG files will be saved
    $outputDir = 'C:\\out\\'
    
    $pdfs = get-childitem $inputDir -recurse | where {$_.Extension -match "pdf"}
    
    #Used for calculating progress bar
    $i = 0
    $cnt = (Get-ChildItem $inputDir).Count
    
    foreach($pdf in $pdfs)
    {
    
    	$jpeg = $outputDir + $pdf.BaseName + ".jpeg"
        if(test-path $jpeg)
        {
            "jpeg file already exists " + $jpeg
        }
        else        
        {   
            'Processing ' + $pdf.Name        
            $param = "-sOutputFile=$jpeg"
            & $tool -q -dNOPAUSE -sDEVICE=jpeg $param -r300 $pdf.FullName -c quit
        }
    	$i++
    	Write-Progress -Activity "Processing: $i/$cnt   $pdf" `
    -Status "Progress:" -PercentComplete ($i/$cnt*100)
    	
    }

    Нужно чтобы на выходе получились файлы grayscale jpeg. Если запустить в приведенном виде - то создаются jpeg лишь с первых страниц документов. Если начинаю добавлять в строку  

    & $tool -q -dNOPAUSE -sDEVICE=jpeg $param -r300 $pdf.FullName -c quit

    дополнительные параметры (цветность - grayscale)- то вообще перестает работать. 

    Причем если тоже самое сделать для tiff - то все хорошо.

    Может кто сталкивался с такой задачей...

    19 августа 2014 г. 12:38

Ответы

  • При такой строчке в конечной директории файлов jpeg тоже не создается...

    Переменную out указали в пути? Т.к. если не указали, то будет создаваться в текущей папке. Версию GhostScript обновить до последней, т.к со старыми есть проблема.

     

    • Помечено в качестве ответа Dmitry_KV 19 августа 2014 г. 17:26
    19 августа 2014 г. 14:24
    Отвечающий

Все ответы

  • & $tool -q -dNOPAUSE  -sDEVICE=jpeggray -o "$($pdf.Name)_%04d.jpg" -r300 $pdf.FullName  -c quit


    • Изменено KazunEditor 19 августа 2014 г. 13:06
    19 августа 2014 г. 13:05
    Отвечающий
  • При такой строчке в конечной директории файлов jpeg тоже не создается...

    19 августа 2014 г. 13:37
  • При такой строчке в конечной директории файлов jpeg тоже не создается...

    Переменную out указали в пути? Т.к. если не указали, то будет создаваться в текущей папке. Версию GhostScript обновить до последней, т.к со старыми есть проблема.

     

    • Помечено в качестве ответа Dmitry_KV 19 августа 2014 г. 17:26
    19 августа 2014 г. 14:24
    Отвечающий
  • Стоит ghostscript portable версии 9.14. В итоге заработало. Спасибо за помощь. Оставлю итоговый вариант - может кому понадобится еще.

    #Path to your Ghostscript EXE
    $tool = 'C:\\Ghostscript\\bin\\gswin64c.exe'
    
    #Directory containing the PDF files that will be converted
    $inputDir = 'C:\\PDF\\'
    
    #Output path where the JPEG files will be saved
    $outputDir = 'C:\\out\\'
    
    $pdfs = get-childitem $inputDir -recurse | where {$_.Extension -match "pdf"}
    
    #Used for calculating progress bar
    $i = 0
    $cnt = (Get-ChildItem $inputDir).Count
    
    foreach($pdf in $pdfs)
    {
    
    	$jpeg = $outputDir + $pdf.BaseName + ".jpeg"
        if(test-path $jpeg)
        {
            "jpeg file already exists " + $jpeg
        }
        else        
        {   
            'Processing ' + $pdf.Name        
            $param = "-sOutputFile=$jpeg"
            & $tool -q -dNOPAUSE  -sDEVICE=jpeggray -o "$outputDir\$($pdf.Name)_%04d.jpg" -r300 $pdf.FullName  -c quit dir $outputDir
        }
    	$i++
    	Write-Progress -Activity "Processing: $i/$cnt   $pdf" `
    -Status "Progress:" -PercentComplete ($i/$cnt*100)
    	
    }

    • Изменено Dmitry_KV 19 августа 2014 г. 17:25
    19 августа 2014 г. 17:19