回答
另一种选择是在GUI中使用WebBrowser控件。它将使用浏览器来渲染PDF,但我会这样做,而不是混淆Adobe Reader ActiveX组件。
如果您不想在客户端上提供任何类型的PDF阅读器,也可以通过GhostScript将其转换为图形文件并将其显示为位图。
您可以使用Acrobat Reader附带的ActiveX组件。
Quick PDF Library,我公司的PDF SDK,将帮助您呈现PDF文件。这不是免费软件,但是该许可证允许使用它免版税分发已编译的应用程序。寻找用于渲染PDF文件的免费/开源组件比其他基本的PDF操作任务稍微复杂一点,因为渲染PDF文件可能相当困难。
以下是一些C#示例源代码,演示如何在窗体上的图片框中呈现PDF。
private void Form1_Load(object sender, EventArgs e)
{
QuickPDFAX0718.PDFLibrary pdf = new QuickPDFAX0718.PDFLibrary();
qp.UnlockKey("......Licence Key......");
// Open PDF File
int Handle = qp.DAOpenFile("C:\\sample.pdf", null);
// Get Total Number of Pages in a PDF File
int PageCount = qp.DAGetPageCount(Handle);
int PageNo = 1;
// It will get Reference of page 1 from PDF file
int PageRefNo = qp.DAFindPage(Handle, PageNo);
// You can change this parameter for Zoom In/Zoom Out purpose
int Zoom = 76;
double pageWidth = qp.DAGetPageWidth(Handle, PageRefNo)/Zoom;
double pageHeight = qp.DAGetPageHeight(Handle, PageRefNo)/Zoom;
// DPI use for rendering the page. Increase DPI will increate quality of image
int dpi = 92;
// Calculate Dimension of final output image
Bitmap b = new Bitmap(Convert.ToInt32(pageWidth * dpi), Convert.ToInt32(pageHeight * dpi));
// This will Draw render image on GDI
using (Graphics g = Graphics.FromImage(b))
{
IntPtr dc = g.GetHdc();
qp.DARenderPageToDC(Handle, PageRefNo, dpi, (int)dc);
g.ReleaseHdc(dc);
}
// Assigne rendered image to PictureBox Control which will display PDF on Windows Form.
pictureBox1.Image = b;
pictureBox1.BorderStyle = BorderStyle.Fixed3D;
}
库不包含内置功能,帮助您用变焦,但因为你是渲染PDF作为BMP图像,你可以很容易打理的变焦。
问题是比较旧的,但提出的解决方案有显著的缺点:
- WebBrowser控件依赖于IE浏览器,它可以显示PDF文档(这是真的只有在安装了Adobe Reader)
- GhostScript的是根据AGPL许可的,并且它需要在闭源/商业项目中使用相当昂贵的许可证。
幸运的是,有免费的替代方案:popPLT工具(基于xpdf代码库),它们是在GPL下许可的,可用作控制台实用程序。从.NET代码它可以用System.Diagnostics.Process执行。
为了简化poppler的工具的使用,我们已经开发NReco.PdfRenderer .NET包装嵌入poppler的Windows可执行文件(他们正在提取在第一次使用)和渲染PDF页面的图像提供了简单的API:
var pdfToImg = new NReco.PdfRenderer.PdfToImageConverter();
Image firstPageImg = pdfToImg.GenerateImage("test.pdf", 1);
组件不是免费的,但其定价非常合理。
System.Diagnostics.Process仍然需要安装Adobe Reader才能使文件关联起作用,但为了简单起见,需要使用+1。 – OldDog
@OldDog System.Diagnostics.Process不需要Adobe Reader,而poppler工具(pdftoppm)不依赖于Adobe Reader。它产生的图像(PNG或JPG),可以显示为任何其他图像文件。 –
澄清我只是指System.Diagnostics.Process,它依赖于.PDF文件关联。在Windows 10之前,没有本机Windows PDF阅读器。即使使用Windows 10,它也使用IE(Edge)作为原生读卡器,我同意这是一个缺点。根据你的建议,我目前正在使用System.Diagnostics.Process,由于Adobe Reader是很好的编写和相当普遍使用,并且是免费的,它适合我的需求,因为它基本上是单一的语句简单。如果你说你可以使用poppler,那么我们只是不同意这个关联。 – OldDog
- 1. 在Mailer中预览PDF
- 2. 在AIR中的PDF预览
- 3. 在Access 2007中预览PDF?
- 4. PDF asp.net预览
- 5. PDF预览
- 6. 与PDF预览
- 7. 在Android上预览PDF
- 8. 在MFMailComposeViewController预览多页PDF
- 9. XSLT到PDF预览
- 10. 预览PDF文档
- 11. PDF炫耀(预览)
- 12. 在Objective-C中打开一个带有预览的PDF
- 13. 在C#WinForms中预览文档(Word,Excel,PDF,文本文件等)?
- 14. PDF预览和查看
- 15. 保存前预览PDF
- 16. 预览生成的PDF页
- 17. Pdf不在浏览器中预览,但总是下载 - WordPress的
- 18. 在Web浏览器中预览Excel,Word,PDF
- 19. 在Windows上获取PDF的预览JPEG?
- 20. 如何在Javafx上预览PDF文件?
- 21. 在C中的视频预览#
- 22. 在C#中显示打印预览#
- 23. 在C中打印预览窗口#
- 24. 在C#窗体中预览.doc,.docx
- 25. C#打印预览
- 26. c#:如何在Winforms应用程序中显示/预览PDF里面?
- 27. Chrome浏览器中的PDF打印预览错误
- 28. 如何在浏览器上重命名预览pdf文件名
- 29. C#打印一个现有的pdf文件和打印预览
- 30. Alfresco PDF缩略图预览不可读
要跑这条赛道,我们将停止发布在stackoverflow上,因为我们几乎可以在谷歌中找到所有东西... 相信我 - 我之前做过研究。我感兴趣的组件海报尝试过,发现有用/灵活,并可以建议使用它。 – Maciej