【问题标题】:PDF file hyperlinks into web hyperlinks / notepad ++ replacePDF文件超链接变成网页超链接/记事本++替换
【发布时间】:2014-04-15 06:41:28
【问题描述】:

由于 Chrome 默认的 pdf 查看器不显示 pdf 文件中的相对超链接,我尝试找到一种半自动的方法来将它们替换为服务器上特定路径的链接。

在 notepad++ 中打开 pdf 后,我发现 pdf 文件的语法非常有趣。无论如何,在记事本中使用正则表达式替换路径本身非常容易。

尝试摆脱这种结构时出现问题:

706 0 obj <</F 707 0 R/S/Launch>> endobj

因为记事本替换不适用于多行表达式。

我可以单独删除它们:

([0-9]+\s[0-9]\s)obj$ (\W+)F(\s[0-9]+\s[0-9]\s)R(\W)S(\W)Launch(\W+)$ endobj$

但后来我弄乱了我不想更改的其他对象,所以我需要一种方法将其作为一个整体删除。

任何想法,或者也许有一种简单的方法可以将 pdf 中的文件对象转换为源文件或不同的文本编辑器,该编辑器允许使用高级修饰符搜索多行表达式。

【问题讨论】:

  • _this structure_ 是否扩展到多行?如果是这样,换行符在哪里?
  • 在你的正则表达式中匹配换行符(可能的换行符)的东西是\s\W,不确定 $ 试图匹配什么(因为它的 NP++)
  • 感谢重播。 TheStucture 以 CR 作为换行符延伸超过 3 行(如问题所示)。不幸的是 \W 作为换行符对我不起作用?这是为什么?尝试了 Jerry 建议的正则表达式,记事本找不到任何东西。
  • 我假设非单词字符类由\W表示。不确定\W 是什么意思,因为 CR 是该类匹配的众多字符之一。并且不确定 NP++ 是否向正则表达式提供多行。杰瑞对你有用吗?

标签: regex pdf replace hyperlink notepad++


【解决方案1】:

如果你仍然想用 N++ 做,你也许可以使用这样的东西:

[0-9]+\s[0-9]\sobj\s*\W+F\s[0-9]+\s[0-9]\sR\WS\WLaunch\W+\s*endobj$

我基本上复制/粘贴了您的正则表达式,删除了不必要的分组并将中间的$ 替换为\s*。 (\s 匹配空格、水平制表符、换行符、回车符和换页符,所以如果可能的话它会变成“多行”。

【讨论】:

    【解决方案2】:

    我强烈建议不要以这种方式修改 PDF 文件,除非您真的知道自己在做什么。 PDF 文件是二进制文件,它们包含基于从文件或对象(外部参照表、压缩流、加密文件等)开头开始的字节数的几条信息。

    在大多数情况下修改 PDF 文件而不考虑其结构会损坏文件。 PDF 阅读器通常可以从此类错误中恢复,但您始终可能会破坏文件而无法修复。

    有两种可能的方法可以减少损坏文件的机会(如果您不小心,它仍然可能发生):

    • 使用允许您直接操作字典和重新保存的 PDF 处理库修改您的文件。

    • 如果您仍想手动修改它们,那么至少要确保每个已修改对象(也称为 PDF 字典)的字节数不会改变。例如,您可以尝试将 PDF 字典中的有效字符替换为空格,或者您可以将 6 0 R 等(可选)间接引用替换为空值 0 0 R(也可以将数字替换为需要的空格)。

    【讨论】:

    • 您好,感谢您的建议,老实说,我对 PDF 格式一无所知,很高兴知道我可以弄乱它的结构。是否有可能我对 pdf 代码进行了一些更改,它在我的机器上运行良好,但可能不适用于其他人?
    • 我宁愿说它取决于文件,而不是机器。根据您的文件的复杂程度,有些文件可能有效,有些则可能无效。
    • 这也取决于您使用的 PDF 查看器,因为您基本上依赖于 PDF 查看器处理损坏文件的能力。请注意,如果它停止工作,您将无法在查看器上将其报告为错误,因为它从一开始就不应该工作。
    猜你喜欢
    • 2021-10-19
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 2017-10-15
    • 2013-09-13
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    相关资源
    最近更新 更多