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

Python 如何获取PDF书签并将书签添加到新PDF?,python,pdf,reportlab,pypdf,Python,Pdf,Reportlab,Pypdf,我正在将一个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)

我正在将一个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()
#- Merge PDF.
transparentbannerfile = open('transparent.pdf', 'rb')
testpagefile = open('NOID_body20160202T133650.pdf', 'rb')
outputfile = open('mergedtransparent.pdf', 'wb')
import PyPDF2 as pdf
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)

writeroutput.write(outputfile)
outputfile.close()
transparentbannerfile.close()
testpagefile.close()
from pyPdf import PdfFileReader
pdf_toread = PdfFileReader(open('NOID_body20160202T133650.pdf', "rb"))
pdf_info = pdf_toread.getDocumentInfo()
print pdf_info
以下是合并代码:

#- 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()
#- Merge PDF.
transparentbannerfile = open('transparent.pdf', 'rb')
testpagefile = open('NOID_body20160202T133650.pdf', 'rb')
outputfile = open('mergedtransparent.pdf', 'wb')
import PyPDF2 as pdf
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)

writeroutput.write(outputfile)
outputfile.close()
transparentbannerfile.close()
testpagefile.close()
from pyPdf import PdfFileReader
pdf_toread = PdfFileReader(open('NOID_body20160202T133650.pdf', "rb"))
pdf_info = pdf_toread.getDocumentInfo()
print pdf_info
但元数据中缺少书签和标题

什么是
'bookmarkshorizontalAbsolute'、画布
对象的方法


同样的问题也在这里

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

#- 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()
#- Merge PDF.
transparentbannerfile = open('transparent.pdf', 'rb')
testpagefile = open('NOID_body20160202T133650.pdf', 'rb')
outputfile = open('mergedtransparent.pdf', 'wb')
import PyPDF2 as pdf
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)

writeroutput.write(outputfile)
outputfile.close()
transparentbannerfile.close()
testpagefile.close()
from pyPdf import PdfFileReader
pdf_toread = PdfFileReader(open('NOID_body20160202T133650.pdf', "rb"))
pdf_info = pdf_toread.getDocumentInfo()
print pdf_info
通过
setTitle
方法将标题设置为新PDF

#- Create One Page PDF with some text
from reportlab.pdfgen import canvas as canx
c = canx.Canvas('transparent.pdf')
c.setTitle("Test to set Title")
或:


书签

  • 首先从这些代码中输入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()
    
    #- Merge PDF.
    transparentbannerfile = open('transparent.pdf', 'rb')
    testpagefile = open('NOID_body20160202T133650.pdf', 'rb')
    outputfile = open('mergedtransparent.pdf', 'wb')
    import PyPDF2 as pdf
    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)
    
    writeroutput.write(outputfile)
    outputfile.close()
    transparentbannerfile.close()
    testpagefile.close()
    
    from pyPdf import PdfFileReader
    pdf_toread = PdfFileReader(open('NOID_body20160202T133650.pdf', "rb"))
    pdf_info = pdf_toread.getDocumentInfo()
    print pdf_info
    
    通过
    setTitle
    方法将标题设置为新PDF

    #- Create One Page PDF with some text
    from reportlab.pdfgen import canvas as canx
    c = canx.Canvas('transparent.pdf')
    c.setTitle("Test to set Title")
    
    或:


    书签

  • 首先从这些代码中输入pdf获取书签

  • 以下代码将书签添加到新PDF:

  • `

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