C# 如何在WinC窗体中并行迭代表?

C# 如何在WinC窗体中并行迭代表?,c#,winforms,itext,iteration,C#,Winforms,Itext,Iteration,我有一个图书馆,我想为它们打印图书馆标签。从GridControl中选择书籍并单击“打印标签”按钮时,程序将在pdf文件上创建标签,如下所示: private void btnQRPrintLabels_Click(object sender, EventArgs e) { // These are books' ids. Normally, these are retrieved from GridControl element. var books_ids = new Lis

我有一个图书馆,我想为它们打印图书馆标签。从GridControl中选择书籍并单击“打印标签”按钮时,程序将在pdf文件上创建标签,如下所示:

private void btnQRPrintLabels_Click(object sender, EventArgs e)
{
    // These are books' ids. Normally, these are retrieved from GridControl element.
    var books_ids = new List<int>() {1, 2, 5, 6, 7, 12};
    // I don't use PanelControl. But in the future, maybe I can use it later.
    CreateLabels(books_ids, panelControl1);
}
最后,标签方法的内容:

这些代码为我带来了如下标签:

private void btnQRPrintLabels_Click(object sender, EventArgs e)
{
    // These are books' ids. Normally, these are retrieved from GridControl element.
    var books_ids = new List<int>() {1, 2, 5, 6, 7, 12};
    // I don't use PanelControl. But in the future, maybe I can use it later.
    CreateLabels(books_ids, panelControl1);
}
但我想得到这样的标签:

private void btnQRPrintLabels_Click(object sender, EventArgs e)
{
    // These are books' ids. Normally, these are retrieved from GridControl element.
    var books_ids = new List<int>() {1, 2, 5, 6, 7, 12};
    // I don't use PanelControl. But in the future, maybe I can use it later.
    CreateLabels(books_ids, panelControl1);
}
因为如果我能同时获得标签,我就能很容易地把它打印到电脑标签上。这是我要打印的计算机标签:


如何并排迭代表格?

只需添加页面级表格2列6行,并将每个标签放入该页面级表格中的单个单元格中。

使用一个带有

new PdfPTable(2) { WidthPercentage = 100 }
然后将所有内部表添加到此表中,最后将外部表添加到文档中。这样就不需要使用左/右对齐切换

:编辑:

var table = new PdfPTable(2) { WidthPercentage = 100 };

foreach (var book_id in books_ids)
{
  // Book's informations are retrieved from Linq Connect Model.
  var _connection = new LinqtoSQLiteDataContext();
  var book = _connection.books.SingleOrDefault(b_no => b_no.id == book_id);
  // Outer table to get rounded corner...

  // Inner table: First cell for QR code and second cell for book's informations.
  var inner_table = new PdfPTable(2) { WidthPercentage = 100 };
  inner_table.DefaultCell.Border = Rectangle.NO_BORDER;

  var inner_measurements = new[] { 40f, 60f };
  inner_table.SetWidths(inner_measurements);
  // Generate QR code in the `Tools` class, `GenerateQR` method.
  System.Drawing.Image image = Tools.GenerateQR(100, 100, book?.isbn);
  var pdfImage = iTextSharp.text.Image.GetInstance(image, System.Drawing.Imaging.ImageFormat.Jpeg);
  var qr = iTextSharp.text.Image.GetInstance(pdfImage);

  var a = new PdfPCell(qr) { Border = Rectangle.NO_BORDER };
  var b = new PdfPCell(new Phrase(book?.name, font_normal)) { Border = Rectangle.NO_BORDER };

  inner_table.AddCell(a);
  inner_table.AddCell(b);

  PdfPCell labelCell = new PdfPCell(inner_table)
  {
      CellEvent = new RoundRectangle(),
      Border = Rectangle.NO_BORDER,
      Padding = 2,
      HorizontalAlignment = Element.ALIGN_LEFT
  };

  table.AddCell(labelCell);               
}

doc.Add(table);

对不起,我不明白我是怎么做到的?我在谷歌上搜索到:*但我没有找到任何相关信息。我指的是整个页面上的表格,因为每个标签使用表格,标签布局使用下一个表格。是的,因为我认为,我必须将表用于圆形的录像机。我不明白在books\u id循环中创建foreach var book\u id内部表时如何导入外部表?嗯。。。我在上面编辑了我的文字,并发布了你的代码和一些修改。我是在记事本中写的,所以它可能无法立即运行-但使用这种结构,您应该了解如何获得所需的输出。