回答
如果Adobe ActiveX不是您要查找的內容(因爲Acrobat必須存在於用戶機器上,並且您無法自己發貨),還有其他幾種選擇。
對於創建PDF預覽,先看看StackOverflow上關於這個問題的其他一些討論:
- How can I take preview of documents?
- Get a preview jpeg of a pdf on windows?
- .NET open PDF in winform without external dependencies
- PDF Previewing and viewing
在最後兩篇我談了你幾件事可以試試:
你可以得到一個商業渲染器(PDFViewForNet,PDFRasterizer.NET,ABCPDF,ActivePDF,XpdfRasterizer和其他人在其他的答案...)。
雖然大多數都相當昂貴,尤其是如果你所關心的是製作簡單的預覽/縮略圖。除了奧馬爾Shahine的代碼片段,有一個CodeProject article展示瞭如何使用Adobe的ActiveX,但它可能是過時的,很容易被新版本打破,其合法性不明朗(基本上它的確定內部使用但你不能發貨,你不能在服務器上使用它來生成PDF圖像)。
您可以看看SumatraPDF的源代碼,這是一個用於windows的OpenSource PDF查看器。
還有Poppler,一個使用Xpdf作爲渲染引擎的渲染引擎。 所有這些都很好,但他們需要相當的承諾,使他們工作和與.Net接口,他們往往是分佈在GPL下。
您可能需要考慮使用GhostScript作爲解釋器,因爲渲染頁面是一個相當簡單的過程。
缺點是您需要重新打包才能將其安裝在您的應用中,或者將其作爲必備條件(或至少是安裝流程的一部分)。
這不是一個很大的挑戰,而且它必須比其他渲染引擎與.Net合作更容易。
我做了一個小項目,你會發現在Developer Express forums作爲附件。
請注意GhostScript的許可要求。
如果你不能離開那麼商業軟件可能是你唯一的選擇。
ceTe軟件的動態PDF查看器可能會做你正在尋找的東西。我使用過他們的發生器軟件,並且非常滿意。
使用Web瀏覽器控制。這需要安裝Adobe閱讀器,但最有可能的是你有它。將控件的UrL設置爲文件位置。
爲什麼downvote這個答案? – cbrulak 2009-02-06 03:46:31
我不明白你爲什麼需要使用瀏覽器控件,因爲它本身使用可直接訪問的Adobe ActiveX插件。你只是添加一層複雜性和潛在問題,顯然沒有任何理由。 – 2011-02-07 02:18:17
您可以谷歌爲PDF viewer component,並拿出超過幾個點擊。
如果你真的不需要將它們嵌入到你的應用中,你可以只需要Acrobat Reader或FoxIt(或將它捆綁在一起,如果它符合它們各自的許可條款)和shell out。這不是很酷,但它可以免費完成工作。
我使用的最簡單的庫是Paolo Gios's庫。這基本上是
Create GiosPDFDocument object
Create TextArea object
Add text, images, etc to TextArea object
Add TextArea object to PDFDocument object
Write to stream
This是一個很好的教程,讓你開始。
我想Garth想要的只是呈現pdf的;不是你上面顯示的。 – MarlonRibunal 2009-02-06 04:54:05
這是我從另一個問題的答案。
首先,你需要引用ADOBE READER ActiveX控件
的Adobe Acrobat瀏覽器控件的類型庫1.0
%PROGRAMFILES & \ Common Files文件\的Adobe \ Acrobat中\的ActiveX \ AcroPDF.dll
然後,您只需將它從工具箱拖到Windows窗體中即可。
並使用一些像這樣的代碼來初始化ActiveX控件。
private void InitializeAdobe(string filePath)
{
try
{
this.axAcroPDF1.LoadFile(filePath);
this.axAcroPDF1.src = filePath;
this.axAcroPDF1.setShowToolbar(false);
this.axAcroPDF1.setView("FitH");
this.axAcroPDF1.setLayoutMode("SinglePage");
this.axAcroPDF1.Show();
}
catch (Exception ex)
{
throw;
}
}
確保當你的窗體關閉你處理ActiveX控件
this.axAcroPDF1.Dispose();
this.axAcroPDF1 = null;
否則Acrobat中可能被遺落各地。
ABCpdf會爲你做這件事和其他許多事情。
它不會渲染你的PDF到各種格式(如JPEG,GIF,PNG,TIFF,JPEG 2000;矢量EPS,SVG,Flash和PostScript),但它也可以在各種色彩空間(例如灰度,RGB,CMYK)和位深度(例如,每個組件1,8,16位)。
而這只是它會做的一部分!
有關詳細信息,請參閱:
http://www.websupergoo.com/abcpdf-8.htm
哦,你可以通過免費授權方式獲得免費許可。
使用Acrobat進行PDF渲染時存在EULA問題。如果你想走下這條路,首先要非常小心地檢查合法性。
這看起來正確的事情做:http://code.google.com/p/lib-pdf/
谷歌已經開放它採用了福昕軟件編寫的優秀PDF渲染引擎 - PDFium。
有一個名爲PdfiumViewer的C#nuget包,它提供了一個圍繞PDFium的C#包裝並允許顯示和打印PDF。
我已經使用它,並且對渲染的質量印象非常深刻。
PDFium直接處理流,因此它不需要任何數據寫入磁盤。
這是一個WinForms應用程序
public void LoadPdf(byte[] pdfBytes)
{
var stream = new MemoryStream(pdfBytes);
LoadPdf(stream)
}
public void LoadPdf(Stream stream)
{
// Create PDF Document
var pdfDocument = PdfDocument.Load(stream);
// Load PDF Document into WinForms Control
pdfRenderer.Load(pdfDocument);
}
編輯我的例子:爲了獲得在winform的pdfRenderer控制:PdfiumViewer
NuGet包添加到項目中;在Windows資源管理器中打開項目包文件夾,然後將PdfiumViewer.dll
文件拖到Toolbox
窗口;所謂PdfRenderer
控制將可用於補充:
PdfiumViewer是偉大的,但相對緊耦合的System.Drawing
和WinForms。爲此,我創建了各地PDFium我自己的包裝:PDFiumSharp
頁面可以被渲染到PDFiumBitmap這反過來又可以保存到磁盤或暴露as a stream。這樣,任何能夠從流中以BMP格式加載圖像的框架都可以使用該庫來顯示PDF頁面。
例如在WPF應用程序,你可以用下面的方法來渲染PDF頁面:
using System.Linq;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using PDFiumSharp;
static class PdfRenderer
{
public static ImageSource RenderPage(string filename, int pageIndex, string password = null, bool withTransparency = true)
{
using (var doc = new PdfDocument(filename, password))
{
var page = doc.Pages[pageIndex];
using (var bitmap = new PDFiumBitmap((int)page.Width, (int)page.Height, withTransparency))
{
page.Render(bitmap);
return new BmpBitmapDecoder(bitmap.AsBmpStream(), BitmapCreateOptions.None, BitmapCacheOption.OnLoad).Frames.First();
}
}
}
}
很好,但非常昂貴! – 2009-02-17 06:33:31