আমি পিডিএফ ফাইলগুলিকে কীভাবে একীভূত করতে পারি যাতে প্রতিটি ফাইল একটি বিজোড় পৃষ্ঠা নম্বর থেকে শুরু হয়?


11

আমাকে কয়েকটি ডোজড পিডিএফগুলি একত্রীকরণ করতে হবে এবং আমি চাই যে সমস্ত ইনপুট পিডিএফ আউটপুট পিডিএফ-এর একটি বিজোড় পৃষ্ঠায় শুরু হোক।

উদাহরণ: A.pdfএর 3 পৃষ্ঠা রয়েছে, B.pdfএর 4 পৃষ্ঠা রয়েছে। আমি চাই না যে আমার আউটপুটটিতে 7 পৃষ্ঠা থাকবে। আমি যা চাই তা 8 পৃষ্ঠাগুলির পিডিএফ যা পৃষ্ঠাগুলির 1-3 A.pdfপৃষ্ঠা থেকে , পৃষ্ঠা 4 খালি, এবং পৃষ্ঠাগুলি 5-8 থেকে রয়েছে B.pdf। কিভাবে আমি এটি করতে পারব?

আমি পিডিএফটক সম্পর্কে জানি, কিন্তু ম্যান পেজে আমি এই জাতীয় কোনও বিকল্প পাই নি।

উত্তর:


6

PyPdf গ্রন্থাগার আপনি পাইথন একটি বিট লিখতে ইচ্ছুক হন সহজ জিনিস এই ধরনের তোলে। স্ক্রিপ্টে নীচের কোডটি সংরক্ষণ করুন pdf-cat-even(বা আপনি যা পছন্দ করুন), এটি কার্যকর ( chmod +x pdf-cat-even) তৈরি করুন এবং এটি ফিল্টার হিসাবে চালান ( ./pdf-cat-even a.pdf b.pdf >concatenated.pdf)। addBlankPageপদ্ধতির জন্য আপনার পিপিডিএফ ≥1.13 প্রয়োজন ।

#!/usr/bin/env python
import copy, sys
from pyPdf import PdfFileWriter, PdfFileReader
output = PdfFileWriter()
output_page_number = 0
alignment = 2           # to align on even pages
for filename in sys.argv[1:]:
    # This code is executed for every file in turn
    input = PdfFileReader(open(filename))
    for p in [input.getPage(i) for i in range(0,input.getNumPages())]:
        # This code is executed for every input page in turn
        output.addPage(p)
        output_page_number += 1
    while output_page_number % alignment != 0:
        output.addBlankPage()
        output_page_number += 1
output.write(sys.stdout)

ধন্যবাদ, এটি আমার পক্ষে কাজ করেছে! যেহেতু আমি কোনও ফাইল থেকে পিডিএফগুলির নামগুলি পড়তে পছন্দ করি, আমি আপনার কোডটি কিছুটা সংশোধন করে আলাদা উত্তর হিসাবে পোস্ট করেছি ।
জান ওয়ার্চো

@ জেনেক ওয়ারচল যদি আপনার ফাইলের নামগুলিতে শ্বেত স্পেসের মতো শেল বিশেষ অক্ষর না থাকে:./pdf-cat-even $(cat list-of-file-names.txt) >concatenated.pdf
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

দুর্ভাগ্যক্রমে তারা সাদা স্থান আছে। তবে তবুও ধন্যবাদ - আমি বুঝতে পারি নি যে এটি এভাবে করা যেতে পারে।
জান ওয়ার্চো

@ জানেক ওয়ারচল তারপরে আপনি ব্যবহার করতে পারেন<list-of-file-names.txt tr '\n' '\0' | xargs -0 ./pdf-cat-even >concatenated.pdf
গিলস 'এস-অশুভ হওয়া বন্ধ করুন'

3

