我利用itextsharp把tif文件转换成pdf文件
我的代码为:            if (!System.IO.Directory.Exists(@"D:\temp"))
            {
                System.IO.Directory.CreateDirectory(@"D:\temp");
            }            String sourcePath = @"\\172.16.2.100\diesel_man\" + filename + ".tif";
            String targetPath = @"D:\temp\" + filename + ".tif";
            bool isrewrite = true;
            System.IO.File.Copy(sourcePath, targetPath, isrewrite);
            iTextSharp.text.Image image;
            Document document = new Document(iTextSharp.text.PageSize.A4, 25, 25, 25, 25);
            PdfWriter.getInstance(document, new FileStream(filename, FileMode.Create));
            document.Open();            image = iTextSharp.text.Image.getInstance(@"D:\temp\" + filename + ".tif");
            if (image.Height > iTextSharp.text.PageSize.A4.Height - 25)
                    image.scaleToFit(iTextSharp.text.PageSize.A4.Width - 25, iTextSharp.text.PageSize.A4.Height - 25);
            else if (image.Width > iTextSharp.text.PageSize.A4.Width - 25)
                    image.scaleToFit(iTextSharp.text.PageSize.A4.Width - 25, iTextSharp.text.PageSize.A4.Height - 25);
                image.Alignment = iTextSharp.text.Image.MIDDLE;
                document.newPage();
                document.Add(image);
                document.Close();在调试程序的时候,出现了异常为:file:///D:temp/0470683-6.4.tif is not a recognized imageformat.
我理解为iTextSharp的image对象不能识别tif格式的文件我在网上找了另一种办法,是先把tif文件转换成位图,然后把位图插入pdf,可是那样转换的效率太低,而且不清晰有没有什么解决办法,小弟在此谢过在线等回答!

解决方案 »

  1.   


    用C#实现生成PDF文档(原码)   
      -------------------------------------------------------------------------------- 
      
    作者:wyhw     发表时间:2003-5-11       推荐程度:   ★       查看作者信息以及作者文集   
      
      
    //write   by   wenhui.org 
    using   System; 
    using   System.IO; 
    using   System.Text; 
    using   System.Collections; namespace   PDFGenerator 
    { public   class   PDFGenerator 

    static   float   pageWidth   =   594.0f; 
    static   float   pageDepth   =   828.0f; 
    static   float   pageMargin   =   30.0f; 
    static   float   fontSize   =   20.0f; 
    static   float   leadSize   =   10.0f; 
    static   StreamWriter   pPDF=new   StreamWriter( "E:\\myPDF.pdf "); static   MemoryStream   mPDF=   new   MemoryStream(); static   void   ConvertToByteAndAddtoStream(string   strMsg) 

    Byte[]   buffer=null; 
    buffer=ASCIIEncoding.ASCII.GetBytes(strMsg); 
    mPDF.Write(buffer,0,buffer.Length);   
    buffer=null; 
    } static   string   xRefFormatting(long   xValue) 

    string   strMsg   =xValue.ToString(); 
    int   iLen=strMsg.Length; 
    if   (iLen <10) 

    StringBuilder   s=new   StringBuilder(); 
    int   i=10-iLen; 
    s.Append( '0 ',i); 
    strMsg=s.ToString()   +   strMsg; 

    return   strMsg; 
    } static   void   Main(string[]   args) 

    ArrayList   xRefs=new   ArrayList(); 
    //Byte[]   buffer=null; 
    float   yPos   =0f; 
    long   streamStart=0; 
    long   streamEnd=0; 
    long   streamLen   =0; 
    string   strPDFMessage=null; 
    //PDF文档头信息 
    strPDFMessage= "%PDF-1.1\n "; 
    ConvertToByteAndAddtoStream(strPDFMessage); xRefs.Add(mPDF.Length); 
    strPDFMessage= "1   0   obj\n "; 
    ConvertToByteAndAddtoStream(strPDFMessage); 
    strPDFMessage= " < <   /Length   2   0   R   > > \n "; 
    ConvertToByteAndAddtoStream(strPDFMessage); 
    strPDFMessage= "stream\n "; 
    ConvertToByteAndAddtoStream(strPDFMessage); 
    ////////PDF文档描述 
    streamStart=mPDF.Length; 
    //字体 
    strPDFMessage= "BT\n/F0   "   +   fontSize   + "   Tf\n "; 
    ConvertToByteAndAddtoStream(strPDFMessage); 
    //PDF文档实体高度 
    yPos   =   pageDepth   -   pageMargin; 
    strPDFMessage=pageMargin   +   "   "   +   yPos   + "   Td\n "   ; 
    ConvertToByteAndAddtoStream(strPDFMessage); 
    strPDFMessage=   leadSize+ "   TL\n "   ; 
    ConvertToByteAndAddtoStream(strPDFMessage); //实体内容 
    strPDFMessage=   "(http://www.wenhui.org)Tj\n "   ; 
    ConvertToByteAndAddtoStream(strPDFMessage); 
    strPDFMessage=   "ET\n "; 
    ConvertToByteAndAddtoStream(strPDFMessage); 
    streamEnd=mPDF.Length; streamLen=streamEnd-streamStart; 
    strPDFMessage=   "endstream\nendobj\n "; 
    ConvertToByteAndAddtoStream(strPDFMessage); 
    //PDF文档的版本信息 
    xRefs.Add(mPDF.Length); 
    strPDFMessage= "2   0   obj\n "+   streamLen   +   "\nendobj\n "; 
    ConvertToByteAndAddtoStream(strPDFMessage); xRefs.Add(mPDF.Length); 
    strPDFMessage= "3   0   obj\n < </Type/Page/Parent   4   0   R/Contents   1   0   R> > \nendobj\n "; 
    ConvertToByteAndAddtoStream(strPDFMessage); xRefs.Add(mPDF.Length); 
    strPDFMessage= "4   0   obj\n < </Type   /Pages   /Count   1\n "; 
    ConvertToByteAndAddtoStream(strPDFMessage); 
    strPDFMessage= "/Kids[\n3   0   R\n]\n "; 
    ConvertToByteAndAddtoStream(strPDFMessage); 
    strPDFMessage= "/Resources < </ProcSet[/PDF/Text]/Font < </F0   5   0   R> >   > > \n "; 
    ConvertToByteAndAddtoStream(strPDFMessage); 
    strPDFMessage= "/MediaBox   [   0   0   "+   pageWidth   +   "   "   +   pageDepth   +   "   ]\n> > \nendobj\n "; 
    ConvertToByteAndAddtoStream(strPDFMessage); xRefs.Add(mPDF.Length); 
    strPDFMessage= "5   0   obj\n < </Type/Font/Subtype/Type1/BaseFont/Courier/Encoding/WinAnsiEncoding> > \nendobj\n "; 
    ConvertToByteAndAddtoStream(strPDFMessage); xRefs.Add(mPDF.Length); 
    strPDFMessage= "6   0   obj\n < </Type/Catalog/Pages   4   0   R> > \nendobj\n "; 
    ConvertToByteAndAddtoStream(strPDFMessage); streamStart=mPDF.Length; 
    strPDFMessage= "xref\n0   7\n0000000000   65535   f   \n "; 
    for(int   i=0;i <xRefs.Count;i++) 

    strPDFMessage+=xRefFormatting((long)   xRefs[i])+ "   00000   n   \n "; 

    ConvertToByteAndAddtoStream(strPDFMessage); 
    strPDFMessage= "trailer\n < <\n/Size   "+   (xRefs.Count+1)+ "\n/Root   6   0   R\n> > \n "; 
    ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage= "startxref\n "   +   streamStart+ "\n%%EOF\n "; 
    ConvertToByteAndAddtoStream(strPDFMessage); 
    mPDF.WriteTo(pPDF.BaseStream); mPDF.Close(); 
    pPDF.Close(); 


    }