C# 如何使用iTextSharp将TIFF字节数组转换为PDF字节数组?

C# 如何使用iTextSharp将TIFF字节数组转换为PDF字节数组?,c#,itext,C#,Itext,我一直在尝试在我的Web应用程序的浏览器上显示TIFF图像。但由于浏览器不支持TIFF,我尝试将TIFF字节数组转换为PDF字节数组,我唯一可以使用的第三方库是iTextSharp 但是我一直在做一些错误的事情,MemoryStream在我身上出错,或者生成的PDF被破坏 守则: using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Linq; using i

我一直在尝试在我的Web应用程序的浏览器上显示TIFF图像。但由于浏览器不支持TIFF,我尝试将TIFF字节数组转换为PDF字节数组,我唯一可以使用的第三方库是
iTextSharp

但是我一直在做一些错误的事情,
MemoryStream
在我身上出错,或者生成的PDF被破坏

守则:

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using iTextSharp.text;
using iTextSharp.text.pdf;

namespace TiffToPDFApplication
{
    public class UsingiTextSharp
    {

       /// <summary>
        /// 
        /// </summary>
        /// <param name="path"></param>
        public string TiffToPdfConverter(string path, string targetLoc, string fileName)
        {

            string fileNameWithLoc = String.Empty;
            string fileNameWithLoc2 = String.Empty;
            if (fileName == String.Empty)
            {
                string[] pathArr = path.Split('\\');
                string[] fileArr = pathArr.Last().Split('.');
                fileName = fileArr[0];

            }
            fileName = fileName + ".pdf";

            if (File.Exists(path))
            {
                try
                {
                    FileStream fileStream = File.OpenRead(path);
                    byte[] tiffByteArray = new byte[fileStream.Length];
                    fileStream.Read(tiffByteArray, 0, tiffByteArray.Length);
                    fileStream.Close();

                    convertImage(tiffByteArray);

                    // Convert to PDF Byte Array
                    byte[] pdfbyteArray = ConvertToPDFArray(tiffByteArray);


                    //FileName and Location
                    fileNameWithLoc = targetLoc + "\\" + fileName;

                    // Writing File to the Local Location
                    using (Stream file = File.OpenWrite(fileNameWithLoc))
                    {
                        file.Write(pdfbyteArray, 0, pdfbyteArray.Length);
                    }


                }
                catch(Exception ex)
                {
                    throw ex;
                }
       }

            return fileNameWithLoc;
        }






