【发布时间】:2016-11-26 10:45:59
【问题描述】:
我正在尝试使用 iTextSharp (v5.5.10) 呈现带有图像网格的 PDF。图像都将具有相同的尺寸,并应均匀分布在一页上。
但是,使用下面提到的代码,我很难设置适当的边距或单元格之间的间距。
从视觉上看,这意味着预期的结果是这样的:
黄色突出显示的行是我得到以下结果的问题:
请注意图像之间没有空格?这是基于我的以下代码:
public void CreateGridOfImages(string outputFilePath)
{
// note: these constants are in millimeters (mm),
// which are converted using the ToPoints() helper later on
const float spacingBetweenCells = 7;
const float imageWidth = 80;
const float imageHeight = 80;
const string[] images = new [] { "a.jpg", "b.jpg", "c.jpg" };
using (var stream = new FileStream(outputFilePath, FileMode.CreateNew, FileAccess.Write, FileShare.None))
{
var document = new iTextSharp.text.Document(PageSize.B2, 0f, 0f, 0f, 0f);
var writer = PdfWriter.GetInstance(document, stream);
try
{
document.Open();
var table = new PdfPTable(5);
table.DefaultCell.Border = Rectangle.NO_BORDER;
foreach (var imagePath in images)
{
var img = iTextSharp.text.Image.GetInstance(imagePath);
img.ScaleToFit(ToPoints(imageWidth), ToPoints(imageHeight));
var cell = new PdfPCell();
// THIS IS THE PROBLEM... HOW TO SET IMAGE SPACING?
var cellMargin = ToPoints(spacingBetweenCells);
cell.AddElement(img);
table.AddCell(cell);
}
document.Add(table);
}
catch (Exception ex)
{
throw ex;
}
finally
{
document.Close();
}
}
}
private float ToPoints(float millimeters)
{
// converts millimeters to points
return iTextSharp.text.Utilities.MillimetersToPoints(millimeters);
}
现在这似乎微不足道。很可能是这样,但我尝试了几种选择,但它们都无法正常工作(或根本无法正常工作):
- 在每个对象之间添加带有填充的 Paragraph() 对象
- 向 PdfPCell 添加填充似乎对我不起作用
- 查看了自定义 IPdfPCellEvent 示例
- 将图像完全定位在一起(忘记 PdfPTable)
我的直觉是IPdfPCellEvent 似乎是正确的方法。但是所有的 iText 选项和变体简直是压倒性的。
总结一下,有谁知道我该如何正确设置单元格之间的边距/间距?
【问题讨论】:
标签: c# pdf-generation itext