重新编号PDF的页面

我想编辑扫描PDF的元数据 ,以将自定义页码分配给不同的页面。 例如,现在的第1-3页我可能想要拨打i,ii和iii,以及第4-10页,我想拨打1-7。 我不想改变页面的实际顺序。

有没有A)使用免费工具完成这项工作的方法; 和B)“批量”执行此操作的方法(因此,无需手动重新编号每个页面)。

这是一个基于LaTeX的解决方案。 它使用pdfpages包来包含扫描的PDF(此处称为scan.pdf )。 可以使用启用了pdfpagelabels选项的pdfpagelabels包来设置所需的PDF页面标签。 它使用普通的\thepage宏作为标签,可以定义为小写罗马数字。 然后重置页面计数器并将其更改回正常数字。

 \documentclass[a4paper]{article}% or use 'letterpaper' \usepackage{pdfpages} \usepackage[pdfpagelabels]{hyperref} \begin{document} % Set lower case roman numbers (\Roman would be upper case): \renewcommand{\thepage}{\roman{page}} \includepdf[pages=1-3]{scan.pdf} % Back to normal (arabic) numbers: \renewcommand{\thepage}{\arabic{page}} % Reset page counter to 1: \setcounter{page}{1} \includepdf[pages=4-]{scan.pdf} \end{document} 

将上面的代码放入一个文件(例如scan_mod.tex )并使用pdflatex编译:

 # pdflatex scan_mod 

这将产生scan_mod.pdf 。 但是任何特殊的注释包括。 超链接将消失。 对于扫描的PDF,这不应该是任何问题。

如果您更频繁地需要这个,您可以编写一个脚本,接受罗马编号页面的数量和文件名作为参数,并使用上面的代码创建一个临时文件,其中名称和数字是变量,然后编译。

您可以使用文本编辑器执行此操作。

  • 元数据 – 如何更改PDF的元数据中的内部页码? – 超级用户

正如答案所说,打开一个带有文本编辑器,搜索/Catalog条目的PDF文件,然后附加一个名为/PageLabels的条目,如下所示:

 /PageLabels << /Nums [ 0 << /P (cover) >> % labels 1st page with the string "cover" 1 << /S /r >> % numbers pages 2-6 in small roman numerals 6 << /S /D >> % numbers pages 7-x in decimal arabic numerals ] >> 

请注意,页面索引(物理页码)以0开头。

在cource中,您可以使用脚本语言自动执行此操作。

PDF标准 – 页面标签有详细的规范。

有一个名为PDF Mod的工具,它是一个重新排列PDF页面的免费工具。

它可以从Ubuntu 10.10及更高版本的Ubuntu软件中心安装。

要在Ubuntu 9.10或10.04中安装:

安装将ppa ppa:pdfmod-team/ppa到您的软件源( 以下是如何操作 )并从软件中心安装pdfmod

改编自: http : //www.webupd8.org/2011/03/edit-pdf-documents-in-linux-with-pdf.html

祝你好运:D

jPDF Tweak是一个开源图形实用程序,提供页面编号(正确的术语是“页面标签”)和许多其他初级到高级PDF编辑function。 它运行在Ubuntu和其他操作系统上。

“ 文档”页面提供了逐步说明。

刚刚找到一个指针,可以使用ghostscript ,这里: pdftk – 添加和编辑书签到pdf – Unix和Linux – Stack Exchange#18600 ; 它指的是链接:

  • [其他]如何通过ghostscript / pdfwrite / pdfmark生成书签 – Ubuntu论坛
  • Ghostcript PDF参考和技巧 – 米兰Kupcevic

但是,上述处理书签 – 不是逻辑分页。 结果来自pdfmarkReference.pdf ,所需的“命令”是’ /Label ‘(或’ /PAGELABEL ‘) – 它还涉及PDFReference.pdf第8.3.1节“页面标签”。 不幸的是,该章并不一定解释pdfmarks如何与页面标签一起使用 – 但这篇文章的确如下:

  • [gs-bugs] [错误691889]带有“/ PAGELABEL pdfmark”运算符的pdfwrite不适用于多个页面

