代码之家  ›  专栏  ›  技术社区  ›  Maciej

在C中预览PDF#

  •  8
  • Maciej  · 技术社区  · 16 年前

    我正在寻找.net gui组件(不同于 PDFsharp 允许 预览PDF 1页文档 .
    基本上,我需要类似于picturebox的东西,在那里我可以加载位图并显示它。

    如果这个组件允许在里面缩放和移动图片,那就太好了。
    首选免费软件解决方案:)

    5 回复  |  直到 9 年前
        1
  •  5
  •   bryanjonker    16 年前

    另一个选项是在gui中使用webbrowser控件。它将使用浏览器来呈现pdf文件,但我愿意这样做,而不是使用adobe reader activex组件。

    如果您不想在客户机上使用任何类型的pdf阅读器,也可以通过ghostscript将其转换为图形文件并显示为位图。

        2
  •  2
  •   Community Mohan Dere    9 年前

    您可以使用Acrobat Reader附带的ActiveX组件。

    How to render pdfs using C#

        3
  •  2
  •   Vitaliy Fedorchenko    9 年前

    这个问题相当陈旧,但提出的解决方案有很大的缺点:

    • webbrowser控件依赖于ie,它可以显示pdf文档(只有安装了adobe reader时才是这样)
    • Ghostscript是在AGPL下授权的,在封闭源代码/商业项目中使用它需要相当昂贵的许可证。

    幸运的是,存在免费的替代方案:poppler工具(基于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);
    

    组件不是免费的,但它的定价非常合理。

        4
  •  1
  •   lance    16 年前

    ImageGear for .NET

    不是免费的。可以说范围比你关心的要大。我希望它能有所帮助。

        5
  •  0
  •   Rowan    16 年前

    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图像,因此可以相当轻松地处理缩放。