저는 Linux를 사용하고 있으며 일부 PDF를 병합하고 책갈피가 포함된 통합 출력 PDF를 생성하는 소프트웨어(또는 스크립트, 방법)를 갖고 싶습니다. 북마크 이름은 pdf 파일의 파일 이름으로 지정되며, 이 파일은 병합하고 해당 파일이 시작되는 페이지 번호를 가리키는 데 사용되었습니다.
Adobe Acrobat도 비슷한 가능성이 있지만 무료가 아니며 Windows 전용입니다.
답변1
업데이트: 저는 결과가 만족스럽지 않아서 멋진 GUI로 작성했습니다.
https://github.com/Yanpas/PdfMerger
Python을 배우고 한 시간 만에 프로그램을 작성(수정)했습니다.
#! /usr/bin/env python
# Original author Nicholas Kim, modified by Yan Pashkovsky
# New license - GPL v3
import sys
import time
from PyPDF2 import utils, PdfFileReader, PdfFileWriter
def get_cmdline_arguments():
"""Retrieve command line arguments."""
from optparse import OptionParser
usage_string = "%prog [-o output_name] file1, file2 [, ...]"
parser = OptionParser(usage_string)
parser.add_option(
"-o", "--output",
dest="output_filename",
default=time.strftime("output_%Y%m%d_%H%M%S"),
help="specify output filename (exclude .pdf extension); default is current date/time stamp"
)
options, args = parser.parse_args()
if len(args) < 2:
parser.print_help()
sys.exit(1)
return options, args
def main():
options, filenames = get_cmdline_arguments()
output_pdf_name = options.output_filename + ".pdf"
files_to_merge = []
# get PDF files
for f in filenames:
try:
next_pdf_file = PdfFileReader(open(f, "rb"))
except(utils.PdfReadError):
print >>sys.stderr, "%s is not a valid PDF file." % f
sys.exit(1)
except(IOError):
print >>sys.stderr, "%s could not be found." % f
sys.exit(1)
else:
files_to_merge.append(next_pdf_file)
# merge page by page
output_pdf_stream = PdfFileWriter()
j=0
k=0
for f in files_to_merge:
for i in range(f.numPages):
output_pdf_stream.addPage(f.getPage(i))
if i==0:
output_pdf_stream.addBookmark(str(filenames[k]),j)
j = j + 1
k += 1
# create output pdf file
try:
output_pdf_file = open(output_pdf_name, "wb")
output_pdf_stream.write(output_pdf_file)
finally:
output_pdf_file.close()
print "%s successfully created." % output_pdf_name
if __name__ == "__main__":
main()
이 프로그램에는 PyPDF2가 필요합니다. 를 통해 설치할 수 있습니다 sudo pip install pypdf2
. 그 전에 pip를 설치해야 합니다. :) 터미널을 열고 입력하세요../pdfmerger.py *.pdf
답변2
이 Bash 스크립트는 디렉토리의 각 PDF에 PDF 파일 이름 텍스트가 포함된 첫 번째 페이지에 하나의 책갈피를 포함하도록 만든 다음 모두 연결합니다. 비ASCII 파일 이름을 처리할 수 있습니다.
#!/usr/bin/bash
cattedPDFname="${1:?Concatenated PDF filename}"
# make each PDF contain a single bookmark to first page
tempPDF=`mktemp`
for i in *.pdf
do
bookmarkTitle=`basename "$i" .pdf`
bookmarkInfo="BookmarkBegin\nBookmarkTitle: $bookmarkTitle\nBookmarkLevel: 1\nBookmarkPageNumber: 1"
pdftk "$i" update_info_utf8 <(echo -en $bookmarkInfo) output $tempPDF verbose
mv $tempPDF "$i"
done
# concatenate the PDFs
pdftk *.pdf cat output "$cattedPDFname" verbose
답변3
좋은 답변 수정하기 [1] 의tex.stackexchange.comitemize
, 아래에 포함할 파일에 대한 참조를 사용하여 목록을 생성할 수 있습니다 . (toc과 유사합니다). Latex에서는 페이지 번호를 업데이트합니다.
일부유액더 많은 말
이 줄에는 다음이 포함됩니다.PDF
MyDoc1.pdf
참조 이름이 있는 파일"doc01"라텍스 파일과 같은 디렉토리에 있습니다:\modifiedincludepdf{-}{doc01}{MyDoc1.pdf}
다음과 같은 명령은
\pageref{doc02.3}
참조용 키가 있는 문서의 세 번째 페이지 번호로 링크를 생성합니다."doc02". Latex는 최신 상태를 유지하기 위해 노력할 것입니다.블록은
\begin{itemize}
\end{itemize}
지적 목록을 생성합니다.
라텍스 파일
다음과 함께 작동할 수정된 템플릿은 다음과 같습니다 pdflatex
.
\documentclass{article}
\usepackage{hyperref}
\usepackage{pdfpages}
\usepackage[russian,english]{babel}
\newcounter{includepdfpage}
\newcounter{currentpagecounter}
\newcommand{\addlabelstoallincludedpages}[1]{
\refstepcounter{includepdfpage}
\stepcounter{currentpagecounter}
\label{#1.\thecurrentpagecounter}}
\newcommand{\modifiedincludepdf}[3]{
\setcounter{currentpagecounter}{0}
\includepdf[pages=#1,pagecommand=\addlabelstoallincludedpages{#2}]{#3}}
\begin{document}
You can refer to the beginning or to a specific page: \\
see page \pageref{doc01.1} till \pageref{doc02.3}.\\
\begin{itemize}
\item Here contribution from Grupmate 1 \pageref{doc01.1}
\item Here contribution from Grupmate 2 \pageref{doc02.1}
\end{itemize}
\modifiedincludepdf{-}{doc01}{MyDoc1.pdf}
\modifiedincludepdf{-}{doc02}{MyDoc2.pdf}
\end{document}
메모
PDF 문서나 페이지를 간단히 병합하고 분할하려면 pdftk와 같은 도구를 사용하고 다른 질문에서 영감을 얻을 수 있습니다 .삼] 에 대해.
참고자료