C#快速实现word转pdf与jpg转pdf功能
由于最近各方面都比较忙,博客也没什么时间来更新,今天忙中偷闲来写一篇文章给博客拔拔草,也是记录一下这两天刚遇到并解决得问题。之前生成PDF一般都是用福昕阅读器,但是基本是单线程的转换效率,少的话还行,但是多的话就很难受了。正好今天需要转换几十个word文档成PDF,而且福昕阅读器好像有点问题,一直提示word文件受损,找了一圈也没解决问题,索性就自己写了一个小工具,节省一下时间。
本次需求:选择指定文件夹,将文件夹内所有word或者jpg转换为PDF,遍历文件夹内的所有文件,之前有写过一篇博客,可以移步查看《C#遍历文件夹取所有文件物理路径》
实例代码:( Word转Pdf需要电脑安装有office,Jpg转Pdf需要nuget里搜索并引用iTextSharp)
using iTextSharp.text.pdf;
using Microsoft.Office.Interop.Word;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
public static class Program
{
static void Main(string[] args)
{
List<string> vs= FindFile(@"C:\Users\17781\Desktop\文件目录");
vs = vs.Where(t => t.Contains(".jpg")&&!t.Contains("$")).ToList();
foreach (var item in vs)
{
ConvertJPG2PDFMain(item, item.Replace("jpg", "pdf"));
}
vs = vs.Where(t => t.Contains(".pdf") && !t.Contains("$")).ToList();
foreach (var item in vs)
{
WordToPDF(item, item.Replace("docx", "pdf"));
}
Console.WriteLine("OK");
}
/// <summary>
/// 遍历文件夹内所有内容
/// </summary>
/// <param name="sSourcePath"></param>
/// <returns></returns>
public static List<string> FindFile(string sSourcePath)
{
List<string> list = new List<string>();
DirectoryInfo theFolder = new DirectoryInfo(sSourcePath);
FileInfo[] thefileInfo = theFolder.GetFiles("*.*", SearchOption.TopDirectoryOnly);
foreach (FileInfo NextFile in thefileInfo)
{
list.Add(NextFile.FullName);
} //遍历文件
//遍历子文件夹
DirectoryInfo[] dirInfo = theFolder.GetDirectories();
foreach (DirectoryInfo NextFolder in dirInfo)
{
FileInfo[] fileInfo = NextFolder.GetFiles("*.*", SearchOption.AllDirectories);
foreach (FileInfo NextFile in fileInfo) //遍历文件
{
list.Add(NextFile.FullName);
}
}
return list;
}
/// <summary>
/// word转PDF(使用office内置接口)
/// </summary>
/// <param name="sourcePath"></param>
/// <param name="targetPath"></param>
/// <returns></returns>
public static bool WordToPDF(string sourcePath, string targetPath)
{
bool result = false;
Microsoft.Office.Interop.Word.Application application = new Microsoft.Office.Interop.Word.Application();
Document document = null;
try
{
application.Visible = false;
document = application.Documents.Open(sourcePath);
document.ExportAsFixedFormat(targetPath, WdExportFormat.wdExportFormatPDF);
result = true;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
result = false;
}
finally
{
document.Close();
}
return result;
}
/// <summary>
/// jpg转pdf(需要引用iTextSharp)
/// </summary>
/// <param name="jpgfile"></param>
/// <param name="pdf"></param>
public static void ConvertJPG2PDFMain(string jpgfile, string pdf)
{
var document = new iTextSharp.text.Document(iTextSharp.text.PageSize.A4, 25, 25, 25, 25);
using (var stream = new FileStream(pdf, FileMode.Create, FileAccess.Write, FileShare.None))
{
PdfWriter.GetInstance(document, stream);
document.Open();
using (var imageStream = new FileStream(jpgfile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
var image = iTextSharp.text.Image.GetInstance(imageStream);
if (image.Height > iTextSharp.text.PageSize.A4.Height - 25)
{
image.ScaleToFit(iTextSharp.text.PageSize.A4.Width - 25, iTextSharp.text.PageSize.A4.Height - 25);
}
else if (image.Width > iTextSharp.text.PageSize.A4.Width - 25)
{
image.ScaleToFit(iTextSharp.text.PageSize.A4.Width - 25, iTextSharp.text.PageSize.A4.Height - 25);
}
image.Alignment = iTextSharp.text.Image.ALIGN_MIDDLE;
document.Add(image);
}
document.Close();
}
}
}
}
以上代码直接创建个控制台程序就能跑,是不是很简单就实现了我们想要的功能。一个小插曲,我在做这个功能之前搜索了网上的很多word转pdf的在线工具,要么转不了,要么得收费,后面如果有时间了,考虑做个工具站吧,顺便把ChatGPT也安排一下。
版权声明:
作者:兴兴
文章:C#快速实现word转pdf与jpg转pdf功能
链接:https://www.networkcabin.com/notes/2948
文章版权归本站所有,未经授权请勿转载。
作者:兴兴
文章:C#快速实现word转pdf与jpg转pdf功能
链接:https://www.networkcabin.com/notes/2948
文章版权归本站所有,未经授权请勿转载。
THE END