我正在嘗試
使用以下代碼將 SQL 資料庫中的影像包含到 PDF 檔案中:(使用 PDFsharp 版本 1.50.5147)
代碼:
private PdfDocument openImageFromByteArray(byte[] ImageStream)
{
MemoryStream stream = new MemoryStream(ImageStream);
PdfDocument OutputDocument = new PdfDocument();
OutputDocument.Pages.Add(new PdfPage());
XGraphics xgr = XGraphics.FromPdfPage(OutputDocument.Pages[0]);
XImage img = XImage.FromStream(stream);
xgr.DrawImage(img, 0, 0);
//OutputDocument.Save("C:\\Test\\Test.pdf");
//OutputDocument = PdfReader.Open("C:\\Test\\Test.pdf", PdfDocumentOpenMode.Import);
//System.IO.File.Delete("C:\\Test\\Test.pdf");
return OutputDocument;
}
如果我在本地保存 OutputDocument 然后重新加載保存的 PDF 它作業正常(注釋掉的部分),但是只要代碼在沒有注釋掉的部分的情況下運行,或者從我需要部署到的服務器上運行,我就會收到錯誤訊息影像未正確解碼。由于權限問題,我無法在服務器上保存或創建檔案。
這是來自服務器的 PDF 上的錯誤:
處理檔案 test.png 時發生錯誤 閱讀器無法處理此檔案,因為它使用了來自不同版本 Adob??e Acrobat 的不受支持的功能,或者因為檔案已損壞,例如它作為電子郵件附件發送并且沒有正確解碼。您可以手動下載和列印檔案以包含在報告中或從備份副本列印。
我嘗試了許多不同的代碼更改,但結果要么相同,要么我有實際的代碼錯誤,所以我什至無法構建專案。
uj5u.com熱心網友回復:
如果錯誤僅在您評論該部分時發生,我認為它發生在此方法之外。我的猜測是 OutputDocument.Save(已注釋)最終會關閉 MemoryStream,否則您不會這樣做。
在創建 MemoryStream 時嘗試使用 using 陳述句(檢查波紋管)并檢查它是否有效,或編輯您的問題以包含發生錯誤的地方代碼。
private PdfDocument openImageFromByteArray(byte[] ImageStream)
{
using(MemoryStream stream = new MemoryStream(ImageStream))
{
PdfDocument OutputDocument = new PdfDocument();
(...)
return OutputDocument;
}
}
uj5u.com熱心網友回復:
代碼中顯示的方法回傳一個PdfDocument物件,但MemoryStream用于創建 的XImage是在創建 PDF 檔案之前處理的(此處未顯示代碼)。
我認為如果您在例程中創建 PDF 并回傳 PDF 而不是PdfDocument.
該.Save(...)是現在注釋掉訪問MemoryStream它得到處理,因此沒有問題了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/333228.html
標籤:C# asp.net-mvc 模型视图控制器 pdfsharp
上一篇:如何在一個日期之間選擇日期范圍?
