PDF转图片使用的组件是O2S.Components.PDFRender4NET.dll,由于版本的问题导致有些pdf文件转换成图片为空白的,所以升级到4
转换图片代码:
/// <summary>
/// 将PDF文档转换为图片的方法
/// </summary>
/// <param name="pdfInputPath">PDF文件路径</param>
/// <param name="imageOutputPath">图片输出路径</param>
/// <param name="imageName">生成图片的名字</param>
/// <param name="startPageNum">从PDF文档的第几页开始转换</param>
/// <param name="endPageNum">从PDF文档的第几页开始停止转换</param>
/// <param name="imageFormat">设置所需图片格式</param>
/// <param name="definition">设置图片的清晰度,数字越大越清晰</param>
public static List<string> ConvertPDF2Image(string pdfInputPath, string imageOutputPath,
string imageName, int startPageNum, int endPageNum, ImageFormat imageFormat, Definition definition)
{
PDFFile pdfFile = null;
List<string> lisImage = new List<string>();
try
{
pdfFile = PDFFile.Open(pdfInputPath);
if (!Directory.Exists(imageOutputPath))
{
Directory.CreateDirectory(imageOutputPath);
}
if (startPageNum <= 0)
{
startPageNum = 1;
}
if (endPageNum > pdfFile.PageCount)
{
endPageNum = pdfFile.PageCount;
}
if (startPageNum > endPageNum)
{
int tempPageNum = startPageNum;
startPageNum = endPageNum;
endPageNum = startPageNum;
}
for (int i = startPageNum; i <= endPageNum; i++)
{
Bitmap pageImage = null;
Bitmap newPageImage = null;
try
{
string szImageFileName = imageOutputPath + imageName + i.ToString();
PDFSize size = pdfFile.GetPageSize(i-1);
pageImage = pdfFile.GetPageImage(i - 1, 56 * (int)definition);
pageImage.Save(szImageFileName, imageFormat);
int dHeight = pageImage.Height / 2;
int dWidth = pageImage.Width / 2;
int sW = 0, sH = 0;
//按比例缩放
Size tem_size = new Size(pageImage.Width, pageImage.Height);
if (tem_size.Width > dHeight || tem_size.Width > dWidth)
{
if ((tem_size.Width * dHeight) > (tem_size.Width * dWidth))
{
sW = dWidth;
sH = (dWidth * tem_size.Height) / tem_size.Width;
}
else
{
sH = dHeight;
sW = (tem_size.Width * dHeight) / tem_size.Height;
}
}
else
{
sW = tem_size.Width;
sH = tem_size.Height;
}
Bitmap ob = new Bitmap(dWidth, dHeight);
Graphics g = Graphics.FromImage(ob);
g.Clear(Color.WhiteSmoke);
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.DrawImage(pageImage, new Rectangle((dWidth - sW) / 2, (dHeight - sH) / 2, sW, sH), 0, 130, pageImage.Width, pageImage.Height - 130, GraphicsUnit.Pixel);
g.Dispose();
pageImage.Dispose();
ob.Save(szImageFileName, imageFormat);
ob.Dispose();
lisImage.Add(szImageFileName);
}
catch (System.Exception ex0)
{
Common.LogInfo.WriteTextToFile("pdf转图片的For循环出错" + ex0.StackTrace);
return null;
}
finally
{
if (pageImage != null)
{
pageImage.Dispose();
}
}
}
return lisImage;
}
catch (System.Exception ex)
{
Common.LogInfo.WriteTextToFile("pdf转图片出现异常" + ex.StackTrace);
return null;
}
finally
{
if (pdfFile != null)
{
pdfFile.Dispose();
}
}
}
下载地址:链接: https://pan.baidu.com/s/1cXOigTttNtwVqVXF_l2ODg 提取码: g2wm
(这个版本有水印,旧版本没有可以点击此处)
这个组件存在问题:上传电子发票中文字会被全部抹去,左上角还有个水印。红色水印可以用上述地址的dll,但是上传发票的问题,暂未解决,现更改为pdf.js前端直接查看不转图片。