PDF To TIFF

找到的几种PDF To Tiff方法:

 

一:使用Ghostscript,开源项目,注意Win32和Win64版本。

免费,生成的大小适度的图片清晰度一般。当然可以设置生成很大的清晰文件。

下载地址:http://sourceforge.net/projects/ghostscript/files/

下载后解压,只需要Bin中的文件:

gswin32c.exe

gsdll32.dll

gswin32.exe

gsdll32.lib

通过命令行调用:

gswin32c.exe -dSAFER -dBATCH -dNOPAUSE -r100 -dNOTRANSPARENCY -sDEVICE=tiff12nc -sCompression=lzw -dAdjustWidth=0 -dMaxStripSize=999999999  -sOutputFile=D:\Work\Test\PDF\abc.tif  D:\Work\Test\PDF\abc.PDF

另外,gswin32c.exe还可以将PDF转为其他格式的图片文件。

如JPG:gswin32c.exe -dSAFER -dBATCH -dNOPAUSE -r100 -sDEVICE=jpeg -dGraphicsAlphaBits=4 -sOutputFile=D:\Work\Test\PDF\abc%d.jpg  D:\Work\Test\PDF\abc.PDF

参数设置参见压缩包中的doc\Use.htm

 

二、oakdoc的PDF to TIFF Converter,收费软件。分GUI、Command、COMPONENT版本。

下载地址:http://www.oakdoc.com/products/pdftotiff.html

GUI网上有破解版。试用版生成的图片上有水印。

收费,价格低,生成的文件小且清晰。支持PDF目录 -> Tif目录的批量操作。

Command版只需要pdftotiff.exe

通过命令行调用:

pdftotiff.exe  -i "D:\Work\Test\PDF" -o "D:\Work\Test\Tif" -x 96 -y 96 -q 75 -c 4 -e \"LZW\" -a

参数设置参见压缩包中的help\index.htm

 

三、Adobe的Professional版,收费。有破解版。
首先,使用Acrobat.CAcroPDDoc将PDF页面CopyToClipboard
然后,从Clipboard.GetData(DataFormats.Bitmap)读取出Image
最后,将Image合并到一个Tif文件中。

 

PDF To Image代码

private   static  List < Image >  PDFToImage( string  InputFilename)
{
    List
< Image >  imgs  =   new  List < Image > ();

    Acrobat.CAcroPDPage pdfPage 
=   null ;
    Acrobat.CAcroPoint pdfPoint 
=   null ;
    Acrobat.CAcroRect pdfRect 
=   null ;
    Acrobat.CAcroPDDoc pdfDoc 
=  (Acrobat.CAcroPDDoc)Microsoft.VisualBasic.Interaction.CreateObject( " AcroExch.PDDoc " "" );
    
// pdfDoc = new Acrobat.AcroPDDocClass();

    
// Type AcroApp = Type.GetTypeFromCLSID(new System.Guid("{85DE1C45-2C66-101B-B02E-04021C009402}"));
    
// Type AcrobatType = Type.GetTypeFromCLSID(new System.Guid("{72498821-3203-101B-B02E-04021C009402}"));
    
// Type AcroPD = Type.GetTypeFromCLSID(new System.Guid("{FF76CB60-2EC8-101B-B02E-04021C009402}"));
    
// Acrobat.CAcroApp oApp = (Acrobat.CAcroApp)Activator.CreateInstance(AcroApp);
    
// Acrobat.CAcroAVDoc avdoc = (Acrobat.CAcroAVDoc)Activator.CreateInstance(AcrobatType);
    
// Acrobat.CAcroPDDoc pdfDoc = (Acrobat.CAcroPDDoc)Activator.CreateInstance(AcroPD);

    
bool  llRet  =  pdfDoc.Open(InputFilename);

    
if  ( ! llRet)
    {
        
throw   new  FileNotFoundException();
    }
    
int  pageCount  =  pdfDoc.GetNumPages();
    
for  ( int  i  =   0 ; i  <  pageCount; i ++ )
    {
        pdfPage 
=  (Acrobat.CAcroPDPage)pdfDoc.AcquirePage(i);
        pdfPoint 
=  (Acrobat.CAcroPoint)pdfPage.GetSize();
        pdfRect 
=  (Acrobat.CAcroRect)Microsoft.VisualBasic.Interaction.CreateObject( " AcroExch.Rect " "" );
        pdfRect.Left 
=   0 ;
        pdfRect.right 
=  pdfPoint.x;
        pdfRect.Top 
=   0 ;
        pdfRect.bottom 
=  pdfPoint.y;

        pdfPage.CopyToClipboard(pdfRect, 
0 0 100 );

        IDataObject loClipboardData 
=  Clipboard.GetDataObject();
        
if  (loClipboardData.GetDataPresent(DataFormats.Bitmap))
        {
            
// Get Image
            Bitmap pdfBitmap  =  (Bitmap)loClipboardData.GetData(DataFormats.Bitmap);
            imgs.Add(pdfBitmap);
        }
    }
    pdfDoc.Close();

    Marshal.ReleaseComObject(pdfPage);
    Marshal.ReleaseComObject(pdfRect);
    Marshal.ReleaseComObject(pdfDoc);

    
return  imgs;
}

  

