专业编程基础技术教程

网站首页 > 基础教程 正文

C#中把PDF导出为图片的方法分享 c# 生成 pdf

ccvgpt 2024-12-26 12:11:18 基础教程 1 ℃

如果你安装的有Adobe Acrobat Pro的话就不用看了,它可以直接把PDF按页导出为图片的,本文实现的是在没有专用软件的情况下,通过自己编写的小软件实现PDF导出为图片,可以导出其中的一页或多页。

iTextShape可以实现拆分PDF,但它无法实现把拆分的PDF保存成图片,所以你需要引用PDFRender4NET,这是一个收费的第三方库,免费使用时导出的图片在右上角会多出一行文字,当然你也可以在网上找到它的没有水印的版本。

C#中把PDF导出为图片的方法分享 c# 生成 pdf

PDFRender4NET可以设置导出图片的清晰度,从1到10,如果设置为10时导出的图片是相当的清晰,下面拖了个导出图片的界面,在导出为图片时,拆分后再合并的功能不起作用。

先判断一下选择的是哪种导出范围,可以是单独的一页,可以是不连续的多页,也可以是连续的多页,页码信息保存在list<int>中,list比数组要好用。

//导出为图片格式
int mode = 0;
List<int> pages = new List<int>();
if (path.Length < 1)
{
    ShowMessage("请先选择一个需要处理的PDF文件哦!");
    return;
}
mode = ModeSelect();

if (mode == 1)
{
    int page = Convert.ToInt32(txt_dy.Value);
    pages.Add(page);
    DoPdfToImg(path, pages);
}
if (mode == 2)
{
    int p1 = Convert.ToInt32(txt_begin.Text.ToString());
    int p2 = Convert.ToInt32(txt_end.Text.ToString());

    if (p1 > p2)
    {
        ShowMessage("开始页不能大于结束页,请重新选择!");
        return;
    }
    for (int i = p1; i <= p2; i++)
    {
        pages.Add(i);
    }
    DoPdfToImg(path, pages);
}

if (mode == 3)
{
    string SPage = txt_duoye.Text.ToString().Trim();
    SPage = SPage.Replace(",", ",").Replace(";", ",").Replace(";", ",").Replace("-", ",").Replace("=", ",");
    string[] page = SPage.Split(',');
    for (int i = 0; i < page.Length; i++)
    {
        string p = page[i];
        bool isNumeric = int.TryParse(p, out int num);
        if (!isNumeric)
        {
            ShowMessage("不连续页中有页码不是数字,请检查后再试!");
            return;
        }
        pages.Add(num);
    }
    DoPdfToImg(path, pages);
}

具体的导出功能,参数为原文件名和页码

public void DoPdfToImg(string filePath, List<int> Pages)
{
    string newFile = "";
    PDFFile pdfFile = PDFFile.Open(filePath);
    int n = pdfFile.PageCount;
    int offset = Convert.ToInt32(txt_offset.Text.Trim().ToString());
    int qxd = Convert.ToInt32(txt_qxd.Text.Trim().ToString());

    foreach (int i in Pages)
    {
        if ((i + offset) == 0 || (i + offset) > n)
        {
            continue;
        }
        newFile = System.IO.Path.GetDirectoryName(path) + "\\" + i.ToString() + "_" + Fname + ".png";
        Bitmap pageImage = pdfFile.GetPageImage(i + offset - 1, 56 * qxd);
        pageImage.Save(newFile, ImageFormat.Png);
        pageImage.Dispose();
    }

    ShowMessage("PDF文件已拆分完成,请打开原文件夹进行查看!");
}

导出的图片保存在原文件夹下,文件名为页码+原文件名的png格式图片

Tags:

最近发表
标签列表