![](/img/trans.png)
[英]How to convert pdf Byte[] Array to downloadable file using iTextSharp
[英]How can I convert TIFF byte array to a PDF byte array using iTextSharp?
我一直试图在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;
}
}
}
如果有人指出这里做错了,那真是太好了!
提前致谢!
实际上,我对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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.