pdf从结构新建书签_[过时] [LaTeX] - 使手动添加的 PDF 章节书签跳转位置准确

使用 bookmark 宏包,能避免本文尝试解决的问题,见专栏文章《[LaTeX] 把不编号章节加进目录和 PDF 书签》的「把不编号章节仅加入 PDF 书签」部分。

本文已无实用价值。


hyperref 宏包会为 LaTeX 生成的 PDF 文档生成与文档目录部分内容和结构相同的书签。在 PDF 阅读器中点击书签,就能跳转到对应章节标题出现的位置。

特别地,当阅读器使用「滚动」浏览模式时,将跳转到书签在页面的具体位置,而非只是页面。举例,一个标题出现在页面 1/2 的位置,点击对应书签时,会跳转到标题所在页面,并滚动到 1/2、恰好显示该标题的位置。

e17f1507caa1605ba11c388b19299232.png
一个章节标题

cf7b17891ad3b7f815ccbcf236ad2bf7.png
点击对应书签后,跳转到标题的准确位置

特殊情况下,我们希望一个标题

  • 不出现在文档目录中,但
  • 在 PDF 的书签中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在ReportLab中生成带有侧边栏书签PDF电子书需要几个步骤: 1. 安装ReportLab库和PyPDF2库。 2. 在需要添加书签的地方使用`pdf.addOutline()`函数添加书签,该函数需要一个包含书签名称和页码的字典作为参数。 3. 使用`pdf.save()`函数保存生成的PDF文件。 下面是一个简单的例子,展示了如何在ReportLab中生成带有书签PDF电子书: ```python from reportlab.lib.pagesizes import letter from reportlab.pdfgen import canvas from PyPDF2 import PdfFileWriter, PdfFileReader # Create a new PDF with Reportlab c = canvas.Canvas("bookmarks.pdf", pagesize=letter) # Draw things on the PDF. Here's where the PDF generation happens. # See the ReportLab documentation for the full list of functionality. c.drawString(100, 100, "Chapter 1") c.showPage() c.drawString(100, 100, "Chapter 2") c.showPage() c.save() # Create a PDF object, using the file object as its "file." pdf = PdfFileReader(open("bookmarks.pdf", "rb")) # Create a PDF outline pdf.addOutline({'Title': 'Chapter 1', 'Page': 1}) pdf.addOutline({'Title': 'Chapter 2', 'Page': 2}) # Save the new pdf output = PdfFileWriter() output.addPage(pdf.getPage(0)) output.addPage(pdf.getPage(1)) output.write(open("bookmarks_with_outline.pdf", "wb")) ``` 这样就生成了一个名为"bookmarks_with_outline.pdf"的带有侧边栏书签的电子书了。 ### 回答2: 在reortlab中生成一个带有侧边栏书签PDF电子书,我们需要遵循以下步骤: 1. 导入所需的库和模块: ``` from reportlab.lib.pagesizes import letter from reportlab.lib.enums import TA_CENTER from reportlab.pdfgen.canvas import Canvas from reportlab.platypus import TableOfContents, Paragraph, SimpleDocTemplate, \ Spacer, PageBreak, Frame, KeepInFrame from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle, \ ListStyle, ListItem ``` 2. 创建一个包含目录的数据结构: ``` story = [] toc = TableOfContents() toc.levelStyles = [ParagraphStyle(fontName='Helvetica-Bold', fontSize=16, name='Heading1', spaceAfter=10)] story.append(toc) story.append(PageBreak()) ``` 3. 设置样式: ``` styles = getSampleStyleSheet() title_style = styles['Title'] heading1_style = styles['Heading1'] body_style = styles['BodyText'] ``` 4. 添加章节和内容: ``` # 添加章节标题 story.append(Paragraph('章节一', heading1_style)) # 添加内容 story.append(Paragraph('这是章节一的内容。', body_style)) # 添加目录条目(书签) toc.addEntry('章节一', 0, 1) ``` 5. 创建PDF文档: ``` doc = SimpleDocTemplate("book.pdf", pagesize=letter) # 将故事(章节和内容)添加到文档中 doc.build(story) ``` 通过以上步骤,我们可以在生成的PDF电子书中看到侧边栏的书签,并且点击书签可以到相应的章节内容。这样的PDF电子书非常适合用于创建可导航的文档或电子书。 ### 回答3: 在reortlab中生成一个带有侧边栏书签pdf电子书,可以按照以下步骤操作: 1.首先,在LaTeX中使用reortlab文档类创建一个新的.tex文件。 2.在导言区,使用相关的包,如`\usepackage{hyperref}`来引入hyperref宏包,它可以帮助我们创建书签。 3.在正文区域,书写内容,并按照需要添加章节、子章节以及其他标题。 4.在需要添加书签的地方,使用`\section{}`、`\subsection{}`等命令来创建相应的章节。例如,`\section{Introduction}`。 5.在`\begin{document}`和`\end{document}`之间,使用`\tableofcontents`命令来生成目录。 6.接下来,使用`\phantomsection`命令来标记书签链接的位置。例如,`\phantomsection \label{bookmark}`。 7.在书签所在的位置,使用`\hypertarget{bookmark}`命令来设置书签。 8.在需要书签位置,使用`\hyperlink{bookmark}{text}`命令来创建链接,其中`bookmark`是之前设置的书签名称,`text`为显示的文本。 9.完成以上设置后,使用编译器(如Texmaker等)进行编译生成PDF文件。 10.打开生成的PDF文件,你将看到在侧边栏上显示了书签。 11.点击这些书签,可以到你之前设置的相应位置。 通过以上步骤,你就可以在reortlab中生成一个带有侧边栏书签pdf电子书。这样的电子书对于读者阅读和导航来说非常方便,可以快速到感兴趣的章节或内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值