????????我是將每張圖片轉(zhuǎn)為byte[],再將所有的字節(jié)數(shù)組轉(zhuǎn)為byte[][],然后對byte[][]進(jìn)行的處理,大家有其他格式的圖片要進(jìn)行處理的可以先轉(zhuǎn)為上述數(shù)據(jù)格式。
語種:C#
用到的第三方庫:PdfSharp.dll(可直接使用PDFsharp包),如下圖
思路大概如下:
①申明一個PDF文件對象(PdfDocument變量)
②遍歷我們要處理的所有圖片
③? ?申明一個PDF頁對象(PdfPage變量),申明一個畫板(XGraphics對象)隸屬于剛申明的PDF頁對象,然后用畫板將此次遍歷到的圖片(byte[])畫到PDF頁對象上,然后將PDF頁對象塞到第①步申明的PDF文件對象中。
④此時,遍歷完所有圖像了,PDF文件對象中也有我們要處理的所有圖片數(shù)據(jù)了,直接保存這份PDF文件對象就可以了。
下面是代碼:
/// <summary>
/// 保存PDF圖像【適用于小批量圖片】
/// </summary>
/// <param name="buffer">要處理的所有圖片數(shù)據(jù)</param>
/// <param name="path">PDF的保存路徑</param>
/// <returns></returns>
public static void SavePdf(byte[][] buffer, string savePath)
{
if (buffer == null || buffer.Length == 0)
{
throw new Exception("文件流為空!");
}
Verif(savePath);//此方法我用來驗證路徑,邏輯依自己的業(yè)務(wù)來寫就好,不需要可直接去掉。
string folderPath = Path.GetDirectoryName(savePath);
if (!Directory.Exists(folderPath))
{
Directory.CreateDirectory(folderPath);
}
PdfDocument doc = new PdfDocument();
try
{
for (int i = 0; i < buffer.Length; i++)
{
using (MemoryStream ms1 = new MemoryStream(buffer[i]))
{
//var stream = Image.FromStream(ms1);
//XImage img = XImage.FromGdiPlusImage(stream);
XImage img = XImage.FromStream(ms1);
PdfPage page = new PdfPage();
XGraphics xgr = XGraphics.FromPdfPage(page);
doc.Pages.Add(page);
xgr.DrawImage(img, 0, 0, page.Width.Value, page.Height.Value);//切記這里一定要指定寬高
img.Dispose();
}
}
doc.Save(savePath);
}
catch (Exception e)
{
throw e;
}
finally
{
doc.Dispose();
doc.Close();
}
}
雷點:
在畫圖像(即執(zhí)行xgr.DrawImage()函數(shù))時,一定要指定寬高,即上述代碼中的page.Width.Value和page.Height.Value,否則在處理橫圖時,會出現(xiàn)圖片顯示不全的bug.
文章來源:http://www.zghlxwxcb.cn/news/detail-551355.html
好了,這篇文章就到這里,小伙伴們有什么建議和意見或者不懂的地方,評論區(qū)交流就好。文章來源地址http://www.zghlxwxcb.cn/news/detail-551355.html
到了這里,關(guān)于C# 多張圖片合成一張PDF的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!