প্রথম পদক্ষেপটি খালি পৃষ্ঠা সহ একটি পিডিএফ ফাইল তৈরি করা। আপনি প্রচুর প্রোগ্রামের সাহায্যে এটি সহজেই করতে পারেন (লিব্রেঅফিস / ওপেনঅফিস, ইনস্কেপ, (লা) টেক্স, স্ক্রিবাস ইত্যাদি)

তারপরে যেখানে প্রয়োজন সেখানে এই খালি পৃষ্ঠাটি অন্তর্ভুক্ত করুন:

pdftk A.pdf empty_page.pdf B.pdf output result.pdf 

আপনি যদি কোনও স্ক্রিপ্টের সাহায্যে এটি স্বয়ংক্রিয়ভাবে করতে চান, আপনি pdftk file.pdf dump_data | grep NumberOfPages | egrep -o '[0-9]*'পৃষ্ঠা গণনা নিষ্কাশন করতে উদাহরণস্বরূপ ব্যবহার করতে পারেন ।


এটি হ্যাকের মতো মনে হচ্ছে। যদিও এটি কাজ করে তবে আমি মনে করি এটি কাজ করে।
স্যাম হোয়াইট

এই পদ্ধতির প্রায় আমার জন্য কাজ করেছিল: আমি একটি স্ক্রিপ্ট লিখেছিলাম যা epmtyPage.pdf সহ পিডিএফগুলির একটি তালিকা তৈরি করেছিল যেখানে প্রয়োজন সেখানে যুক্ত হয়েছিল, তবে ফাইলের নামগুলিতে ফাঁক থাকলে পিডিএফটিকে এই তালিকাটি সঠিকভাবে পার্স করতে পারিনি। আমি আইএফএসের মান পরিবর্তন করার চেষ্টা করেছি, উদ্ধৃতি চিহ্ন ব্যবহার করে কিন্তু কোন লাভ হয়নি - সম্ভবত এটি পিডিএফটকের দোষ। যাইহোক, পাইপডিএফ ব্যবহার করে উত্তরটি আমার পক্ষে কাজ করেছিল।
জান ওয়ার্চো

@ জনেক ওয়ারচল আপনি পিডিএফটকের কোন সংস্করণ ব্যবহার করেছেন? কমপক্ষে pdftk 1.44 এবং আরও নতুন ফাইল নামগুলিতে শ্বেত স্থানগুলিকে সমর্থন করে বলে মনে হচ্ছে।
জোফেল

@ জোফেল pdftk --versionপিডিএফটেক ১.৪৪ প্রদান করে। আমার মনে আছে আমার আরও বাশ-বুদ্ধিমান বন্ধুরা কমপক্ষে 15 মিনিট এই কাজটি পেতে বিভিন্ন জিনিস চেষ্টা করে ব্যয় করেছিল এবং ছেড়ে দিয়েছিল।
জান ওয়ার্চো

1

গিলসের উত্তর আমার পক্ষে কাজ করেছে, তবে যেহেতু আমাকে অনেকগুলি ফাইল একত্রীকরণ করতে হবে তবে আমি যদি পাঠ্য ফাইল থেকে তাদের নামগুলি পড়তে পারি তবে এটি আরও সুবিধাজনক। আমি গিলস কোডটি সামান্য সম্পাদনা করেছি কেবল এটি করতে, সম্ভবত এটি অন্য কাউকে সহায়তা করবে:

#!/usr/bin/env python

# requires PyPdf library, version 1.13 or above -
# its homepage is http://pybrary.net/pyPdf/
# running: ./this-script-name file-with-pdf-list > output.pdf

import copy, sys
from pyPdf import PdfFileWriter, PdfFileReader
output = PdfFileWriter()
output_page_number = 0

# every new file should start on (n*alignment + 1)th page
# (with value 2 this means starting always on an odd page)
alignment = 2

