我正在尝试将自定义的 html 文件另存为 pdf..通常我会在浏览器(chrome)上按 ctrl-P 并打印为 pdf..
但是当我打开pdf文件时,pdf阅读器(adobe)左侧没有书签选项卡。
我想要的是将 html 文件另存为 pdf,并且书签应出现在 pdf 阅读器的左侧:
我创建了 html 文件。我使用id
超链接添加了指向其中某些部分的链接:
<a href="#part1">part1</a>
...some codes here...
<div id="part1">
Run Code Online (Sandbox Code Playgroud)
它有效,但我不知道如何从 html 在 pdf 中创建书签...通常 MS Word 或 Libre Office 可以使用书签将其文档转换为 pdf..
但是如何使用 HTML 制作带有书签的 pdf 呢?
好的,所以我遇到了这个问题,并且真的希望这里有一个有效的解决方案。当没有时,我认为我应该添加我发现的内容,以便希望下一个开发人员可以从中受益。
首先:HTML 到 PDF 的转换实际上并不取决于HTML 本身- 它取决于转换引擎决定如何处理您的 HTML。例如,如果您的方法是:在 IE/Chrome/Firefox/其他浏览器中打开它 > 文件 > 打印 > Microsoft 打印到 PDF - 那么,您的转换引擎是“Microsoft 打印到 PDF”。无论您当时使用什么浏览器- 它所做的只是创建一个打印流以发送到打印机。因此,如果 Microsoft Print to PDF 不会为您创建书签(事实并非如此),那么您使用哪个Web 浏览器打开 PDF 并不重要。
这是任何 Ctrl-P / Print 途径的关键问题。Web 浏览器最终创建打印流,转换库将其简单地流式传输为 PDF。 我查看的所有网络浏览器都没有内置支持转换为 PDF 的本机支持(为什么会这样?99% 的用例都包含“打印到 PDF”功能。)以及我尝试过的打印驱动程序(Microsoft打印到 PDF、Adobe PDF Print)无法从原始打印流中找出书签。这是有道理的。
因此,此时,您需要的是一个独立的 PDF 转换引擎 - 可以主动打开 HTML 文件并从那里进行转换,而不是通过 Web 浏览器。 是否有 PDF 转换引擎可以执行此操作并添加基于标题标签的书签?可能吧。我们现有的工具(ABCPdf、Neevia)无法做到这一点,但肯定有可能存在。
所以现在怎么办?
我探索了几种不同的选择。
选项#1:单独的文件,与 Adobe 结合
Adobe Acrobat(非查看器版本)作为转换引擎时,会自动为其转换的每个文件添加书签。因此,您可以提交 HTML 内容,不是作为单个 HTML 文件,而是作为您想要添加书签的每个部分的 HTML 文件。
好消息是,如果某个部分有一个超链接指向其合并的另一个文档,那么它足够智能,可以让该超链接指向其创建的内部 PDF 中的位置(它不是像我预期的那样是外部超链接)。不过,有两个坏消息:
选项#2:单独的文件,与另一个库结合
选项#1 的第一个“缺点”可能不是问题。但第二个就很丑了。其他库绝对可以创建书签,而无需为每个文件创建 3 个书签。这里的主要障碍是:库必须足够智能,才能解析所创建的 PDF 中的“外部”超链接。经常造成伤害的一件事是,这些转换库通常希望首先在内部将每个单独的文件转换为 PDF,然后将 PDF 合并在一起......但这意味着它无法正确处理跨文件超链接。我无法找到一种方法来使其与我们现有的 PDF 转换库一起工作。
选项#3:不同的发起方法
不要使用“Help.html”(然后以某种方式转换为 PDF),而是从 HTML 以外的格式开始。进入 PDF+书签的最简单来源是 MSWord+标题。一般来说,对于您想要的每个 PDF 帮助文件,您都可以在幕后某个地方拥有一个主 .DOCX。我们以前使用过这种方法,虽然它不是最优雅的,但至少效果很好。
选项#4:使用库进行编程
这可能不适用于 OP 的用例...但是如果您要生成帮助,则没有什么可以说您不能以编程方式使用 PDF 转换库来添加您想要的任何书签。我见过的几乎所有 PDF 引擎都允许通过 API 访问书签,因此,如果您可以使用此途径,那么它几乎肯定是最干净的解决方案。
选项#5:PDF 转换精练
就像我提到的,可能有一个 PDF 转换引擎,它具有良好的 HTML 解析引擎,并且可以处理来自各种 HTML 标签(如 H1、H2 等)的书签。但是,可能需要一些时间才能找到它,因为对于潜在的引擎编写者来说,允许使用本机查看器渲染文件要容易得多。想一想。如果您正在编写 PDF 转换服务,您更愿意这样做:
...第二个选项比第一个选项简单得多,因此大多数 PDF 转换引擎没有自己的内部 HTML 解析器(或者就此而言,Word 解析器、Excel 解析器等)也就不足为奇了。