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

C#使用iText7将PNG转PDF时出现文件夹访问权限异常求助

问题核心

你触发访问被拒绝报错的根本原因是 ImageDataFactory.Create() 方法要求传入单个图片文件的完整路径,但你当前传入的是 SeleniumScreenshots 文件夹的路径,程序尝试将文件夹作为图片文件读取,自然会触发权限类错误,和文件夹权限配置、iText7的安装配置没有关系。

解决方案

根据你的需求分两种场景处理:

场景1:仅转换单张PNG图片

直接修改ORIG变量的值为具体PNG文件的完整路径即可,示例修正代码如下:

using System;
using iText.IO.Image;
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
namespace TesingPDFConvert
{
    internal class Program
    {
        // 建议用系统API动态获取Documents路径,避免硬编码用户名
        private static string BASE_PATH = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\c_projects\";
        // 此处改为具体的PNG文件路径
        private static string IMAGE_PATH = BASE_PATH + @"SeleniumScreenshots\test_screenshot.png";
        private static string OUTPUT_FOLDER = BASE_PATH + @"pdf_output\";

        public static void Main(string[] args)
        {
            // 提前校验输出文件夹是否存在,不存在则创建
            if (!System.IO.Directory.Exists(OUTPUT_FOLDER))
            {
                System.IO.Directory.CreateDirectory(OUTPUT_FOLDER);
            }
            
            PdfDocument pdfDocument = new PdfDocument(new PdfWriter(OUTPUT_FOLDER + "ImageToPdf.pdf"));
            Document document = new Document(pdfDocument);

            ImageData imageData = ImageDataFactory.Create(IMAGE_PATH);
            Image image = new Image(imageData);
            image.SetWidth(pdfDocument.GetDefaultPageSize().GetWidth() - 50);
            image.SetAutoScaleHeight(true);

            document.Add(image);
            document.Close();
        }
    }
}

场景2:批量转换SeleniumScreenshots文件夹下所有PNG到同一个PDF

需要先遍历文件夹下所有PNG文件,循环添加到PDF文档中,示例代码如下:

using System;
using System.IO;
using iText.IO.Image;
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
namespace TesingPDFConvert
{
    internal class Program
    {
        private static string BASE_PATH = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\c_projects\";
        private static string SCREENSHOT_FOLDER = BASE_PATH + @"SeleniumScreenshots\";
        private static string OUTPUT_FOLDER = BASE_PATH + @"pdf_output\";

        public static void Main(string[] args)
        {
            if (!Directory.Exists(OUTPUT_FOLDER))
            {
                Directory.CreateDirectory(OUTPUT_FOLDER);
            }

            PdfDocument pdfDocument = new PdfDocument(new PdfWriter(OUTPUT_FOLDER + "AllScreenshotsToPdf.pdf"));
            Document document = new Document(pdfDocument);
            var pageWidth = pdfDocument.GetDefaultPageSize().GetWidth() - 50;

            // 遍历所有PNG文件
            foreach (var imagePath in Directory.GetFiles(SCREENSHOT_FOLDER, "*.png"))
            {
                ImageData imageData = ImageDataFactory.Create(imagePath);
                Image image = new Image(imageData);
                image.SetWidth(pageWidth);
                image.SetAutoScaleHeight(true);
                // 每张图片自动设置边距,超出页面宽度会自动分页
                image.SetMargins(20, 0, 20, 0);
                document.Add(image);
            }

            document.Close();
        }
    }
}

注意事项

  • 若你Selenium输出的截图格式不是PNG,修改Directory.GetFiles的第二个参数为对应后缀即可,比如*.jpg。
  • 调试时如果还是报错,可以先打印路径变量的实际值,确认路径对应的文件真实存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:36:04