Images To Tif代码
///   <summary>
///  Combine some file into 1 tif multipage file
///  if black and write image, we use CCITT4 compression
///  else we use the LZW compression
///   </summary>
///   <param name="InputFilenames"> the files to be combined, canbe (bmp, jpg, gif, png, tif) </param>
///   <param name="OutputFilename"> the output filename </param>
public   static   void  CombineTif( string [] InputFilenames,  string  OutputFilename)
{
    
// get ImageCodecInfo, generate tif format
    ImageCodecInfo info  =   null ;
    
foreach  (ImageCodecInfo ice  in  ImageCodecInfo.GetImageEncoders())
    {
        
if  (ice.MimeType  ==   " image/tiff " )
        {
            info 
=  ice;
            
break ;
        }
    }

    
/*
    * define the encoderparameter, 
    * when the 1st page, will be EncoderValue.MultiFrame.
    * when the other pages, will be EncoderValue.FrameDimensionPage.
    * when all pages saved, will be the EncoderValue.Flush.
    
*/
    EncoderParameters ep 
=   new  EncoderParameters( 2 );

    
/*
    * when the 1st file, 1st frame, will be true.
    * from the 1st file, 2nd frame, will be false.
    
*/
    
bool  b11  =   true ;

    Image img 
=   null ;

    
// create a image instance from the 1st image
     for  ( int  nLoopfile  =   0 ; nLoopfile  <  InputFilenames.Length; nLoopfile ++ )
    {
        
// get image from src file
        Image img_src  =  Image.FromFile(InputFilenames[nLoopfile]);

        Guid guid 
=  img_src.FrameDimensionsList[ 0 ];
        System.Drawing.Imaging.FrameDimension dimension 
=   new  System.Drawing.Imaging.FrameDimension(guid);

        
// get the frames from src file
         for  ( int  nLoopFrame  =   0 ; nLoopFrame  <  img_src.GetFrameCount(dimension); nLoopFrame ++ )
        {
            img_src.SelectActiveFrame(dimension, nLoopFrame);

            
/*
            * if black and write image, we use CCITT4 compression
            * else we use the LZW compression
            
*/
            
if  (img_src.PixelFormat  ==  PixelFormat.Format1bppIndexed)
            {
                ep.Param[
0 =   new  EncoderParameter(Encoder.Compression, Convert.ToInt32(EncoderValue.CompressionCCITT4));
            }
            
else
            {
                ep.Param[
0 =   new  EncoderParameter(Encoder.Compression, Convert.ToInt32(EncoderValue.CompressionLZW));
            }

            
if  (b11)
            {
                
// 1st file, 1st frame, create the master image
                img  =  img_src;

                ep.Param[
1 =   new  EncoderParameter(Encoder.SaveFlag, Convert.ToInt32(EncoderValue.MultiFrame));
                img.Save(OutputFilename, info, ep);

                b11 
=   false ;
                
continue ;
            }

            ep.Param[
1 =   new  EncoderParameter(Encoder.SaveFlag, Convert.ToInt32(EncoderValue.FrameDimensionPage));
            img.SaveAdd(img_src, ep);
        }
    }
    ep.Param[
1 =   new  EncoderParameter(Encoder.SaveFlag, Convert.ToInt32(EncoderValue.Flush));
    img.SaveAdd(ep);
}

  


其他方法:
XpdfRasterizerNet可以将PDF输出为BMP文件,带水印,需要regsvr32注册XpdfRasterizer.dll,没有进一步使用。
含以下DLL:XpdfRasterizer.dll、XpdfRasterizerNet.dll、O2S.Components.PDFRender4NET.dll、O2S.Components.PDFView4NET.dll

 

代码
    XpdfRasterizerNet.XpdfRasterizerClass rast  =   new  XpdfRasterizerNet.XpdfRasterizerClass();
    rast.loadFile(pdffile);
    
for  ( int  page  =   1 ; page  <=  rast.numPages; page ++ )
    {
        
string  jpgfile  =  fileName  +  page.ToString()  +   " .bmp " ;
        rast.writePageBitmap(page, dpi, rast.imageRGB, rast.imageFileBMP, jpgfile);
    }
    rast.closeFile();

 

 Java中的PDFBox有J#版,不过没有最终完成,没有实现page.convertToImage方法。

 

代码
    PDDocument doc  =  PDDocument.load( @" D:\Work\Test\PDF\abc.pdf " );
    List pages 
=  doc.getDocumentCatalog().getAllPages();
    Iterator iter 
=  pages.iterator();
    
while  (iter.hasNext())
    {
        PDPage page 
=  (PDPage)iter.next();
        BufferedImage image 
=  page.convertToImage(); // error
        File file  =   new  java.io.File( @" D:\Work\Test\PDF\abc.tif " );
        ImageIO.write(image, 
" tiff " , file);
        
// OutputStream os = new FileOutputStream(file);
        
// JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);
        
// encoder.encode(image);
    }

 

 


 

 

你可能感兴趣的:(pdf)