用C#预览PDF
我正在寻找.NET GUI组件(不同于PDFsharp ),允许预览PDF 1页文档 。
基本上我需要类似于PictureBox的东西,我可以加载位图并显示它。
如果该组件允许缩放和移动图片内部将会很棒。
免费软件解决方案首选
另一种选择是在GUI中使用WebBrowser控件。 它将使用浏览器来呈现PDF,但我会使用Adobe Reader ActiveX组件而不是使用它。
如果您不希望客户端上有任何类型的PDF阅读器,您还可以通过GhostScript将其转换为图形文件并将其显示为位图。
您可以使用Acrobat Reader附带的activex组件。
如何使用C#呈现pdf
问题相当陈旧,但提出的解决方案有明显的缺点:
- WebBrowser控件依赖于IE并且它可以显示PDF文档(仅当安装了Adobe Reader时才会出现这种情况)
- GhostScript是根据AGPL许可的,它需要相当昂贵的许可才能在封闭源/商业项目中使用。
幸运的是,存在免费替代方案:poppler工具(基于xpdf代码库),它们是根据GPL许可的,可以用作控制台实用程序。 从.NET代码可以使用System.Diagnostics.Process执行。
为了简化poppler工具的使用,我们开发了NReco.PdfRenderer .NET包装器,它嵌入了poppler windows二进制文件(它们是在第一次使用时提取的),并提供了简单的API,用于将PDF页面呈现为图像:
var pdfToImg = new NReco.PdfRenderer.PdfToImageConverter(); Image firstPageImg = pdfToImg.GenerateImage( "test.pdf", 1);
组件不是免费的,但其定价非常合理。
ImageGear for .NET
不是免费的。 可以说比你所关注的范围更大。 我希望它在某种程度上有所帮助。
快速PDF库 ,我的公司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图像,因此您可以非常轻松地处理缩放。