/ PAGELABEL pdfmark没有任何/ Page键,因此只能为“当前”页面设置标签(因此,一次只能为一页设置)。 由于您在一开始就调用它,因此需要为第一页设置标签并仅为其设置标签。

同一页面的多个/ PAGELABEL:pdfmark引用表示最后一个生效,因此第一个命令行的结果是正常的。 注意/ Page键被忽略。

如何从PostScript设置页面标签? 我可以想到两种方法:

(A)100%记录的方式:

发布/ PAGELABEL作为每页的一部分。

(B)记录较少的方式:……

 gswin32c -sDEVICE=pdfwrite -sOutputFile=50pages.pdf -dNOPAUSE GS>[/_objdef {pl} /type /dict /OBJ pdfmark GS>[{pl} <> 2 <<>>]>> /PUT pdfmark GS>[{Catalog} <> /PUT pdfmark GS>50 { showpage } repeat GS>quit 

……并进一步在该线程中:

至于做这项工作; 由于原始文件是PDF文件,因此您可以单独运行文件中的每个页面。 因此,您可以为第1页设置PAGELABEL pdfmark,从原始文件运行第1页,为第2页设置PAGELABEL,从原始文件运行第2页,依此类推。

因为标签是(如SaGS所说)应用于当前页面,所以应该正确设置输出PDF文件中每个页面的标签。 (告诫:我还没试过这个)

编辑:只是为了显示这个 – 如果你有这个保存为pdfmarks文件:

 [ /Label (-1) /PAGELABEL pdfmark showpage [ /Label (0) /PAGELABEL pdfmark showpage [ /Label (1) /PAGELABEL pdfmark showpage 

……你打电话给:

 gs -q -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=outfile.pdf infile.pdf pdfmarks 

…然后你会在infile.pdf的末尾附加三个空页,标记为-1,0和1 🙂

好吧,也许这有助于获得更简单的gs脚本重新编号页面:)
干杯!

编辑2:我认为 – 使用与上面相同的gs命令 – 以下是pdfmarks脚本的内容,它将重新编号infile.pdf,所以它从-1,0,1开始……它基本上是修改过的PDF参考中的示例(有关详细信息,请参阅注释):

 % Type name (Optional) The type of PDF object that this dictionary describes; if present, must be PageLabel for a page label dictionary. % S name (Optional) The numbering style to be used for the numeric portion of each page label: % D Decimal arabic numerals % R Uppercase roman numerals % r Lowercase roman numerals % A Uppercase letters (A to Z for the first 26 pages, AA to ZZ for the next 26, and so on) % a Lowercase letters (a to z for the first 26 pages, aa to zz for the next 26, and so on) % P text string (Optional) The label prefix for page labels in this range. % St integer (Optional) The value of the numeric portion for the first page label in the range. Subsequent pages will be numbered sequentially from this value, which must be greater than or equal to 1. Default value: 1. % renumber first 25 pages - push each by 10, and add prefix: % [/_objdef {pl} /type /dict /OBJ pdfmark % [{pl} <> 25 <<>>]>> /PUT pdfmark % [{Catalog} <> /PUT pdfmark [/_objdef {pl} /type /dict /OBJ pdfmark [{pl} <> % just label -1 (no style) for pg 0; 1 << /P (0) >> % just label 0 (no style) for pg 1; 2 << /S /D /St 1 >> % decimal style, start from 1, for pg2 and on. ]>> /PUT pdfmark [{Catalog} <> /PUT pdfmark 

Openoffice / Libreoffice可以通过pdf-import扩展和分页宏来实现。

不是一个完美的解决方案,但它适用于我(除了使用PDF Mod – 我强烈建议)。

试试pyPdf ,一个操纵PDF文档的python库。 有些但不多的编程是必要的。

您还可以查看PDFtk ,但我还没有检查它是否支持更改与各个页面关联的页码。 两者都在Ubuntu中作为包提供。

还有另一个叫做PDFEdit的应用程序 – 它托管在source forge上。 Source Forge项目页面 – 但这没有用,因为它不是您需要的function

PDFEdit中的文本编辑