        /// <summary>
        /// 
        /// </summary>
        /// <param name="inboundFaxBytes"></param>
        /// <returns></returns>
        public static byte[] ConvertToPDFArray(byte[] inboundFaxBytes)
        {
            byte[] imagePdfBytes = null;

            try
            {


                using (MemoryStream ms = new MemoryStream())
                {
                    Bitmap faxDocBitmap;
                     ms.Write(inboundFaxBytes, 0, inboundFaxBytes.Length);
                    faxDocBitmap = new Bitmap(ms);
                    iTextSharp.text.Document document = new iTextSharp.text.Document(PageSize.A4, 50, 50, 50, 50);

                    iTextSharp.text.pdf.PdfWriter writer = iTextSharp.text.pdf.PdfWriter.GetInstance(document, ms);

                    int totalPages = faxDocBitmap.GetFrameCount(System.Drawing.Imaging.FrameDimension.Page);

                    //document.SetPageSize(PageSize.A4);
                    document.Open();

                    PdfContentByte cb = writer.DirectContent;
                    for (int page = 0; page < totalPages; ++page)
                    {

                        faxDocBitmap.SelectActiveFrame(System.Drawing.Imaging.FrameDimension.Page, page);

                        iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(faxDocBitmap, System.Drawing.Imaging.ImageFormat.Bmp);


                        img.ScalePercent(72f / img.DpiX * 100, 72f / img.DpiY * 100);
                        img.SetAbsolutePosition(0, 0);

                        // Memory Stream is not expandable
                        cb.AddImage(img);

                        document.NewPage();

                    }
                    document.Close();
                    imagePdfBytes = ms.ToArray();
                    ms.Dispose();


                }

            }
            catch (Exception e)
            {
                throw e;
            }
            return imagePdfBytes;
        }
    }
}
使用系统;
使用系统图;
使用系统、绘图、成像;
使用System.IO;
使用System.Linq;
使用iTextSharp.text;
使用iTextSharp.text.pdf;
命名空间TiffToPDFApplication
{
使用文本夏普的公共类
{
/// 
/// 
/// 
/// 
公共字符串TiffToPdfConverter(字符串路径、字符串targetLoc、字符串文件名)
{
string fileNameWithLoc=string.Empty;
string fileNameWithLoc2=string.Empty;
如果(文件名==String.Empty)
{
字符串[]pathArr=path.Split('\\');
字符串[]fileArr=pathArr.Last().Split('.');
fileName=fileArr[0];
}
文件名=文件名+“.pdf”;
if(File.Exists(path))
{
尝试
{
FileStream FileStream=File.OpenRead(路径);
byte[]tiffByteArray=新字节[fileStream.Length];
读取(tiffByteArray,0,tiffByteArray.Length);
fileStream.Close();
convertImage(tiffByteArray);
//转换为PDF字节数组
字节[]pdfbyteArray=ConvertToPDFArray(tiffByteArray);
//文件名和位置
fileNameWithLoc=targetLoc+“\\”+文件名;
//正在将文件写入本地位置
使用(Stream file=file.OpenWrite(fileNameWithLoc))
{
Write(pdfbyteArray,0,pdfbyteArray.Length);
}
}
捕获(例外情况除外)
{
掷骰子;
}
}
返回fileNameWithLoc;
}
/// 
/// 
/// 
/// 
/// 
公共静态字节[]ConvertToPDFArray(字节[]inboundFaxBytes)
{
字节[]imagePdfBytes=null;
尝试
{
使用(MemoryStream ms=new MemoryStream())
{
位图;
ms.Write(inboundFaxBytes,0,inboundFaxBytes.Length);
faxDocBitmap=新位图(毫秒);
iTextSharp.text.Document Document=新的iTextSharp.text.Document(PageSize.A4,50,50,50);
iTextSharp.text.pdf.PdfWriter writer=iTextSharp.text.pdf.PdfWriter.GetInstance(文档,ms);
int totalPages=faxDocBitmap.GetFrameCount(System.Drawing.Imaging.FrameDimension.Page);
//文件。设置页面大小(页面大小为A4);
document.Open();
PdfContentByte cb=writer.DirectContent;
对于(int page=0;page
如果有人能指出我做错了什么,那就太好了


提前谢谢

实际上,我对MemoryStream做了一些修补,并对ConvertToPDFArray方法进行了更改,使其正常工作:

 /// <summary>
        /// 
        /// </summary>
        /// <param name="inboundFaxBytes"></param>
        /// <returns></returns>
        public static byte[] ConvertToPDFArray(byte[] inboundFaxBytes)
        {
            byte[] imagePdfBytes = null;

            try
            {                          

                using (MemoryStream ms = new MemoryStream())
                {

                    iTextSharp.text.Document document = new iTextSharp.text.Document(PageSize.A4, 50, 50, 50, 50);

                    MemoryStream msBmp = new MemoryStream();
                    msBmp.Write(inboundFaxBytes, 0, inboundFaxBytes.Length);
                    Bitmap faxDocBitmap = new Bitmap(msBmp);

                    iTextSharp.text.pdf.PdfWriter writer = iTextSharp.text.pdf.PdfWriter.GetInstance(document, ms);

                    int totalPages = faxDocBitmap.GetFrameCount(System.Drawing.Imaging.FrameDimension.Page);

                    //document.SetPageSize(PageSize.A4);
                    document.Open();

                    PdfContentByte cb = writer.DirectContent;
                    for (int page = 0; page < totalPages; ++page)
                    {

                        faxDocBitmap.SelectActiveFrame(System.Drawing.Imaging.FrameDimension.Page, page);

                        iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(faxDocBitmap, System.Drawing.Imaging.ImageFormat.Bmp);


                        img.ScalePercent(72f / img.DpiX * 100, 72f / img.DpiY * 100);
                        img.SetAbsolutePosition(0, 0);

                        // Memory Stream is not expandable
                        cb.AddImage(img);

                        document.NewPage();

                    }
                    document.Close();
                    imagePdfBytes = ms.ToArray();
                    ms.Dispose();


                }

            }
            catch (Exception e)
            {
                throw e;
            }
            return imagePdfBytes;
        }
//
/// 
/// 
/// 
/// 
公共静态字节[]ConvertToPDFArray(字节[]inboundFaxBytes)
{
字节[]imagePdfBytes=null;
尝试
{                          
使用(MemoryStream ms=new MemoryStream())
{
iTextSharp.text.Document Document=新的iTextSharp.text.Document(PageSize.A4,50,50,50);
MemoryStream msBmp=新的MemoryStream();
msBmp.Write(inboundFaxBytes,0,inboundFaxBytes.Length);
位图faxDocBitmap=新位图(msBmp);
iTextSharp.text.pdf.PdfWriter writer=iTextSharp.text.pdf.PdfWriter.GetInstance(文档,ms);
int totalPages=faxDocBitmap.GetFrameCount(System.Drawing.Imaging.FrameDimension.Page);
//文件。设置页面大小(页面大小为A4);
document.Open();
PdfContentByte cb=writer.DirectContent;
对于(int page=0;page