ImageMagick or GhostScript: convert a multi-page TIFF to a multi-page PDF
Asked Answered
C

5

9

I need to convert a multi-page TIFF to a multi-page PDF. I have access to ImageMagick and GhostScript (in *nix environment). How do I do this? Thanks.

UPDATE:

It turns out that my test file was wrong (it didn't have multiple pages), which made me think my command was wrong. This seems to work for me: convert input.tif output.pdf

Changeful answered 17/1, 2011 at 23:41 Comment(1)
See also: Tools to convert multipage PDF to multipage TIFFPerreault
J
1

Use a tool called tiff2ps from the tool set provided by libtiff:

http://www.libtiff.org/tools.html

Once you have the tiff in ps format, you can call ps2pdf to convert to pdf, which is part of the ghostscript package in most linux distributions.

Jaworski answered 18/1, 2011 at 0:2 Comment(5)
is there a way to do this with just IM and/or GS?Changeful
Try 'convert original.tif output%d.tif' and see if it splits it into multiple files. Then in a script convert each to a postscript using Imagemagick. Then use ghostscript to print each ps file to the pdf device.Jaworski
what is the point of the intermediary step of converting TIFF to PS? If I can combine multiple TIFFs into a PDF directly, should I use that approach?Changeful
Sure. It has been some time since I used ImageMagick, so the intermediate step was once necessary. If you can go straight in one step, as another poster has commented, do so. Otherwise if you do encounter problems, try my suggestion.Jaworski
Your answer will basically work correctly. But you missed the option to use tiff2pdf directly (if you have a not-too-old libtiff). Please update your answer accordingly.Unsung
R
12
convert multipage.tiff -density 300x300 -compress jpeg multipage.pdf

This should work, though there can be some issues.

Repugnant answered 18/1, 2011 at 0:8 Comment(3)
won't this result in a 1 page PDF?Changeful
@StackOverflowNewbie: When I tried it, it resulted in a multipage PDF on my version. Seems to work the same as listing the files separately.Repugnant
@StackOverflowNewbie: Personally, I find IM can make a right hash of PDFs, so would probably split the TIFF using IM to single page PDFs, and use pdftk to combine them.Repugnant
J
1

Use a tool called tiff2ps from the tool set provided by libtiff:

http://www.libtiff.org/tools.html

Once you have the tiff in ps format, you can call ps2pdf to convert to pdf, which is part of the ghostscript package in most linux distributions.

Jaworski answered 18/1, 2011 at 0:2 Comment(5)
is there a way to do this with just IM and/or GS?Changeful
Try 'convert original.tif output%d.tif' and see if it splits it into multiple files. Then in a script convert each to a postscript using Imagemagick. Then use ghostscript to print each ps file to the pdf device.Jaworski
what is the point of the intermediary step of converting TIFF to PS? If I can combine multiple TIFFs into a PDF directly, should I use that approach?Changeful
Sure. It has been some time since I used ImageMagick, so the intermediate step was once necessary. If you can go straight in one step, as another poster has commented, do so. Otherwise if you do encounter problems, try my suggestion.Jaworski
Your answer will basically work correctly. But you missed the option to use tiff2pdf directly (if you have a not-too-old libtiff). Please update your answer accordingly.Unsung
H
1

Use following code to generate multi page pdf from multi page tiff file:

<?php

$images = new Imagick($pathToYourFile);

foreach($images as $i=>$image) {
    $image->setImageFormat("pdf"); 
    $images->addImage( $image );
}

$images->writeImages($yourFileName.'.pdf', true);

?>
Hurleigh answered 27/12, 2017 at 10:38 Comment(1)
The question does not ask for PHP solution.Kiangsu
B
0

I had a similar situation of converting a multipage TIFF file. but in my case the resulting extension was JPG thumbnail. However, I believe that this following code will run for converting TIFF to PDF. https://web.archive.org/web/20170211082909/http://sourcecodemania.com/how-to-convert-text-to-speech-with-php/

<?php
try
{
// Saving every page of a TIFF separately as a JPG thumbnail
$images = new Imagick("testing.tif"); 
foreach($images as $i=>$image) {
    // Providing 0 forces thumbnail Image to maintain aspect ratio
    $image->thumbnailImage(768,0);
    $image->writeImage("page".$i.".jpg");
    echo "<img src='page$i.jpg' alt='images' ></img>";
}
$images->clear();
}
catch(Exception $e)
{
        echo $e->getMessage();
}
?>
Belch answered 5/8, 2011 at 17:42 Comment(0)
W
0
#!/bin/bash
# scanadf frontend
# kdialog info at http://techbase.kde.org/Development/Tutorials/Shell_Scripting_with_KDE_Dialogs#Menu_and_Selection_Dialogs
# i/o redirection at http://tldp.org/LDP/abs/html/io-redirection.html
# variable to file i/o at http://www.linuxquestions.org/questions/programming-9/bash-script-%96-reading-and-writing variables-to-a-separate-file-365158/
#
#rev. 1.2 03.02.12
#
#NOTE: TO RUN THIS SCRIPT YOU WILL NEED TO CREATE THE DIRECTORIES REFERRED TO IN THE SCRIPT.
#THE ANSWER TO THE QUESTION IS THE TWO-PASS COMMANDS BELOW "convert" and "gs"
#THE CONVERT COMMAND COMBINES ALL THE TIFFS IN THE DIRECTORY INTO A SINGLE PDF
#THE GS (GHOSTSCRIPT) COMMAND RESIZES TO 8.5X11 AND COMPRESSES
#
#
#THIS IS A KDIALOG SCRIPT AND WILL ONLY RUN IN KDE.  KDIALOG COMMANDS COULD BE REPLACED BY DIALOG COMMANDS
#ALTERNATIVELY, THE KDIALOG COMMANDS COULD BE REPLACED BY COMMAND LINE COMMANDS AND RUN IN A TERMINAL.
#

yn1=1
cd ~/.getscan/
. config
while [ $yn1 = 1 ];
do
  cd ~/.getscan/tmp/
  kdialog --title "scanner activated" --passivepopup "scanner warming up"
  if [ $scnr = 2 ];then
      scanadf --mode $clr --resolution $res -y 279 --source 'Automatic Document Feeder(left aligned,Duplex)' 2>test.txt
  else
      scanadf --mode $clr --resolution $res -y 279 2>test.txt
  fi
  err1=$(cat test.txt)
  rm test.txt
#
#scanner error trap
#
  if [ $? = 1 ];then
    kdialog --title "scanner error" --msgbox "$err1"
  else
#
#don't want to accidentally create in tmp folder.
#"label" kdialog option didn't work
#
    kdialog --title "scanner info" --passivepopup "$err1" 5
    cd ~/downloads/transfer
    name=`kdialog --getsavefilename :newscan.pdf "*.pdf"`
    cd ~/.getscan/tmp/
#   convert * $name
    convert * tmp/temp.pdf
    gs -o $name -sDEVICE=pdfwrite -dPDFFitPage -r300x300 -g2550x3300 tmp/temp.pdf  
    rm *
    rm tmp/*
    okular $name
fi
  yn1=`kdialog --title "continue?" --radiolist "Select:" 1 "scan another document?" on 2 "stop" off 3 "change settings" off --geometry 150x100+300+300 `
if [ $yn1 = 2 ];then
    yn1="y"
fi
if [ $yn1 = 3 ];then
    cd ~/.getscan/
    . config
    if [ $scnr = 2 ];then
        scnr="ADF-Duplex"
    fi
    res1=`kdialog --title "scanner resolution" --radiolist "Select Resolution:" 1 "100" off 2 "200" off 3 "300" on 4 "400" off 5 "500" off 6 "600"`
    if [ $res1 = 3 ];then
      res1=300
    fi
    echo res=$res1 > config
    clr1=`kdialog --title "color" --radiolist "Select Resolution:" 1 "black & white" on 2 "24bit color" off`
    if [ $clr1 = 1 ];then
      clr1=black
    fi
    if [ $clr1 = 2 ];then
      clr1="'24bit color'"
    fi
    echo clr=$clr1 >> config
    scnr1=`kdialog --title "mode" --radiolist "Select Resolution:" 1 "ADF" on 2 "ADF duplex" off`
    if [ $scnr1 = 1 ];then
      scnr1="1"
    fi
    if [ $scnr1 = 2 ];then
      scnr1="2"
    fi
    echo scnr=$scnr1 >> config
    . config
    yn1=1
  fi
done
exit 0
Wil answered 2/3, 2012 at 18:4 Comment(1)
Thanks for posting an answer! While a code snippet could answer the question it's still great to add some addition information around, like explain, etc ..Worcestershire

© 2022 - 2024 — McMap. All rights reserved.