【发布时间】:2011-04-03 03:00:56
【问题描述】:
有谁知道将 TIFF 文件(可能是多页)转换为 PDF 文件的好 .NET 库?
TIFF 文件存储在文件共享中,并且 PDF 文件需要存储在与 TIFF 文件相同的位置。
该工具应该用于转换大量 TIFF 文件。
【问题讨论】:
有谁知道将 TIFF 文件(可能是多页)转换为 PDF 文件的好 .NET 库?
TIFF 文件存储在文件共享中,并且 PDF 文件需要存储在与 TIFF 文件相同的位置。
该工具应该用于转换大量 TIFF 文件。
【问题讨论】:
Sam Leffler 的libtiff 附带各种命令行实用程序。其中之一,tiff2pdf.exe 将 TIFF(包括多页 TIFF)转换为 PDF。
这不是一个选项吗?
【讨论】:
您可以为此尝试我们的LibTiff.Net 库。它是免费和开源的(BSD 许可证),并附带 tiff2pdf 实用程序,它可能完全满足您的需求。
【讨论】:
我使用免费的 iTextSharp 库创建 PDF 并将标准 System.Drawing.Image 对象插入 PDF,每页一个。 CreateCompressedImageStream 只是获取 System.Drawing.Image 并将其保存为黑白 PNG 以减小文件大小。
public byte[] CreatePDF(IEnumerable<Image> images)
{
if (!images.Any())
{
throw new ArgumentException("You haven't specified any images.");
}
var stream = new MemoryStream();
using(var doc = new Document())
{
PdfWriter.GetInstance(doc, stream);
doc.Open();
int i = 0;
foreach (var image in images)
{
i++;
var docImage = iTextSharp.text.Image.GetInstance(this.CreateCompressedImageStream(image));
docImage.ScaleToFit(doc.PageSize.Width, doc.PageSize.Height);
doc.Add(docImage);
if (i + 1 < images.Count())
{
doc.NewPage();
}
}
doc.Close();
}
return stream.ToArray();
}
private Stream CreateCompressedImageStream(Image image)
{
MemoryStream imageStream = new MemoryStream();
var info = ImageCodecInfo.GetImageEncoders().FirstOrDefault(i => i.MimeType.ToLower() == "image/png");
EncoderParameter colorDepthParameter = new EncoderParameter(Encoder.ColorDepth, 1L);
var parameters = new EncoderParameters(1);
parameters.Param[0] = colorDepthParameter;
image.Save(imageStream, info, parameters);
imageStream.Position = 0;
return imageStream;
}
【讨论】:
这里是一个使用PDFSharp的例子
using System;
using System.Collections.Generic;
using System.Text;
using PdfSharp.Drawing;
using PdfSharp.Pdf;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
PdfDocument s_document = new PdfDocument();
PdfPage page = s_document.AddPage();
XGraphics gfx = XGraphics.FromPdfPage(page);
XImage image = XImage.FromFile(@"C:\Image.tif");
page.Width = image.PointWidth;
page.Height = image.PointHeight;
gfx.DrawImage(image, 0, 0);
s_document.Save(@"C:\Doc.pdf");
}
}
}
【讨论】:
System.Drawing.Imaging.Bitmap 类将允许您打开多页 TIFF 并提取每一帧。然后,您需要确定每个帧中图像的大小,创建该大小的 PDF 页面,然后在这些页面上绘制位图。
我在 2011 年发表的一篇题为“Convert A Multipage TIFF To PDF Using PDFOne .NET”的文章中为我们的产品 Gnostice PDFOne .NET 做了同样的事情。
.NET 提供图像提取功能。任何 PDF 创建库都可以完成剩下的工作。
免责声明:我为 Gnostice 工作。
【讨论】: