如何获取PDF书签并将书签添加到新的PDF中?

2024-09-30 20:21:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在合并一个PDf到另一个到另一个PDf,它工作得很好,但书签在最终的PDf中丢失。在

以下是PDF生成代码:

#- Create One Page PDF with some text
from reportlab.pdfgen import canvas as canx
c = canx.Canvas('transparent.pdf')
c.setStrokeColor((1, 0, 0))
transparentwhite = canx.Color(255, 255, 255, alpha = 0.0)
c.setFillColor(transparentwhite)
t = c.beginText()
t.setTextRenderMode(2)
c._code.append(t.getCode())
c.setFont('Helvetica', 48)
c.saveState()
c.translate(100, 100)
c.rotate(45)
c.drawCentredString(500, 100, 'DRAFT')
c.save()

以下是合并代码:

^{pr2}$

但元数据中缺少书签和标题。在

什么是canvas对象的'bookmarkHorizontal', 'bookmarkHorizontalAbsolute', 'bookmarkPage'方法?在

同样的问题也在这里How to Add bookmarks to PDF file?


Tags: to代码textfrompdfcreatewithpage
1条回答
网友
1楼 · 发布于 2024-09-30 20:21:04

我可以从以下代码中获取标题:

from pyPdf import PdfFileReader
pdf_toread = PdfFileReader(open('NOID_body20160202T133650.pdf', "rb"))
pdf_info = pdf_toread.getDocumentInfo()
print pdf_info

通过setTitle方法将标题设置为新PDF

^{2}$

或者:

import PyPDF2 as pdf
writeroutput = pdf.PdfFileWriter()
writeroutput.addMetadata({'/Title': u'Print Page Sizes'})

书签

  1. 首先从input pdf中获取书签这些代码How to get bookmark's page number

  2. 以下代码向新PDF添加书签:

`

transparentbannerfile = open('transparent.pdf', 'rb')
testpagefile = open('NOID_body20160202T133650.pdf', 'rb')
outputfile = open('mergedtransparent112.pdf', 'wb')
import PyPDF2 as pdf
from collections import OrderedDict
readerbanner = pdf.PdfFileReader(transparentbannerfile)
readertestpages = pdf.PdfFileReader(testpagefile)
bannerpage = readerbanner.getPage(0)
writeroutput = pdf.PdfFileWriter()
for x in xrange(readertestpages.getNumPages()):
    pagex = readertestpages.getPage(x)
    pagex.mergePage(bannerpage)
    writeroutput.addPage(pagex)

a = OrderedDict([(u'SIDDHARTHA', {'top': 750, 'left': 0, 'page': 1, 'title': u'SIDDHARTHA'}), (u'Chapter 01', {'top': 750, 'left': 0, 'page': 3, 'title': u'Chapter 01'}), (u'Chapter 02', {'top': 503, 'left': 0, 'page': 6, 'title': u'Chapter 02'}), (u'Chapter 03', {'top': 340, 'left': 0, 'page': 11, 'title': u'Chapter 03'}), (u'Chapter 04', {'top': 231, 'left': 0, 'page': 17, 'title': u'Chapter 04'}), (u'Chapter 05', {'top': 909, 'left': 0, 'page': 30, 'title': u'Chapter 05'}), (u'Chapter 06', {'top': 614, 'left': 0, 'page': 32, 'title': u'Chapter 06'}), (u'Chapter 07', {'top': 417, 'left': 0, 'page': 35, 'title': u'Chapter 07'}), (u'Chapter 08', {'top': 289, 'left': 0, 'page': 41, 'title': u'Chapter 08'})])
for i in a:
    writeroutput.addBookmark(i, a[i]["page"]-1, a[i])

writeroutput.write(outputfile)
outputfile.close()
transparentbannerfile.close()
testpagefile.close()

`在

现在如何处理嵌套书签:)??

相关问题 更多 >