gpt4 book ai didi

c# - 在 iTextSharp PdfPTable 中的图像网格之间设置边距或单元格间距

转载 作者:行者123 更新时间:2023-11-30 20:32:57 25 4
gpt4 key购买 nike

我正在尝试使用 iTextSharp (v5.5.10) 渲染带有图像网格的 PDF。所有图像都具有相同的尺寸,并且应均匀分布在一页上。

但是,使用下面提到的代码,我很难设置适当的边距或单元格之间的间距。

从视觉上看,这意味着预期的结果是这样的:

expected

黄色突出显示线是我得到以下结果的问题:

actual

注意到图像之间没有空格吗?这是基于我的以下代码:

   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 选项和变体都令人难以抗拒。

总结一下,有谁知道如何正确设置单元格之间的边距/间距

最佳答案

我假设您想要此图像中的第二个表:grid tables

在 iText 表格中的单元格之间创建白色间距的唯一方法是将相关边框设置为背景颜色并使用单元格的填充。我创建单元格的关键代码是:

            for(int i = 0; i < nrCols* nrRows;i++) {
var img = Image.GetInstance(imagePath);
img.ScaleToFit(ToPoints(imageWidth), ToPoints(imageHeight));
//Create cell
var imageCell = new PdfPCell();
imageCell.Image = img;
imageCell.Border = Rectangle.BOX;
imageCell.BorderColor = useColor? BaseColor.YELLOW : BaseColor.WHITE;

//Play with this value to change the spacing
imageCell.Padding = ToPoints(spacingBetweenCells/2);

imageCell.HorizontalAlignment = Element.ALIGN_CENTER;

grid.AddCell(imageCell);
}

至于为什么向 PdfPCell 添加填充似乎不起作用:

尽管如此,在您的示例中仍然绘制边框的原因

table.DefaultCell.Border = Rectangle.NO_BORDER;

是因为您从不使用默认单元格,因为您使用 var cell = new PdfPCell(); 创建了一个自定义单元格,并将自定义单元格传递给 table.AddCell(cell);。如果您使用了table.addCell(img),则边框不会在那里(尽管您的填充仍然不是您想要的间距,因为它没有在默认单元格上设置) .

关于c# - 在 iTextSharp PdfPTable 中的图像网格之间设置边距或单元格间距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40817511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com