You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将给定的iText表格代码转换为带按钮点击的WinForms程序?

问题描述

这段iText代码看起来很简单,但我试了各种方法都没搞定——我不想做成控制台应用,也不想只写个单纯的类,更不想搞需要传参的命令行程序。我做过不少窗体和控制台应用,肯定是漏了某个简单的点,求帮忙解答。查了很多资料也没找到合适的答案。

原始代码
namespace iText.Samples.Sandbox.Tables
{
    public class SimpleTable
    {
        public static readonly string DEST = "results/sandbox/tables/simple_table.pdf";

        public static void Main(String[] args)
        {
             FileInfo file = new FileInfo(DEST);
             file.Directory.Create();

             new SimpleTable().ManipulatePdf(DEST);
        }

        private void ManipulatePdf(String dest)
        {
             PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
             Document doc = new Document(pdfDoc);

             Table table = new Table(UnitValue.CreatePercentArray(8)).UseAllAvailableWidth();

             for (int i = 0; i < 16; i++)
             {
                 table.AddCell("hi");
             }

             doc.Add(table);

             doc.Close();
        }
    }
}
解决方案

核心是把生成PDF的逻辑从控制台入口里抽出来,改成可在任意类型应用中调用的公共方法,比如在WinForms/WPF这类窗体应用里通过按钮点击触发。

调整后的通用工具类

先把代码改成通用的工具类,让生成逻辑能被外部调用:

using System.IO;
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;

namespace YourAppNamespace
{
    public class PdfTableGenerator
    {
        // 改成公共方法,允许外部传入输出路径
        public void GenerateSimpleTablePdf(string outputPath)
        {
            // 确保输出目录存在
            FileInfo file = new FileInfo(outputPath);
            file.Directory.Create();

            // 用using自动释放资源,避免内存泄漏
            using (PdfDocument pdfDoc = new PdfDocument(new PdfWriter(outputPath)))
            using (Document doc = new Document(pdfDoc))
            {
                Table table = new Table(UnitValue.CreatePercentArray(8)).UseAllAvailableWidth();

                for (int i = 0; i < 16; i++)
                {
                    table.AddCell("hi");
                }

                doc.Add(table);
            }
        }
    }
}

在WinForms中调用示例

比如在窗体里加一个按钮,点击后生成PDF:

private void btnGeneratePdf_Click(object sender, EventArgs e)
{
    // 可以让用户选择保存路径,或者固定到桌面等位置
    string savePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "simple_table.pdf");
    
    PdfTableGenerator generator = new PdfTableGenerator();
    generator.GenerateSimpleTablePdf(savePath);
    
    MessageBox.Show("PDF已生成,保存在桌面!");
}

关键改动点

  • 移除了控制台专用的Main方法,把生成逻辑改成公共方法
  • 使用using语句自动释放PDF相关资源,避免内存泄漏
  • 允许外部传入输出路径,适配不同应用场景的需求

这样不管是WinForms、WPF还是其他类型的应用,都能直接调用这个工具类生成PDF,完全不需要依赖控制台或命令行参数。

内容的提问来源于stack exchange,提问作者Garym

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 04:32:32