【问题标题】:How to define Colspan and Rowspan when using iText 7 for .NET使用 iText 7 for .NET 时如何定义 Colspan 和 Rowspan
【发布时间】:2018-03-23 14:20:44
【问题描述】:

我有 WPF 应用程序,我想在我的代码中实现 colspan 和 rowspan。我使用 iText 版本 7 将数据导出为 PDF。但是我不知道如何为 Cell 对象定义 colspan 或 rowspan。有没有办法解决这个问题?

我的目标实际上是在我的表格中创建主标题和副标题。

我的输出:

目标输出:

我的代码如下:

using iText.IO.Font.Constants;
using iText.Kernel.Font;
using iText.Kernel.Geom;
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using Microsoft.Win32;
using System.Diagnostics;
using System.Windows;

namespace ITextPdf.UI
{
   public partial class MainWindow : Window
   {
      public MainWindow()
      {
         InitializeComponent();
      }

      private void Export_Btn(object sender, RoutedEventArgs e)
      {
         SaveFileDialog dlg = new SaveFileDialog
         {
            DefaultExt = ".pdf",
            Filter = "Adobe PDF Files(*.pdf)|*.pdf",
            FilterIndex = 1
         };

         string fileName = string.Empty;

         if (dlg.ShowDialog() == true)
         {
            fileName = dlg.FileName;

            PdfWriter writer = new PdfWriter(fileName);
            PdfDocument pdf = new PdfDocument(writer);

            PdfFont font = PdfFontFactory.CreateFont(StandardFonts.HELVETICA);
            PdfFont bold = PdfFontFactory.CreateFont(StandardFonts.HELVETICA_BOLD);

            Document document = new Document(pdf, PageSize.LETTER);
            document.SetMargins(20, 20, 20, 20);
            document.Add(new Paragraph("General Ledger")
               .SetTextAlignment(iText.Layout.Properties.TextAlignment.CENTER)
               .SetFontSize(18)
               .SetFont(bold)
               .SetMarginBottom(-8));
            document.Add(new Paragraph("Naawan, Misamis Oriental")
               .SetTextAlignment(iText.Layout.Properties.TextAlignment.CENTER)
               .SetFontSize(14)
               .SetFont(font)
               .SetMarginBottom(20));

            var table = new Table(new float[] { 80, 120, 80, 80, 80 });
            table.SetMinWidth(100)
               .SetHorizontalAlignment(iText.Layout.Properties.HorizontalAlignment.CENTER)
               .SetFontSize(10);
            table.AddHeaderCell("Date");
            table.AddHeaderCell("Particulars");
            table.AddHeaderCell("Debit");
            table.AddHeaderCell("Credit");
            table.AddHeaderCell("Total Amount");
            table.AddCell("1/1/17");
            table.AddCell("Beginning Balance");
            table.AddCell("100.00");
            table.AddCell("");
            table.AddCell("100.00");
            table.AddCell("");
            table.AddCell("");
            table.AddCell("");
            table.AddCell("300.00");
            table.AddCell("200.00");

            document.Add(table);
            document.Close();
            Process.Start(fileName);
         }
      }
   }
}

【问题讨论】:

  • 查看您的代码,我没有看到您定义任何 colspan 或 rowspan。查看您的代码和生成的 PDF,我会说 iText 正确执行您的代码。另外:您使用的是 iText 7,并且您提到了PdfPCell。 iText 7 中不存在 PdfPCell 类。它是 iText 5 类。

标签: c# .net wpf mvvm itext7


【解决方案1】:

你需要调整这些行:

table.AddHeaderCell("Date");
table.AddHeaderCell("Particulars");
table.AddHeaderCell("Debit");
table.AddHeaderCell("Credit");
table.AddHeaderCell("Total Amount");

然后像这样改变它们:

table.AddHeaderCell(new Cell(2, 1).Add(new Paragraph("Date")));
table.AddHeaderCell(new Cell(2, 1).Add(new Paragraph("Particulars")));
table.AddHeaderCell(new Cell(1, 3).Add(new Paragraph("Amount")));
table.AddHeaderCell("Debit");
table.AddHeaderCell("Credit");
table.AddHeaderCell("Amount");

请注意,您最初提到了 PdfPCell 类,但 iText 7 中不再存在该类。您需要 Cell 类,如 tutorial 中所述。

【讨论】:

  • 它不起作用。它说不能从字符串转换为 iText.Layout.Element.IBlockElement
  • 现在,它正在工作。这是我的解决方案。 ----------- 代替:table.AddHeaderCell(new Cell(1, 3).Add("Amount"));我把它改成:table.AddHeaderCell(new Cell(1,3).Add(new Paragraph("Amount"));
  • 我已根据您的评论更新了我的答案。请接受答案,因为它帮助您解决了问题。
猜你喜欢
  • 2014-07-22
  • 1970-01-01
  • 1970-01-01
  • 2018-07-01
  • 1970-01-01
  • 2022-01-02
  • 2012-04-16
  • 2015-02-02
  • 2023-03-17
相关资源
最近更新 更多