2010-07-18 163 views
5

我正在为朋友创建电子书。他有word(docx)中的内容,所以我有几个问题。我之前就如何解决这个问题创建了一个线程,最好的反应是创建PDF。这样做的要点是我们可以插入文本框,链接和目录。在c#应用程序中托管PDF

现在我想知道是否可以在我的应用程序中托管PDF。我想基本上制作一个“Adobe Reader”。有没有这样的图书馆?我可以使用安装的COM/dll来做到这一点吗?

之所以这样做,是因为我在创建应用程序或“报告卡”或“书签”功能时,就像是“测验”部分。

谢谢你们。

回答

6

制作 a 定制PDF浏览器控制可能是一项极具挑战性的任务。您可以在您的应用程序中使用真实的Adobe Reader,因为它提供的COM控件可以托管在任何Windows应用程序中。以下是具体步骤:

  1. 启动一个新的WinForms应用程序
  2. 请在工具箱中可用的Acrobat控制(工具 - >添加/删除工具箱项:在COM组件选项卡打开“安装Adobe Acrobat 7.0浏览器文件” )。在点击COM选项卡之前,不要忘记拿一杯咖啡。
  3. 将控件形式
  4. 操纵它:

    axAcroPDF1.LoadFile("mypdf.pdf"); 
    axAcroPDF1.Show(); 
    
+0

我会投票,因为它会工作..虽然我认为使用WebBrowser控制更简单。 – David 2010-07-18 19:55:52

+0

@David,而'WebBrowser'的方法确实更容易实现,与Adobe组件相比,您可以轻松控制PDF,使您可以导航,打印... – 2010-07-18 20:01:17

+0

太棒了!但是我可以分发正确的库吗?安装人员应该完成这项工作。如何使用像foxit这样的轻量级pdf阅读器,它可以被类似地使用吗? – masfenix 2010-07-18 20:10:39

1

我知道这已被问过,但我不记得在哪里。接受的答案是沿着这些路线的东西:

这将是一个非常糟糕的主意,以创建自己的PDF阅读器,这是因为:

  1. 你是不是在当时,Adobe 改变规格
  2. 的Adobe控制免费提供 阅读器,大多数 用户已经安装。
  3. 鉴于前面的两个陈述,为什么要花这么多时间重新发明轮子?当你可以改进它时,重新发明轮子是有意义的,但是当你只是在复制可以免费获得的功能时,则不是。

找到一种方法可以使用他们已经设计并免费分发的Acrobat reader。

这很容易做到。您只需使用WebBrowser控件(假设这是WinForms)并将DocumentSource设置为PDF文件即可。 WebBrowser控件将自动使用客户端PC上已安装的任何pdf阅读器,就像Internet Explorer一样。

1

我有很好的经验,工作的Aspose库。它们价格合理,可为您节省大量时间。

1

您可以通过您的机器上安装的ActiveX组件以及阅读器在您的应用程序中嵌入Adobe Reader。您可以从COM Components选项卡将它添加到VS Toolbox。任何安装了Abobe Reader的用户都可以使用您的应用查看PDF文档。 请注意,如果没有安装Adobe Reader,您的程序将无法工作,或者您需要以某种方式为应用程序提供lib。 如果你想要一些不需要Adobe Reader的东西,那么你可能想看看iText#

+0

缺点是您的应用程序无法在没有安装Adobe Reader的机器上工作。我猜OP只是为朋友建立一些东西,但如果我只是为了使用其他应用程序而必须安装adobe reader,我会很不高兴...... – 2010-07-18 20:08:49

+0

Acutally,朋友是一家大公司的承包商。该公司需要将其分发给他们的客户,并且他们不能将任何东西发送出去。 – masfenix 2010-07-18 20:20:56

+0

如果没有Adobe的许可,公司甚至可以分发adobe库(正常redist许可证只允许重新分发完整的安装程序:http://www.adobe.com/products/reader/rdr_distribution1.html)。我希望狐狸有类似的要求 – 2010-07-18 20:38:58

0

使用Adobe ActiveX/com组件的一个潜在问题是用户必须安装Adobe Reader才能正常工作(我认为您不能仅允许和/或仅允许重新分发activeX控件,并且不会我不想强迫我的用户安装Adobe Reader)。因此,对于更严肃的工作,我会尝试使用可以随代码一起分发的Pdf库,例如为开放源代码库http://ccxvii.net/mupdf/编写一个(可能非常小的)P/Invoke包装器,或者如果您可以/想要它使用一些商业图书馆。

使用web浏览器控件的一个问题是,你必须小心地测试如果在IE中禁用PDF作为嵌入的目标用户会发生什么情况。它可能会发生,而不是嵌入你得到一个外部Adobe阅读器(或任何注册为PDF处理程序)弹出!有可能是一种解决方法,但我之前已经被它咬过(导致其中一个“在我的机器上工作”的问题)

+0

这个问题是,库不支持嵌入链接或文本框等的PDF文件,或者它? – masfenix 2010-07-18 20:19:47

+0

那么,这将取决于图书馆:)我不确定mupdf是诚实的,但是IIRC sumatrapdf基于mupdf和sumatra,至少支持嵌入式链接,ToC和书签。 Tyler Jensen提到Aspose,我想这会支持更高级的pdf功能,但我从来没有用过它,而且它有点贵...对于mupdf,我想你可以简单地尝试看看sumatrapdf是否支持你需要的功能,然后调查一个P/Invoke层为.net做了多少努力。 – 2010-07-18 20:26:19

+0

哦,当然mupdf是GNU GPL3(“有关商业许可请联系[email protected]。”)。所以你一定要确保你遵守许可条款 – 2010-07-18 20:32:57

相关问题