Skip to content
ComPDF

最佳实践

资源管理

csharp
// 正确: 使用 using 语句确保资源释放
using (CDocument document = new CDocument())
using (CBorder border = new CBorder(1f))
using (CBorderRadius radius = new CBorderRadius(5f))
{
    // 使用这些资源
    document.SaveToFile("output.pdf");
}

// 不推荐: 手动调用 Dispose
CDocument document = new CDocument();
try
{
    document.SaveToFile("output.pdf");
}
finally
{
    document.Dispose();
}

样式复用

csharp
// 创建可重用的样式
CStyle bodyTextStyle = document.CreateStyle();
bodyTextStyle.SetFontSize(12);
bodyTextStyle.SetFontFamily("Arial");
bodyTextStyle.SetMarginBottom(10);

CStyle headingStyle = document.CreateStyle();
headingStyle.SetFontSize(18);
headingStyle.SetFontWeight(CFontWeight.Bold);
headingStyle.SetMarginTop(15);
headingStyle.SetMarginBottom(10);

// 应用到多个元素
paragraph1.AddStyle(bodyTextStyle);
paragraph2.AddStyle(bodyTextStyle);
heading1.AddStyle(headingStyle);
heading2.AddStyle(headingStyle);

性能优化

csharp
// 1. 批量创建元素时,考虑预先创建样式
CStyle itemStyle = document.CreateStyle();
itemStyle.SetFontSize(12);
itemStyle.SetMarginBottom(5);

for (int i = 0; i < 1000; i++)
{
    CText text = div.CreateText($"Item {i}");
    text.AddStyle(itemStyle); // 复用样式而不是每次设置
}

// 2. 使用流输出而不是先写入内存
using (FileStream fs = File.Create("large.pdf"))
{
    document.SaveToStream(fs);
}

错误处理

csharp
try
{
    using (CDocument document = new CDocument())
    {
        CPage page = document.CreatePage(595, 842);
        
        // 验证图片路径
        string imagePath = "path/to/image.png";
        if (File.Exists(imagePath))
        {
            CImage image = page.CreateDiv().CreateImage(imagePath);
        }
        else
        {
            Console.WriteLine($"图片文件不存在: {imagePath}");
        }
        
        document.SaveToFile("output.pdf");
    }
}
catch (Exception ex)
{
    Console.WriteLine($"生成 PDF 时出错: {ex.Message}");
}