listoffiles = open(sys.argv[1]).read().splitlines()
for filename in listoffiles:
    # This code is executed for every file in turn
    input = PdfFileReader(open(filename))
    for p in [input.getPage(i) for i in range(0,input.getNumPages())]:
        # This code is executed for every input page in turn
        output.addPage(p)
        output_page_number += 1
    while output_page_number % alignment != 0:
        output.addBlankPage()
        output_page_number += 1
output.write(sys.stdout)

1

আপনি এটি করতে ল্যাটেক্সও ব্যবহার করতে পারেন (যদিও আমি সচেতন এটি সম্ভবত আপনি যা চান তা নয়)। নিম্নলিখিত মত কিছু কাজ করা উচিত:

\documentclass{book}

\usepackage{pdfpages}

\begin{document}

\includepdf[pages=-]{A}
\cleardoublepage % Make sure we clear to an odd page
\includepdf[pages=-]{B} % This inserts all pages. Or you can specify specific pages, a range, or `{}` for a blank page

\end{document}

নোট করুন যে \cleardoublepageদ্বিপক্ষীয় মুদ্রণের জন্য তৈরি ক্লাসগুলির সাথে কেবল একটি ফাঁকা পৃষ্ঠা সন্নিবেশ করানো হয়েছে (উদাঃ বই)

সিটিএএন- তে আরও বিকল্প এবং তথ্য pdfpagesপাওয়া যাবে ।


2
সমস্ত পৃষ্ঠা স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত করতে, আপনি ব্যবহার করতে পারেন \includepdf[pages=-]{...}
jofel

@ জোফেল ধন্যবাদ, প্রশ্নটি স্থির করেছেন। আমি মনে করি এটি সমস্ত পৃষ্ঠায়ও ডিফল্ট হয়েছে, নির্দিষ্ট পৃষ্ঠাগুলি নির্বাচন করা সম্ভব হয়েছিল তা দেখানোর জন্য আমি কেবল এটি সেখানে রেখেছিলাম।
স্যাম হোয়াইট

@ জোফেল এছাড়াও, \cleardoublepageআপনি যদি দ্বিপক্ষীয় মুদ্রণের জন্য তৈরি ক্লাস ব্যবহার করছেন তবে কেবল একটি ফাঁকা পৃষ্ঠা সন্নিবেশ করান। আমি নিবন্ধটি ব্যবহার করছিলাম যা কাজ করে না; আমি এটি স্থির করেছি এবং এটি প্রতিফলিত করতে প্রশ্ন আপডেট করেছি।
স্যাম হোয়াইট

\includepdfডিফল্টরূপে কেবল প্রথম পৃষ্ঠা অন্তর্ভুক্ত করে (সমস্ত পৃষ্ঠা নয়)। \documentclass[twoside]{article}কাজ করে।
জোফেল

আমি যা দেখছি সেগুলি থেকে আমি সমস্ত ফাইল অন্তর্ভুক্ত করতে হবে তা স্পষ্টভাবে লিখতে হবে, সুতরাং এটি আমার পক্ষে যথেষ্ট ভাল নয়। যা হোক ধন্যবাদ.
জান ওয়ার্চো

0

পাইপডিএফ 2 এবং পাইথন 3 সহ কোডটি এখানে

#!/usr/bin/env python


# requires PyPdf2 library, version 1.26 or above -
# its homepage is https://pythonhosted.org/PyPDF2/index.html
# running: ./this-script-name output.pdf file-with-pdf-list

import copy, sys
from PyPDF2 import PdfFileWriter, PdfFileReader
output = PdfFileWriter()
output_page_number = 0

# every new file should start on (n*alignment + 1)th page
# (with value 2 this means starting always on an odd page)
alignment = 2

for filename in sys.argv[2:]:
    # This code is executed for every file in turn
    input = PdfFileReader(open(filename, "rb"))
    output.appendPagesFromReader(input)
    output_page_number += input.getNumPages()

    while output_page_number % alignment != 0:
        output.addBlankPage()
        output_page_number += 1

output.write(open(sys.argv[1], "wb"))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.