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

如何将多页TIF拆分为单页字节数组以转换为PDF?

多页TIF转PDF(Libtiff.net + PdfSharp)问题解决

你的核心问题是没有把切换后的TIF页面单独提取为流,循环里一直用整个多页TIF的原始流,导致XImage每次都读第一页。下面是修改后的代码,完全避开System.Drawing.Common:

byte[] data = System.IO.File.ReadAllBytes("img.tif");
PdfDocument d = new PdfDocument();

using (MemoryStream ms = new MemoryStream(data))
using (Tiff t = Tiff.ClientOpen("test", "r", ms, new TiffStream()))
{
    int pageCount = t.NumberOfDirectories();
    for (int i = 0; i < pageCount; i++)
    {
        // 切换到当前页目录
        t.SetDirectory((short)i);
        
        // 创建临时流存储当前单页TIF数据
        using (MemoryStream singlePageMs = new MemoryStream())
        {
            // 将当前页保存为单页TIF到临时流
            t.SaveDirectoryAs(singlePageMs);
            // 重置流指针到开头,确保XImage能正确读取
            singlePageMs.Position = 0;
            
            PdfPage p = d.AddPage();
            XGraphics g = XGraphics.FromPdfPage(p);
            XImage img = XImage.FromStream(singlePageMs);
            
            // 设置PDF页面尺寸匹配当前TIF页
            p.Width = img.PointWidth;
            p.Height = img.PointHeight;
            g.DrawImage(img, 0, 0);
        }
    }
    
    // 最后保存PDF文档
    d.Save("output.pdf");
}

关键修改点:

  • 每次循环内新建MemoryStream来单独存储当前页的TIF数据
  • 用Tiff.SaveDirectoryAs()把当前目录的页面导出为单页TIF流,这是Libtiff.net自带的方法,不需要依赖System.Drawing.Common
  • 必须重置临时流的Position到0,否则XImage读取不到数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:11:19