因為工作需要,要把PDF的64字元串轉換為圖片的base64保存到資料庫,但是看了看國內外,一方面是做這個的比較少,還有就是做這個真的很煩. PDF轉圖片呢,大概的實現思路方式一般有兩種,一種就是重繪,類似於畫畫,把看到的畫到新的畫布上;第二種呢,就會識別裡面的內容複製到新的畫布上,我也不知道我比喻 ...
因為工作需要,要把PDF的64字元串轉換為圖片的base64保存到資料庫,但是看了看國內外,一方面是做這個的比較少,還有就是做這個真的很煩.
PDF轉圖片呢,大概的實現思路方式一般有兩種,一種就是重繪,類似於畫畫,把看到的畫到新的畫布上;第二種呢,就會識別裡面的內容複製到新的畫布上,我也不知道我比喻準不准,無所謂了,因為今天不做這個.
在國內,做這個的發現很少,pdf在中國真的很不流行,沒辦法,為了完成任務,乾唄.
百度PDF轉圖片,出來一大堆,但是可以用的真的很少,尤其是教程,很少很少,而且大部分都是通過第三方來實現的,所以就有了Spire.PDF、O2S.Components等盜版的DLL(因為本有有著“提高全民意識,保護知識產權”的21世紀三號青年的覺悟,所有不推薦大家這麼做)
下麵先貼個代碼
尊重國產品牌,先來演示個國產軟體Spire.Pdf的轉換
先引用 Spire.Pdf Spire.Pdf下載地址 : https://www.e-iceblue.com/Download/download-pdf-for-net-now.html
string base64 ="";//這裡是pdfBase64字元串
byte[] pdfByte = Convert.FromBase64String(base64);
PdfDocument pdf = new PdfDocument(pdfByte);
Image img = pdf.SaveAsImage(0, 400, 400);
Bitmap bmp = new Bitmap(img);
MemoryStream strem = new MemoryStream();
bmp.Save(strem, ImageFormat.Png);
byte[] data = new byte[strem.Length];
strem.Seek(0, SeekOrigin.Begin);
strem.Read(data, 0, Convert.ToInt32(strem.Length));
var pngBase64 = Convert.ToBase64String(data);
在這裡我是將PDF轉換為png,轉換其他格式也是可以的,註意的是pdf.SaveAsImage(0, 400, 400)函數中,第一個參數是要轉換的頁數,第二個和第三個是清晰度哇,數字越大,轉換效果越好,最大400,其他了,看起來應該不難,應該都能看懂,要是直接pdf文件轉圖片文件,那就更簡單了,直接保存就好,不需要讀取base64了
請大家支持國產,支持原創 官網地址(https://www.e-iceblue.com/)
下麵這個是O2S.Components PDF轉圖片,外國的,效果沒有Spire.Pdf好
O2S.Components.PDFRender4NET 程式集文件下載地址(盜版的,沒有水印)下載地址:https://pan.baidu.com/s/1wMcmFzBic2e_0VjY66zdFg
貼個代碼自己看吧
需要引用O2S.Components.PDFRender4NET;
string base64 ="";//這裡是pdfBase64字元串
byte[] pdfByte = Convert.FromBase64String(base64);
MemoryStream stream = new MemoryStream(pdfByte);
PDFFile pdfFile = PDFFile.Open(stream);
Bitmap pageImage = pdfFile.GetPageImage(0, 2000);
MemoryStream strem = new MemoryStream();
pageImage.Save(strem, ImageFormat.Png);
byte[] data = new byte[strem.Length];
strem.Seek(0, SeekOrigin.Begin);
strem.Read(data, 0, Convert.ToInt32(strem.Length));
string result = Convert.ToBase64String(data);
通過第三方的轉大概就是個這,用其他的也差不多,但是都是收費的,經過若幹天的折磨,終於有了個新的方案,領導不想花錢,沒辦法,自己實現繪圖唄
註意,在項目運行的時候需要把gsdll32.dll放在\ConvertToImage\bin\Debug下麵哦
由於代碼量眾多,自己下載觀看去吧,都有註釋,哈哈哈哈
https://pan.baidu.com/s/1WxsQ_tCnVHHp0-JmTaivtA