เปลี่ยนหมายเลขหน้าเป็น PDF


25

ฉันต้องการแก้ไขข้อมูลเมตาของ PDF ที่สแกนเพื่อกำหนดหมายเลขหน้าที่กำหนดเองให้กับหน้าอื่น ตัวอย่างเช่นตอนนี้หน้า 1-3 ฉันอาจต้องการเรียก i, ii และ iii และหน้า 4-10 คืออะไรฉันต้องการโทร 1-7 ฉันไม่ต้องการเปลี่ยนลำดับที่แท้จริงของหน้า

มี A) วิธีนี้ทำได้โดยใช้เครื่องมือฟรี; และ B) วิธีการทำเช่นนี้ "ในชุด" (ดังนั้นโดยไม่ต้องเปลี่ยนหมายเลขแต่ละหน้าด้วยตนเอง)


1
คุณจะมีความสุขกับการแก้ปัญหาจาก LaTeX หรือไม่? เป็นไปได้ที่จะรวม PDF ไว้ในเอกสารว่างเปล่าและสร้างหมายเลขหน้า PDF ตามที่คุณต้องการ
Martin Scharrer

แน่นอนว่าฉันจะมีความสุขกับโซลูชั่น LaTeX คุณช่วยโพสต์รายละเอียดด้านล่างได้ไหม?
MarkovCh1

คำตอบ:


22

นี่คือโซลูชันที่ใช้ LaTeX มันใช้pdfpagesแพคเกจเพื่อรวม PDF ที่สแกน (เรียกว่าที่นี่scan.pdf) คุณสามารถตั้งค่าป้ายกำกับหน้า PDF ที่คุณต้องการโดยใช้hyperrefแพ็คเกจด้วยpdfpagelabelsตัวเลือกที่เปิดใช้งาน มันใช้\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 ที่สแกน

หากคุณต้องการสิ่งนี้บ่อยขึ้นคุณสามารถเขียนสคริปต์ที่ยอมรับจำนวนหน้าตัวเลขโรมันและชื่อไฟล์เป็นอาร์กิวเมนต์และสร้าง tempfile ด้วยรหัสด้านบนโดยที่ชื่อและตัวเลขเป็นตัวแปรซึ่งจะถูกรวบรวม


ขอบคุณสำหรับคำตอบอย่างละเอียด! นี่เป็นทางออกที่ดี วิธีแก้ปัญหาอื่น ๆ เท่านั้นที่ฉันทราบคือการรวม. NET หรือสิ่งที่น่ากลัวเท่า ๆ กันหรือการอ่านข้อความใน Adobe Acrobat (ซึ่งฉันไม่สามารถจ่ายได้) นี่เป็นสคริปต์ได้!
MarkovCh1

ทางออกที่ดี! ฉันสงสัยเกี่ยวกับคำถามเดียวกันของการสร้างชุดของบุ๊กมาร์ก / โครงร่างบนแผงด้านซ้ายพร้อมไฮเปอร์ลิงก์ไปยังจุดเริ่มต้นของแต่ละส่วน / บท เป็นไปได้ไหมที่จะใช้ LaTex ด้วย? นี่คือคำถามของฉันaskubuntu.com/questions/27312/bookmark-pdf-and-djvu-files ขอบคุณ!
ทิม


นี่เป็นคำตอบที่ยอดเยี่ยมฉันใช้และทำงานได้อย่างสมบูรณ์
Andrea Lazzarotto

1
@TiGR: ใช่นั่นเป็นเพราะหน้าของ PDF ต้นฉบับถูกเพิ่มไปยัง PDF ใหม่และในขั้นตอนนี้การเชื่อมโยงหลายมิติและสิ่งที่คล้ายกันถูกยกเลิก (เพื่อความปลอดภัยเท่าที่ฉันจำได้) เนื่องจาก OP เป็นเรื่องเกี่ยวกับการสแกน PDF สิ่งนี้จึงไม่เป็นปัญหา
Martin Scharrer

10

คุณสามารถทำได้ด้วยโปรแกรมแก้ไขข้อความ

ตามคำตอบที่กล่าวไว้ให้เปิดไฟล์ PDF ด้วยโปรแกรมแก้ไขข้อความ/Catalogรายการค้นหาจากนั้นผนวกรายการที่มีชื่อ/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เริ่มต้นด้วย

ของซอร์สคุณสามารถทำสิ่งนี้ได้โดยอัตโนมัติโดยใช้ภาษาสคริปต์

