【问题标题】:How to create PDFOutline programmatically如何以编程方式创建 PDFOutline
【发布时间】:2018-02-17 13:03:17
【问题描述】:

我在尝试在 PDF 文件中创建目录对象时遇到问题。我不确定我是否从 Apple 的有限文档中理解了这个过程。

我正在使用 python,但欢迎使用任何语言的有说服力的示例来解释它应该如何工作。该代码创建了一个新的 PDF 文档,但在预览中没有可见的大纲项。我试过只使用 myOutline 作为根对象,但这也不起作用。

pdfURL = NSURL.fileURLWithPath_(infile)
myPDF = Quartz.PDFDocument.alloc().initWithURL_(pdfURL)
if myPDF:
    # Create Destination
    myPage = myPDF.pageAtIndex_(1)
    pagePoint = Quartz.CGPointMake(0,0)
    myDestination = Quartz.PDFDestination.alloc().initWithPage_atPoint_(myPage, pagePoint)

    # Create Outline
    myOutline = Quartz.PDFOutline.alloc().init()
    myOutline.setLabel_("Interesting")
    myOutline.setDestination_(myDestination)

    # Create a root Outline and add the first outline as a child
    rootOutline = Quartz.PDFOutline.alloc().init()
    rootOutline.insertChild_atIndex_(myOutline, 0)

    # Add the root outline to the document and save
    myPDF.setOutlineRoot_(rootOutline)
    myPDF.writeToFile_(outfile)

编辑:实际上,大纲正在保存到新文件中:我可以通过编程方式阅读它,它在 Acrobat 中显示为书签;但是,它没有出现在预览的目录中(是的,我检查了“隐藏”的东西)。如果我在 Acrobat 中添加另一个书签,那么两者都会显示在预览中。

所以我想要么我仍然做错了事情,没有完全“完成”PDFOutline 数据,而且 Acrobat 很友善;或者 PDFKit 中存在大量错误,这意味着您无法正确编写 PDFOutlines。我在山狮,FWIW 上得到了同样的行为。

【问题讨论】:

  • 你能在某处上传这些行为不端的 PDF 并添加链接吗?
  • 我不相信 PDF 是问题所在。 Acrobat、PDFPen 和 Foxit Reader 都显示使用脚本创建的“书签”。预览不显示它们。如果您在任何这些应用程序中修改书签列表,则项目会显示在预览中。无论如何,给你:4个空白页和一个书签。请注意,其他人称之为书签,预览称之为目录。 Preview 的书签似乎完全是专有的,并且在 Quartz API 中没有记录..! dropbox.com/s/4gkq8wv51vr6zji/qwe.pdf?dl=0

标签: python pdf quartz


【解决方案1】:

这似乎是预览中的一个错误。如果目录只包含一个子条目,它将不会列出目录。

如果我使用上面的代码添加更多大纲,那么所有大纲都会出现在预览中。如果使用其他软件删除目录中除一个之外的所有条目,则预览将不会显示任何

【讨论】:

    猜你喜欢
    • 2013-03-10
    • 2013-11-15
    • 2013-12-28
    • 2011-02-10
    • 2011-04-02
    • 2012-02-26
    • 2011-03-01
    • 2014-06-18
    • 1970-01-01
    相关资源
    最近更新 更多