由于Chrome默认pdf查看器不显示pdf文件中的相对超链接,我尝试找到一种半自动方式,用指向服务器上特定路径的链接替换它们。
在记事本++中打开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中的文件对象转换为源文件对象或不同的文本编辑器,允许搜索带有高级修饰符的多行表达式。
答案 0 :(得分: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
匹配空格,水平制表符,换行符,回车符和换页符,因此如果可能的话,它将会出现多线条。
答案 1 :(得分:0)
我强烈建议不要以这种方式修改PDF文件,除非你真的知道自己在做什么。 PDF文件是二进制文件,它们包含几条基于从文件开头或对象(外部参照表,压缩流,加密文件等)开始的字节计数的信息。
在不考虑其结构的情况下修改PDF文件会在大多数情况下破坏文件。 PDF阅读器通常可以从这种类型的错误中恢复,但是您可能总是将文件分解为无法修复。
有两种方法可以减少损坏文件的可能性(如果您不小心,可能会发生这种情况):
使用PDF处理库修改您的文件,该库允许您直接操作字典并重新保存。
如果您仍想手动修改它们,那么至少要确保每个修改对象(也称为PDF字典)的字节数不会改变。例如,您可以尝试用空格替换PDF字典中的有效字符,或者可以替换(可选)间接引用,例如6 0 R,空值为0 0 R(也用需要的空格替换数字)。
< / LI>