มาตรฐาน PDF - ฉลากหน้ามีข้อกำหนดรายละเอียด


+1 คำตอบนี้ง่ายกว่าและดีกว่าคำตอบที่ยอมรับได้และลิงก์ไปยังข้อมูลจำเพาะเป็นความช่วยเหลือที่ดีมาก
jja

6

jPDF Tweakเป็นยูทิลิตี้กราฟิกแบบโอเพนซอร์สที่มีการกำหนดหมายเลขหน้า (คำที่ถูกต้องคือ "การติดฉลากหน้า") และการเริ่มต้นอื่น ๆ อีกมากมายสำหรับคุณสมบัติการแก้ไข PDF ขั้นสูง มันทำงานบน Ubuntu และระบบปฏิบัติการอื่น ๆ

เอกสารหน้าให้คำแนะนำทีละขั้นตอน


ขอบคุณสิ่งนี้ช่วยฉันได้จริงๆรักษารูปแบบและทั้งหมด jPDF Tweak เป็นสิ่งที่ทรงพลังจริงๆแม้ว่าจะมีอินเตอร์เฟสที่ไม่สะดวก
TiGR

หากคำถามเดิมไม่ได้กล่าวถึงงานแบทช์ฉันจะบอกว่าคำตอบนี้สมควรได้รับการยอมรับ
Brian Z

4

มีเครื่องมือที่เรียกว่า PDF Mod ซึ่งเป็นเครื่องมือฟรีในการจัดเรียงหน้าของ PDF

สามารถติดตั้งได้จาก Ubuntu Software Center ใน Ubuntu 10.10 ขึ้นไป

วิธีติดตั้งใน 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


4
อ่า แต่คำถามของฉันไม่ได้ถามเกี่ยวกับวิธีการจัดเรียงหน้าเว็บใหม่ มันคือการเปลี่ยนข้อมูลเมตาของหน้าเว็บ: ใส่หมายเลขหน้าใหม่ (ใส่ตัวเลขโรมันเป็นหน้าแรก ๆ อาจข้ามบางส่วนไป PDF บางอันรองรับไฟล์เดิม)
MarkovCh1

3

เพิ่งพบตัวชี้ว่ามันเป็นไปได้ที่จะใช้ghostscriptสิ่งนี้ที่นี่: pdftk - เพิ่มและแก้ไขที่คั่นหน้าเป็น pdf - Unix และ Linux - Stack Exchange # 18600 ; มันหมายถึงลิงก์:

อย่างไรก็ตามข้อตกลงข้างต้นกับบุ๊กมาร์ก - ไม่ใช่ด้วยการแบ่งหน้าแบบลอจิคัล ปรากฎจากpdfmarkReference.pdfคำสั่ง "ที่ต้องการ" คือ ' /Label' (หรือ ' /PAGELABEL') - และมันยังอ้างถึงPDFReference.pdfบทที่ 8.3.1 "ฉลากหน้า" น่าเสียดายที่บทนั้นไม่ได้อธิบายอย่างชัดเจนว่าจะใช้ pdfmarks กับป้ายกำกับหน้าได้อย่างไร แต่บทความนี้ทำ:

เครื่องหมาย / PAGELABEL pdf ไม่มีคีย์ / หน้าใด ๆ ดังนั้นจึงสามารถตั้งค่าป้ายกำกับสำหรับหน้า 'ปัจจุบัน' เท่านั้น (และเป็นผลเฉพาะสำหรับครั้งละหนึ่งหน้า) เมื่อคุณเรียกมันว่าตอนเริ่มต้นก็คาดว่าจะตั้งป้ายกำกับสำหรับหน้า 1 และเฉพาะสำหรับมัน

หลาย / PAGELABELs สำหรับหน้าเดียวกัน: การอ้างอิง pdfmark บอกว่าหน้าสุดท้ายจะมีผลดังนั้นผลลัพธ์ของ commandline ที่ 1 ของคุณก็โอเค หมายเหตุคีย์ / หน้าจะถูกละเว้น

วิธีการตั้งป้ายกำกับหน้าจาก PostScript? ฉันคิดได้ 2 วิธี:

(A) วิธีเอกสาร 100%:

ออก / PAGELABEL เป็นส่วนหนึ่งของแต่ละหน้า

(B) วิธีที่มีเอกสารน้อยกว่า: ...

