You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Magick.NET在PDF文件上添加文字?附相关批处理示例

嘿,既然你已经有ImageMagick的使用经验,转用Magick.NET给PDF加文字其实没啥门槛!核心逻辑和你之前写的批处理是通的,只不过换成了C#(或VB.NET)代码实现。我给你拆解下关键步骤和实用示例:

第一步:安装Magick.NET包

首先得通过NuGet安装对应的Magick.NET包,推荐安装带Ghostscript依赖的版本(因为PDF处理依赖Ghostscript):

  • 如果你用的是.NET Framework,安装 Magick.NET-Q16-AnyCPU
  • 如果你用的是.NET Core/.NET 5+,安装 Magick.NET-Q16-AnyCPU.Core
单页PDF添加文字示例

这是最基础的场景,指定单页PDF并添加文字:

using ImageMagick;

// 设置PDF读取参数,300DPI保证文字清晰,指定要处理的页码
var readSettings = new MagickReadSettings
{
    Density = new Density(300, 300),
    Page = 1 // 页码从1开始
};

// 加载目标PDF页
using (var pdfPage = new MagickImage(@"C:\PDF\your_file.pdf", readSettings))
{
    // 定义文字样式和位置
    var textDrawables = new Drawables()
        .Font("Arial") // 系统中存在的字体名称
        .FontPointSize(14)
        .FillColor(MagickColors.DarkBlue) // 文字颜色
        .Text(60, 60, "这是添加的自定义文字"); // x,y坐标(左上角为原点)

    // 把文字绘制到PDF页上
    pdfPage.Draw(textDrawables);

    // 保存修改后的文件
    pdfPage.Write(@"C:\PDF\your_file_with_text.pdf");
}
多页PDF批量添加文字

如果要给PDF的每一页都加上相同的文字,用MagickImageCollection来处理更高效:

using ImageMagick;

var readSettings = new MagickReadSettings
{
    Density = new Density(300, 300) // 全局设置解析密度
};

// 加载整个PDF文档
using (var pdfCollection = new MagickImageCollection(@"C:\PDF\multi_page.pdf", readSettings))
{
    // 定义统一的文字样式
    var textDrawables = new Drawables()
        .Font("Microsoft YaHei") // 用中文字体的话要确保系统有安装
        .FontPointSize(12)
        .FillColor(new MagickColor(0.6, 0, 0, 0)) // 半透明红色(RGBA,最后一位是透明度)
        .TextAlignment(TextAlignment.Right) // 文字右对齐
        .Text(pdfCollection[0].Width - 40, pdfCollection[0].Height - 40, "页面右下角的水印");

    // 遍历每一页添加文字
    foreach (var page in pdfCollection)
    {
        page.Draw(textDrawables);
    }

    // 保存修改后的完整PDF
    pdfCollection.Write(@"C:\PDF\multi_page_with_watermark.pdf");
}
几个实用的进阶技巧
  • 字体自定义:如果系统没有你需要的字体,可以直接指定字体文件路径:
    textDrawables.Font(@"C:\Fonts\CustomFont.ttf");
    
  • 文字样式增强:可以设置加粗、斜体等样式:
    textDrawables.FontWeight(FontWeight.Bold)
                 .FontStyle(FontStyle.Italic);
    
  • 坐标精准控制:可以通过页面的宽高计算相对位置,比如居中显示文字:
    var centerX = pdfPage.Width / 2;
    var centerY = pdfPage.Height / 2;
    textDrawables.TextAlignment(TextAlignment.Center)
                 .Text(centerX, centerY, "居中显示的文字");
    
和你批处理代码的对应关系

其实Magick.NET的API就是把命令行参数封装成了类和方法,比如你批处理里的:

  • convert -density 300 → 对应代码里的Density = new Density(300, 300)
  • -font Arial -fill black -draw "text 50,50 'xxx'" → 对应Drawables里的Font()FillColor()Text()方法

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

火山引擎 最新活动