Làm cách nào để tự động sao chép các trang trong tệp PDF?


10

Tôi có rất nhiều tệp PDF với mỗi trang từ 1 đến 4 trang. Tôi cần một giải pháp tự động tạo một tệp mới cho mỗi tệp này. Các tệp mới sẽ chứa nội dung của các tệp gốc hai lần (nghĩa là các trang từ 1 đến hết, theo sau là các trang tương tự theo cùng một thứ tự một lần nữa).

Làm thế nào để tôi thực hiện điều này?


3
Hãy làm rõ, chúng tôi không thể đọc được suy nghĩ của bạn. Hóa đơn gì? Bạn muốn tạo một tệp pdf mới chứa mỗi trang của bản gốc hai lần? Theo thứ tự? Bạn có muốn trang 1a theo sau là trang 1b hay bạn muốn tất cả 4 trang trước và sau đó là tất cả bốn trang nữa? Bạn đang sử dụng hệ điều hành nào? Bạn sử dụng công cụ nào để tạo pdf?
terdon

Câu trả lời:


15

Giải pháp cho Windows bằng PDFtk (mà bạn dường như đang sử dụng theo thẻ của mình):

Điều này sẽ dẫn đến một tệp PDF với các trang 1 đầu và sau đó là 1 đầu:

pdftk in.pdf cat 1-end 1-end output out.pdf

Nếu bạn muốn mỗi trang được sao chép lại với nhau (như trong 1,1,2,2, ...), hãy sử dụng tệp bó sau:

@echo off
set pages=
setlocal enabledelayedexpansion
for /f "tokens=2" %%a in ('pdftk in.pdf dump_data ^| find /i "NumberOfPages"') do for /l %%b in (1,1,%%a) do set pages=!pages! %%b %%b
pdftk in.pdf cat!pages! output out.pdf

Cảm ơn rất nhiều: "pdftk in.pdf cat 1-end 1-end output out.pdf" chính xác là những gì tôi cần. Điều duy nhất còn thiếu là một vòng lặp lấy tất cả các tệp pdf từ một thư mục và tạo tất cả các tệp mới.Thanx rất nhiều để giúp tôi một lần nữa. Tôi sẽ biết ơn và mời vợ tôi ăn tối với thời gian đã tiết kiệm ;-)))
Marc

@Marc: Vòng lặp dễ dàng đạt được. Chỉ cần đi đến thư mục với các tệp PDF và tại loại dấu nhắc lệnh for %a in (*.pdf) do @pdftk "%~a" cat 1-end 1-end output "%~na (Duplicated)%~xa". Đối với mỗi in.pdf (tên có thể là bất cứ thứ gì), điều này sẽ dẫn đến một .pdf tương ứng . Thưởng thức bữa tối của bạn và đừng quên chấp nhận câu trả lời (nhấp vào dấu kiểm màu xanh bên trái) nếu nó giúp bạn!
Karan

cảm ơn bạn - bạn đã cứu mạng tôi! Tôi rất rất biết ơn sự giúp đỡ của bạn!
Marc

2

Tôi có thể cung cấp cho bạn một giải pháp tốt hơn nếu bạn trả lời các câu hỏi trong nhận xét của tôi nhưng vì lợi ích của vợ bạn, đây là một số gợi ý.

ImageMagick là một công cụ dòng lệnh đa nền tảng để thao tác hình ảnh. Khi bạn cài đặt nó, bạn sẽ có thể sử dụng convertcông cụ của nó để làm những gì bạn muốn. Các chi tiết phụ thuộc vào hệ điều hành của bạn. Tôi giả sử bạn muốn hai bản sao của toàn bộ tệp, không phải mỗi trang được nhân đôi.

  1. Linux / OSX / Unix, v.v.

    for n in *pdf; do convert -density 150 "$n" "$n" "$n"; done
    

    Điều này sẽ ghi đè lên các tập tin hiện có , bạn có thể muốn sao lưu trước.

  2. Các cửa sổ. Điều này có thể hơi sai, tôi không sử dụng Windows vì vậy tôi không thể kiểm tra nó nhưng ý tưởng chung nên là một cái gì đó như thế này

    for %f in (*.pdf) do (convert.exe %f %f %f)
    

forVòng lặp của bạn bị thiếu done$ncó lẽ nên được trích dẫn. Có thể tôi đang thiếu cách converthoạt động, nhưng convertlàm gì khi bạn vượt qua ba lần cùng một tệp? Tôi không thể kiểm tra nó ngay bây giờ.
slhck

Cảm ơn @slhck, bạn đúng cả hai tính như bình thường. Các định dạng chuyển đổi chung là convert infile1 infile2 ... infileN outfile. Vì vậy, nếu bạn truyền cho cùng một tệp ba lần, nó sẽ lấy hai lần làm đầu vào và sau đó ghi vào cùng một tệp với đầu ra. Cái đó tôi đã làm thử :).
terdon

Ồ, tuyệt, sau đó tôi cũng đã học được điều gì đó :)
slhck

Nghe có vẻ tốt với tôi. Cảm ơn rất nhiều. Nhận xét ở trên: Tôi đã thử lần đầu tiên và nó hoạt động hoàn hảo, chỉ có vòng lặp đúng mà tôi vẫn đang tìm kiếm .... bạn có thể giúp tôi lần nữa không? Rất cám ơn trước!
Marc

@Marc xin lỗi, tôi không chắc ý của bạn là gì. Nhận xét nào? Vòng lặp nào? Các cửa sổ hoặc bash một?
terdon

2

Nếu bạn muốn mỗi trang được sao chép lại với nhau (như trong 1,1,2,2, ...) trên Linux, tập lệnh này sẽ thực hiện:

#!/bin/bash
INPUTFILE=$*
PAGENUM=`pdftk ${INPUTFILE} dump_data | grep NumberOfPages | cut -d : -f 2  | cut -d " " -f 2`
PAGES=`seq 1 ${PAGENUM}`
DUPAGES=`for i in ${PAGES} ; do echo $i $i | tr "\n" " " ; done`
OUTPUT=`basename ${INPUTFILE} .pdf`.dup.pdf
pdftk ${INPUTFILE} cat ${DUPAGES} output ${OUTPUT}

0

Nếu bạn chưa cài đặt pdftk, nhưng poppler-utils, thì hãy sử dụng lệnh này:

for f in *
do
    pdfjoin $f $f
done

Điều này đặc biệt có liên quan trên Fedora 21, nơi pdftk không còn có sẵn trong kho lưu trữ nữa.


0

Sử dụng đơn giản pdfunite. Điều này có lẽ có thể được đơn giản hóa hơn nữa với kiến ​​thức kịch bản nhiều hơn.

Xin lưu ý rằng đối số cuối cùng là tệp kết quả . Nếu bạn quên điều đó thì tập tin này sẽ bị ghi đè.

pdfunite 1.pdf 2.pdf 3.pdf 4.pdf result.pdf
pdfunite result.pdf result.pdf result.pdf 3-times-result.pdf
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.