gswin32c -sDEVICE=pdfwrite -sOutputFile=50pages.pdf -dNOPAUSE

GS>[/_objdef {pl} /type /dict /OBJ pdfmark
GS>[{pl} <</Nums [0 <</P (Page ) /S /r /St 10>> 2 <<>>]>> /PUT pdfmark
GS>[{Catalog} <</PageLabels {pl}>> /PUT pdfmark
GS>50 { showpage } repeat
GS>quit

... และเพิ่มเติมในหัวข้อนั้น:

ในการทำให้งานนี้; เนื่องจากไฟล์ต้นฉบับเป็นไฟล์ PDF คุณสามารถเรียกใช้แต่ละหน้าจากไฟล์แยกกัน ดังนั้นคุณสามารถตั้งค่า PAGELABEL pdfmark สำหรับหน้า 1 เรียกใช้หน้า 1 จากไฟล์ต้นฉบับตั้ง PAGELABEL สำหรับหน้า 2 เรียกใช้หน้า 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} <</Nums [0 <</P (Page ) /S /D /St 10>> 25 <<>>]>> /PUT pdfmark
% [{Catalog} <</PageLabels {pl}>> /PUT pdfmark

[/_objdef {pl} /type /dict /OBJ pdfmark
[{pl} <</Nums [ 0 << /P (-1) >>         % 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} <</PageLabels {pl}>> /PUT pdfmark

ที่ดี! ขอขอบคุณคุณไม่ตลก ๆ :)
MarkovCh1

2

มีสคริปต์ python เล็กน้อยที่สามารถทำงานได้: https://github.com/lovasoa/pagelabels-py

ในกรณีของคุณโทร:

./addpagelabels.py --delete file.pdf
./addpagelabels.py --startpage 1 --type 'roman lowercase' file.pdf
./addpagelabels.py --startpage 4 --type arabic file.pdf

1
นี่เป็นทางออกที่ยอดเยี่ยม!
mikemtnbikes

1

Openoffice / Libreoffice สามารถทำเคล็ดลับได้ด้วยส่วนขยาย pdf-import และ Macro การแบ่งหน้า

ไม่ใช่โซลูชันที่สมบูรณ์แบบ แต่ใช้งานได้สำหรับฉัน (นอกเหนือจากการใช้ PDF Mod - ซึ่งฉันขอแนะนำอย่างยิ่ง)


ดูเหมือนว่าส่วนขยาย PDF- นำเข้าถูกจับสำหรับ OpenOffice.org 3.2 การนำเข้า (เป็น Draw and Writer) ให้ข้อผิดพลาด "I / O"
MarkovCh1

0

ลองใช้pyPdfซึ่งเป็นห้องสมุดไพ ธ อนเพื่อจัดการเอกสาร PDF บางส่วน แต่ไม่มากการเขียนโปรแกรมจะจำเป็น

คุณสามารถดูPDFtk ได้เช่นกันแม้ว่าฉันจะไม่ได้ตรวจสอบว่ามันรองรับการเปลี่ยนหมายเลขหน้าที่เกี่ยวข้องกับแต่ละหน้าหรือไม่ ทั้งสองมีให้เป็นแพ็คเกจใน Ubuntu


1
หืม PDFtk ดูเหมือนจะไม่สามารถทำได้ pyPdf มีวิธีการมากมายในการแยกข้อมูลเมตา แต่ดูเหมือนจะไม่สามารถเขียนกลับเข้าไปในเอกสารได้
MarkovCh1

0

มีแอปอื่นที่เรียกว่า PDFEdit ซึ่งโฮสต์อยู่บนแหล่งข้อมูลปลอม หน้าโครงการ Source Forge - แต่สิ่งนี้ไม่ได้ช่วยอะไรเพราะมันไม่ได้มีฟังก์ชั่นที่คุณต้องการ

การแก้ไขข้อความใน PDFEdit


1
ฉันไม่คิดว่า PDF Edit สามารถเปลี่ยนหมายเลขหน้าได้ ฉันพยายามและไม่ประสบความสำเร็จในทุกกรณี
MarkovCh1

2
@Syzygy - ตรวจสอบแล้ว: pdfeditสามารถแสดงCatalog/PageLabelsDict ถ้าเอกสารมี แต่ถ้าเลือกมันจะบอกว่า: " พจนานุกรมนี้ไม่มีคุณสมบัติที่แก้ไขได้โดยตรง " ... ไชโย!
sdaau
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.