Image2PDF

最近由于项目需要, 写了一个Image2PDF的工具。起码用起来比较灵活一些。

主要用的iTextSharp的类库实现的PDF输出。

using iTextSharp.text;
using iTextSharp.text.pdf;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace Img2Pdf
{
    class PDFTools
    {

        public static void WritePdf(IList<Image> images, string pdfPath)
        {
            var doc = new Document(images[0]);
            doc.SetMargins(0, 0, 0, 0);
            using (var fs = new FileStream(pdfPath, FileMode.Create, FileAccess.Write, FileShare.None))
            {
                var writer = PdfWriter.GetInstance(doc, fs);
                doc.Open();
                foreach (var img in images)
                {
                    doc.Add(img);
                    doc.NewPage();
                }
                doc.Close();
            }
        }

        public static IList<Image> GetImages(string directoryPath)
        {
            var list = new List<Tuple<string, Image>>();
            foreach (string path in Directory.GetFiles(directoryPath))
            {
                if (!IsImage(Path.GetExtension(path)))
                    continue;

                Image img = null;
                try
                {
                    img = Image.GetInstance(path);
                    list.Add(new Tuple<string, Image>(path, img));
                }
                catch
                {
                    // do nothing
                }
            }
            list.Sort(new ImageComparer());
            return list.Select(i => i.Item2).ToList();
        }

        public static bool IsImage(string ext)
        {
            ext = ext.ToLowerInvariant();
            return ext == ".gif" || ext == ".bmp" ||
                ext == ".jpg" || ext == ".jfif" || ext == ".jpeg" || ext == ".jpe" || ext == ".jfi" || ext == ".jif" ||
                ext == ".png" || ext == ".wmf" || ext == ".tif" || ext == ".tiff" || ext == ".jbig2"
                ;
        }

        public static void WriteDirPdf(string directoryPath)
        {
            var imgs = GetImages(directoryPath);
            if (imgs.Count > 0)
            {
                string pdf = directoryPath + ".pdf";
                WritePdf(imgs, pdf);
            }

            foreach (string path in Directory.GetDirectories(directoryPath))
            {
                WriteDirPdf(path);
            }
        }

        private class ImageComparer : IComparer<Tuple<string, Image>>
        {
            public int Compare(Tuple<string, Image> x, Tuple<string, Image> y)
            {
                return x.Item1.CompareTo(y.Item1);
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
image2pdf是一种将图像文件转换为PDF文件的源代码。它可以将多个图像文件合并为一个PDF文件,并可以设置PDF文件的输出属性。 image2pdf源代码的基本流程如下: 1. 导入所需的库和模块,如PIL库用于图像处理,reportlab库用于生成PDF文件。 2. 设置输出PDF文件的属性,如页面大小、边距等。 3. 打开图像文件夹,遍历文件夹内的所有图像文件。 4. 对于每个图像文件,使用PIL库打开图像,并根据需要调整图像的大小、分辨率等属性。 5. 创建一个PDF文档对象。 6. 将处理后的图像文件添加到PDF文档对象中。 7. 保存PDF文档对象为PDF文件。 8. 完成转换,输出转换成功的信息。 以下是一个简单示例的代码: ```python from PIL import Image from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import letter def image2pdf(image_folder, output_pdf): # 设置PDF文件的属性 c = canvas.Canvas(output_pdf, pagesize=letter) # 打开图像文件夹,遍历文件夹内的所有图像文件 for filename in os.listdir(image_folder): if filename.endswith(".jpg") or filename.endswith(".png"): # 打开图像文件 image = Image.open(os.path.join(image_folder, filename)) # 调整图像大小等属性 image = image.resize((500, 700)) # 添加图像到PDF文档 c.drawImage(image, 0, 0, width=500, height=700) # 保存PDF文档 c.save() print("转换完成!") # 调用函数进行转换 image2pdf("image_folder", "output.pdf") ``` 需要注意的是,此示例仅展示了基本的图像转换为PDF的过程,具体的实现需要根据实际需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值