我正在使用iTextSharp将大图像转换为PDF文档。
这样可行,但图像会出现裁剪,因为它们超出了生成文档的边界。
所以问题是 - 如何使文档与插入图像的大小相同?
我正在使用以下代码:
Document doc = new Document(PageSize.LETTER.Rotate());
try
{
PdfWriter.GetInstance(doc, new FileStream(saveFileDialog1.FileName,FileMode.Create));
doc.Open();
doc.Add(new Paragraph());
iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(imagePath);
doc.Add(img);
}
catch
{
// add some code here incase you have an exception
}
finally
{
//Free the instance of the created doc as well
doc.Close();
}
答案 0 :(得分:4)
iText和iTextSharp中的Document
对象是一种抽象,可以自动处理各种间距,填充和边距。不幸的是,这也意味着当您致电doc.Add()
时,它会考虑到文档的现有边距。 (另外,如果你碰巧添加任何其他内容,图像也将相对于此添加。)
一种解决方案就是删除边距:
doc.SetMargins(0, 0, 0, 0);
相反,将图像直接添加到调用PdfWriter
得到的PdfWriter.GetInstance()
对象更容易。您目前正在丢弃并且不存储该对象,但您可以轻松地将您的行更改为:
PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(saveFileDialog1.FileName,FileMode.Create));
然后,您可以访问DirectContent
的{{1}}属性并调用其PdfWriter
方法:
AddImage()
在此之前,您还必须通过调用以下方式绝对定位图像:
writer.DirectContent.AddImage(img);
以下是针对iTextSharp 5.1.1.0的完整工作的C#2010 WinForms应用,它显示了上面的img.SetAbsolutePosition(0, 0);
方法。它动态创建两个不同大小的图像,两个红色箭头横向和纵向延伸。你的代码显然只是使用标准的图像加载,因此可以省略很多,但我想提供一个完整的工作示例。有关详细信息,请参阅代码中的注释。
DirectContent
答案 1 :(得分:3)
尝试这样的方法来纠正您的问题
foreach (var image in images)
{
iTextSharp.text.Image pic = iTextSharp.text.Image.GetInstance(image, System.Drawing.Imaging.ImageFormat.Jpeg);
if (pic.Height > pic.Width)
{
//Maximum height is 800 pixels.
float percentage = 0.0f;
percentage = 700 / pic.Height;
pic.ScalePercent(percentage * 100);
}
else
{
//Maximum width is 600 pixels.
float percentage = 0.0f;
percentage = 540 / pic.Width;
pic.ScalePercent(percentage * 100);
}
pic.Border = iTextSharp.text.Rectangle.BOX;
pic.BorderColor = iTextSharp.text.BaseColor.BLACK;
pic.BorderWidth = 3f;
document.Add(pic);
document.NewPage();
}