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

如何在C#中借助IKVM与PDFBox将System.Drawing.Bitmap转为java.awt.image.BufferedImage

在C#中用IKVM+PDFBox实现图片转PDF的解决方案

我来帮你搞定这个转换问题——在IKVM环境下把System.Drawing.Bitmap转成java.awt.image.BufferedImage其实有现成的工具类,不用自己手动处理像素数据,下面是完整的实现方案:

核心步骤说明

首先要确保你引用了IKVM.AWT.WinForms.dll这个程序集,它里面的BitmapConverter类专门负责.NET和Java的图像格式互转,这是解决问题的关键。

完整代码示例

using System.Drawing;
using java.awt.image;
using org.apache.pdfbox.pdmodel;
using org.apache.pdfbox.pdmodel.graphics.image;
using org.apache.pdfbox.pdmodel.common;
using IKVM.AWT.WinForms; // 必须引入这个命名空间

class Program
{
    static void Main(string[] args)
    {
        // 初始化PDF文档和页面
        using (PDDocument document = new PDDocument())
        {
            PDPage page = new PDPage();
            document.addPage(page);
            
            using (PDPageContentStream contentStream = new PDPageContentStream(document, page))
            {
                string imgLoc = @"C:\your-image-path.jpg"; // 替换成你的图片路径
                
                // 使用using语句确保Bitmap资源被正确释放
                using (System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(imgLoc))
                {
                    // 核心转换:把.NET Bitmap转成Java BufferedImage
                    BufferedImage bufImg = BitmapConverter.ToBufferedImage(bitmap);
                    
                    // 用PDJpeg创建PDF可识别的图像对象(新版PDFBox也可以用PDImageXObject)
                    PDJpeg img = new PDJpeg(document, bufImg);
                    // 绘制图片到PDF指定位置(x=50, y=50)
                    contentStream.drawImage(img, 50, 50);
                }
            }
            
            // 保存PDF文件
            document.save(@"C:\output-accessible.pdf");
        }
    }
}

额外注意事项

  • 版本兼容性:要确保IKVM的版本和你使用的PDFBox版本匹配,避免出现类找不到或方法不兼容的问题。
  • 新版PDFBox推荐用法:如果你使用的是较新的PDFBox版本,更推荐使用PDImageXObject来替代PDJpeg,代码更通用:
    PDImageXObject img = PDImageXObject.createFromBufferedImage(document, bufImg);
    contentStream.drawImage(img, 50, 50);
    
  • 资源释放:处理图片时一定要用using语句包裹BitmapPDPageContentStream,避免内存泄漏。

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

火山引擎 最新活动