পিডিএফের পৃষ্ঠাগুলি একাধিক পৃষ্ঠায় কাটা [বন্ধ]


16

আমার কাছে একগুচ্ছ পিডিএফ ফাইল রয়েছে যা একটিমাত্র পিডিএফ পৃষ্ঠায় দুটি "সত্য" পৃষ্ঠা রয়েছে; আমি এগুলি অর্ধেক কাটা এবং প্রতিটি অর্ধেক পৃথক পৃষ্ঠায় রাখতে চাই। মূলত, আমার এমন কিছু দরকার যা pdfnup(বা psnup) এর ঠিক বিপরীত কাজ করে । কীভাবে এই কীর্তি অর্জন করা যায়?

প্ল্যাটফর্মটি লিনাক্স, ওপেন সোর্স পছন্দসই; যেহেতু স্ক্রিপ্ট করা যায় এমন কিছু করার জন্য আমি এগুলির একটি দুর্দান্ত স্তূপ পেয়েছি (একটি জিইউআইয়ের বিপরীতে) ভাল লাগবে, তাই আমি কেবল এটির একটি তালিকা দিতে পারি এবং তা চিবিয়ে ফেলতে পারি।

পূর্ব-বিদ্যমান স্ক্রিপ্টটি একমাত্র বিকল্প নয়; যদি তৃতীয় পক্ষের লাইব্রেরির সাথে একইভাবে পিডিএফগুলি পরিচালনা করতে স্যাম্পল কোড থাকে তবে আমি যা চাই তা করতে আমি সম্ভবত এটি হ্যাক করতে পারি।


উত্তর:


22

আপনি ঘোস্টস্ক্রিপ্টের সাহায্যে এটি সমাধান করতে পারেন। pdftkএকা এটি করতে পারে না (আমার জ্ঞানের সেরা)। এটি আপনাকে ম্যানুয়ালি করার কমান্ডলাইন পদক্ষেপ দেব। পৃষ্ঠার আকার এবং পৃষ্ঠা সংখ্যার জন্য বিভিন্ন পরামিতি সহ এটি একটি প্রক্রিয়া হিসাবে এটি স্ক্রিপ্ট করা সহজ হবে। তবে আপনি বলেছিলেন যে আপনি নিজে এটি করতে পারেন ;-)

ঘোস্টস্ক্রিপ্টের সাহায্যে এটি কীভাবে সমাধান করা যায় ...

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

আপনার ক্ষেত্রে এমনকি সহজ। আপনার কাছে এর সাথে কিছু মিল রয়েছে বলে মনে হচ্ছে:

+------------+------------+   ^
|            |            |   |
|      1     |      2     |   |
|            |            | 595 pt
|            |            |   |
|            |            |   |
|            |            |   |
+------------+------------+   v
             ^
            fold
             v
+------------+------------+   ^
|            |            |   |
|      3     |      4     |   |
|            |            | 595 pt
|            |            |   |
|            |            |   |
|            |            |   |
+------------+------------+   v
<---------- 842 pt -------->

আপনি 4 টি পৃষ্ঠাগুলি সহ 1 পিডিএফ তৈরি করতে চান, যার প্রত্যেকটিরই আকার 421 পিটি x 595 pt।

প্রথম ধাপ

আসুন প্রথমে প্রতিটি ইনপুট পৃষ্ঠা থেকে বাম বিভাগগুলি বের করুন:

gs \
    -o left-sections.pdf \
    -sDEVICE=pdfwrite \
    -g4210x5950 \
    -c "<</PageOffset [0 0]>> setpagedevice" \
    -f double-page-input.pdf

এই পরামিতিগুলি কী করেছিল?

প্রথমে জেনে নিন পিডিএফ 1 ইঞ্চি == 72 পয়েন্টে । তারপরে বাকীটি হ'ল:

  • -o ...............:নাম আউটপুট ফাইল। ছদ্মবেশীও ব্যবহার করে -dBATCH -dNOPAUSE -dSAFER
  • -sDEVICE=pdfwrite : আমরা আউটপুট ফর্ম্যাট হিসাবে পিডিএফ চাই।
  • -g................:আউটপুট মিডিয়া আকার পিক্সেল মধ্যে সেট করে। পিডিএফরাইটের ডিফল্ট রেজোলিউশন 720 ডিপিআই। অতএব পেজ অফসেটের জন্য ম্যাচ পেতে 10 দিয়ে গুণ করুন।
  • -c "..............:ঘোস্টস্ক্রিপ্টকে মূল ইনপুট ফাইলের (যার সাথে অনুসরণ করা দরকার -f) ঠিক আগে প্রদত্ত পোস্টস্ক্রিপ্ট কোড স্নিপেট প্রক্রিয়া করতে বলে asks
  • <</PageOffset ....:মাঝারি পৃষ্ঠা চিত্র স্থানান্তর সেট করে। (অবশ্যই, বাম পৃষ্ঠাগুলির জন্য শিফটটির [0 0]কোনও আসল প্রভাব নেই))
  • -f ...............: এই ইনপুট ফাইলটি প্রক্রিয়া করুন।

শেষ আদেশটি কোন ফলাফল অর্জন করেছিল?

এইটা:

Output file: left-sections.pdf, page 1
+------------+  ^
|            |  |
|     1      |  |
|            |595 pt
|            |  |
|            |  |
|            |  |
+------------+  v

Output file: left-sections.pdf, page 2
+------------+  ^
|            |  |
|     3      |  |
|            |595 pt
|            |  |
|            |  |
|            |  |
+------------+  v
<-- 421 pt -->

দ্বিতীয় ধাপ

পরবর্তী, ডান বিভাগগুলি:

gs \
    -o right-sections.pdf \
    -sDEVICE=pdfwrite \
    -g4210x5950 \
    -c "<</PageOffset [-421 0]>> setpagedevice" \
    -f double-page-input.pdf

নেভিগেশন নেতিবাচক অফসেট নোট করুন যেহেতু আমরা দেখার ক্ষেত্রটি স্থির রাখার সময় পৃষ্ঠাটি বাম দিকে সরিয়ে দিচ্ছি।

ফলাফল:

Output file: right-sections.pdf, page 1
+------------+  ^
|            |  |
|     2      |  |
|            |595 pt
|            |  |
|            |  |
|            |  |
+------------+  v

Output file: right-sections.pdf, page 2
+------------+  ^
|            |  |
|     4      |  |
|            |595 pt
|            |  |
|            |  |
|            |  |
+------------+  v
<-- 421 pt -->

শেষ পদক্ষেপ

এখন আমরা পৃষ্ঠাগুলি একটি ফাইলে একত্রিত করি। আমরা ভূস্ট্রিপ্টের সাহায্যে এটিও করতে পারি, তবে আমরা pdftkপরিবর্তে ব্যবহার করব , কারণ এটি এই কাজের জন্য দ্রুত:

pdftk \
  A=right-sections.pdf \
  B=left-sections.pdf \
  shuffle \
  output single-pages-output.pdf
  verbose

সম্পন্ন. এখানে কাঙ্ক্ষিত ফলাফল। 4 টি বিভিন্ন পৃষ্ঠা, আকারের 421x595 pt।

ফলাফল:

+------------+ +------------+ +------------+ +------------+   ^
|            | |            | |            | |            |   |
|     1      | |     2      | |     3      | |     4      |   |
|            | |            | |            | |            |5595 pt
|            | |            | |            | |            |   |
|            | |            | |            | |            |   |
|            | |            | |            | |            |   |
+------------+ +------------+ +------------+ +------------+   v
<-- 421 pt --> <-- 421 pt --> <-- 421 pt --> <-- 421 pt -->

@ অজানা: ডাউনভোটিংয়ের জন্য ধন্যবাদ! আপনি কি দয়া করে এর কোনও কারণ নির্দেশ করে একটি মন্তব্য লেখার যত্ন করবেন?
কর্ট ফেফিল

ASCII শিল্পের দুর্দান্ত ব্যবহারের জন্য +1 এবং খুব স্পষ্ট নির্দেশাবলী। কেবলমাত্র আমি একটি সিএলআই এন 100 বি তৈরি করলাম, লাইনগুলি এত সহজে পড়া সহজ, তাই না?
মজুর গিক

@ মুলহাউসন: টাইপো ( 421-> -421) সংশোধন করার জন্য ধন্যবাদ । ;-)
কুর্ট ফেফিল

6

একটি সরঞ্জাম পিডিএফপোস্টার রয়েছে যা একটি ইনপুট পৃষ্ঠার জন্য কয়েকটি পৃষ্ঠা সহ পিডিএফ তৈরি করতে ব্যবহার করা যেতে পারে (পৃষ্ঠাগুলি টাইলিং বা কাটা)। এটি সরঞ্জামের মতো poster, যা পোস্টস্ক্রিপ্ট ফাইলগুলির জন্য একই কাজ করে।


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

3

সুতরাং, আরও অনেক অনুসন্ধানের পরে (এটি "পিডিএফ কাট পৃষ্ঠাগুলি" আরও ভাল অনুসন্ধান বলে মনে হয়েছে), আমি একটি ছোট স্ক্রিপ্ট পেয়েছি unpnupযা ব্যবহার করে poster, পিডিএফ / পিএস রূপান্তর, এবং pdftkআমার যা প্রয়োজন ঠিক তা করার জন্য। এটি কিছুটা দীর্ঘ পথ, তবে আমি যে অন্যান্য পদ্ধতিগুলি খুঁজে পেয়েছি তার চেয়ে অনেক বেশি উন্নত (যেমন চিত্রগ্রাহক ব্যবহার করে) কারণ এটি পৃষ্ঠাগুলি ছড়িয়ে দেওয়ার আগে পাতাগুলি ছড়িয়ে দেয় না।

কোনও কারণে মোবাইলড্রেড চলে গেলে, স্ক্রিপ্টটির মূলটি (জিপিএলভি 2 এর অধীনে বা পরে হ্যারাল্ড হ্যাকেনবার্গের দ্বারা লাইসেন্স করা <hackenberggmx.at>) নীচে রয়েছে:

pdftk "$1" burst
for file in pg*.pdf;
do
    pdftops -eps $file
    poster -v -pA4 -mA5 -c0% `basename $file .pdf`.eps > `basename $file .pdf`.tps
    epstopdf `basename $file .pdf`.tps
done
pdftk pg*.pdf cat output ../`basename $1 .pdf`_unpnuped.pdf

1
লোকেরা যখন তাদের নিজস্ব প্রশ্নের উত্তর দেয় তখন তা পছন্দ করে। তবে আপনার যদি জিইউআই দিয়ে এটি করার দরকার হয়, বিশেষত যদি পৃষ্ঠাগুলির আকারগুলি নাও ছিল বা আপনি প্রতিটি পাশ কাটাতে
উদ্ভাসিত

আপনি সমস্ত রূপান্তর ছাড়াই পিডিএফটিকে দিয়ে যা করতে চান তা করতে সক্ষম হবেন।
কার্লএফ

@ কার্লএফ: আমি ভেবেছিলাম এটি সম্ভব হবে তবে পৃষ্ঠাগুলির বিষয়বস্তুগুলি পরিচালনা করতে আমি পিডিএফটিকে ম্যান পৃষ্ঠাতে কিছু দেখতে পাচ্ছি না। আমার জন্য কোন পয়েন্টার আছে?
310

@ ফ্রেবজৌস: আপনার নিজের প্রশ্নের উত্তর দিতে দোষ কী?
কার্ট ফেফিল

1
@ ওম্বল: আপনার রূপান্তরগুলি PS / EPS এর মাধ্যমে চলে। এটি মানের (এম্বেডড ফন্ট, ট্রান্সপার্জেন্সি ইত্যাদি) লোকসানের দিকে আবদ্ধ। আমার পরামর্শ ঝুঁকিপূর্ণ PDF => EPS => PDFরুট এড়ানো এবং নিরাপদ PDF => PDF => PDFপথে চলে ।
কার্ট ফেফিল

2

আমি আমার অনুরূপ পরিস্থিতির জন্য কর্ট ফেফিলের উত্তরটি খুব সহায়ক বলে খুঁজে পেয়েছি। আমি ভেবেছিলাম সমাধানের আমার পরিবর্তনটি অন্যদের সাথে ভাগ করে নিতে পারি ...

আমারও একটি স্ক্যান পিডিএফ ছিল যা প্রতিটি শীটে 2 টি পৃষ্ঠা ছিল had এটি একটি 11 x 8.5 (ইঞ্চি) স্যাডল-সেলাই করা পুস্তিকাটির স্ক্যান ছিল যা মূলত স্ক্যান করার সময় মূলত ছেড়ে দেওয়া হয়েছিল, সুতরাং: পিডিএফ পৃষ্ঠা 1 = পিছনে এবং সামনের কভার; পিডিএফ পৃষ্ঠা 2 = পৃষ্ঠাগুলি 2 এবং 3, ইত্যাদি এটি অনস্ক্রিনে সূক্ষ্মভাবে পড়ে তবে আপনি এটি মুদ্রণ করতে পারবেন না এবং তারপরে পুস্তিকাটির আরও অনুলিপি তৈরি করতে এটি স্ট্যাপল করতে পারবেন না।

আমার এটি একটি দ্বৈত কপিয়রে মুদ্রণ করতে সক্ষম হওয়া দরকার; অর্থাত্ এটিকে পিছনে মুদ্রণের জন্য প্রস্তুত একটি "আরোপিত" পিডিএফে পরিণত করুন। সুতরাং কার্টের সমাধানটি ব্যবহার করে, আমি এটিকে (ওহেম) "ওয়ান-লাইনার" তৈরি করে এটিকে আবার সঠিক পৃষ্ঠার ক্রমে অর্ধ-পৃষ্ঠায় রূপান্তর করতে। এটি যে কোনও উচ্চতা এবং প্রস্থের জন্য এবং যে কোনও পৃষ্ঠাতে কাজ করবে। আমার ক্ষেত্রে আমার 40-পৃষ্ঠাগুলির একটি পুস্তিকা ছিল (পিডিএফে 20 টি স্ক্যান পৃষ্ঠা)

HEIGHT=8.5 WIDTH=11 ORIG_FILE_PATH="original.pdf" \
count=$(set -xe; \
gs -o left.pdf -sDEVICE=pdfwrite \
-g$(perl -e "print(($WIDTH / 2) * 720)")x$(perl -e "print($HEIGHT * 720)") \
-c "<</PageOffset [0  0]>> setpagedevice" \
-f "$ORIG_FILE_PATH" >/dev/null; \
gs -o right.pdf -sDEVICE=pdfwrite \
-g$(perl -e "print(($WIDTH / 2) * 720)")x$(perl -e "print($HEIGHT * 720)") \
-c "<</PageOffset [-$(perl -e "print(($WIDTH / 2) * 72)")  0]>> setpagedevice" \
-f "$ORIG_FILE_PATH" | grep Page | wc -l ); \
echo '>>>>>' Re-ordering $count pages...; \
(set -xe; pdftk A=right.pdf B=left.pdf cat \
A1 `set +xe; for x in $(seq 2 $count); do echo B$x A$x; done` B1 \
output ordered.pdf); \
echo "Done. See ordered.pdf"

আপনাকে এই কমান্ডের প্রথম কয়েকটি পরামিতি পরিবর্তন করতে হবে উচ্চতা এবং WIDTH এবং ORIG_FILE_PATH নির্দিষ্ট করতে। কমান্ডের বাকী অংশগুলি বিভিন্ন আকারের গণনা করে এবং জিএসকে দু'বার কল করে, তারপরে পিডিএফটেক। এটি আপনার স্ক্যানের পৃষ্ঠাগুলিও গণনা করবে এবং তারপরে সঠিক সাজানোর স্পেসিফিকেশন তৈরি করবে (আমি যে দৃশ্যের জন্য দিয়েছি)

এটি এটি কী করছে সে সম্পর্কে কিছুটা অগ্রগতি ঘটায়, যা দেখতে এটির মতো দেখাবে:

+++ perl -e 'print((11 / 2) * 720)'
+++ perl -e 'print(8.5 * 720)'
++ gs -o left.pdf -sDEVICE=pdfwrite -g3960x6120 -c '<</PageOffset [0  0]>> setpagedevice' -f original.pdf
++ wc -l
++ grep Page
+++ perl -e 'print((11 / 2) * 720)'
+++ perl -e 'print(8.5 * 720)'
+++ perl -e 'print((11 / 2) * 72)'
++ gs -o right.pdf -sDEVICE=pdfwrite -g3960x6120 -c '<</PageOffset [-396  0]>> setpagedevice' -f original.pdf
>>>>> Re-ordering 20 pages...
++ set +xe
+ pdftk A=right.pdf B=left.pdf cat A1 B2 A2 B3 A3 B4 A4 B5 A5 B6 A6 B7 A7 B8 A8 B9 A9 B10 A10 B11 A11 B12 A12 B13 A13 B14 A14 B15 A15 B16 A16 B17 A17 B18 A18 B19 A19 B20 A20 B1 output ordered.pdf
Done. See ordered.pdf

এরপরে, মুদ্রিত পুস্তিকার জন্য আপনার প্রয়োজনীয় পৃষ্ঠাটি আরোপ করতে, আপনি কেবল "মুদ্রণ" অর্ডার করেছেন p পিডিএফ আপনার পছন্দমতো ঠিক আকারের কাস্টম পৃষ্ঠার আকারে (আমার উদাহরণে, 5.5 x 8.5), এটি একটি "বুকলেট তৈরিতে প্রেরণ "সরঞ্জাম (আমার ক্ষেত্রে, আমি ক্রেস্টোফ ভোগেলবাসের ম্যাকের জন্য ক্রিয়েট বুকলেটটি http://download.cnet.com/Create-Booklet/3000-2088_4-86349.html থেকে ব্যবহার করেছি )।

ফলাফল পিডিএফ এখন 11 x 8.5 এর মূল পৃষ্ঠার আকারে শীট প্রতি 2 পৃষ্ঠাগুলির সাথে ফিরে আসবে, তবে ক্রমটি এমন হবে যে আপনি এটি দ্বিগুণ, সংক্ষিপ্ত-প্রান্তের বাইন্ডিং এবং ভয়েইল মুদ্রণ করতে পারবেন! আপনার একটি প্রিন্টআউট থাকবে যা আপনি ফটোকপি করতে পারেন এবং ভাঁজ করতে পারেন এবং জিন-সেলাই করতে পারেন, আসল পুস্তিকাটি কখনই আসল বিচ্ছিন্ন না করে (বা এমনকি অগত্যা না দেখে) পুনরুত্পাদন করতে পারেন।

আশা করি এটি কাউকে সাহায্য করবে!

-c


1

উপরের পিপটাসের উত্তরের ভিত্তিতে :

উইন্ডোজগুলিতে, শুরুতে একক কভার চিত্র সহ বর্ণ-আকারের পিডিএফগুলি বিভক্ত করার জন্য, নিম্নলিখিতটি আমার জন্য দুর্দান্ত কাজ করেছে (দ্বিতীয় ধাপে [-612 0] এর ব্যবহারটি নোট করুন, একটি ধনাত্মক মান ফাঁকা পৃষ্ঠাগুলি তৈরি করেছে কারণ এটি ভুল পথে ঠেলে দিয়েছে) ।)

gswin32c -o left-sections.pdf -sDEVICE=pdfwrite -dFirstPage=2 -g6120x7920 -c "<</PageOffset [0 0]>> setpagedevice" -f input.pdf

-dFirstPage=22 পৃষ্ঠায় প্রক্রিয়া শুরু করতে জিএসকে নির্দেশ দেয় এর ব্যবহারটি নোট করুন ।

gswin32c -o right-sections.pdf -sDEVICE=pdfwrite -dFirstPage=2 -g6120x7920 -c "<</PageOffset [-612 0]>> setpagedevice" -f input.pdf

এটি একইভাবে ডান-বিভাগগুলি তৈরি করে। এবং এখন কভার চিত্র:

gswin32c -o cover.pdf -sDEVICE=pdfwrite -dLastPage=1 -g6120x7920 -c "<</PageOffset [0 0]>> setpagedevice" -f input.pdf

এরপরে, যেহেতু আমি ম্যানুয়াল পৃষ্ঠার ইনপুট ব্যবহার করে পিডিফটকের সাথে একত্রীকরণ করতে চাই না, তাই আমি বাম এবং ডান বিভাগগুলিকে একটি নতুন ডিরেক্টরিতে পৃথক পিডিএফগুলিতে ভাগ করেছি।

mkdir input_file
copy cover.pdf input_file\0000.pdf
pdftk left-sections.pdf burst output input_file\%04d_A.pdf
pdftk right-sections.pdf burst output input_file\%04d_B.pdf

তারপরে আমি সেই ডিরেক্টরিতে পিডিএফগুলিতে বর্ণানুক্রমে যোগদান করি (এবং ভাগ্যক্রমে এর অর্থ তারা সঠিক ক্রমে সাজানো হয়েছে!) এবং আমি "সতর্কতা: 0..65535 পরিসরের মধ্যে জেনারেশন নম্বরটিও ধরে রেখে, আবার ঠিক করার জন্য ভুতের স্ক্রিপ্টের মাধ্যমে ফলাফলটি চালাই, 0. " পিডিএফটেক দ্বারা উত্পাদিত ত্রুটিগুলি যা ভূতলিপিটিকে "পুনরাবৃত্তি-পাওলো -155 (পুনরুত্থান-পদ্মফ.স.ফ.এন.এল.সি.এল.ইজি.কম)" বলে ডাকে - এটি আমার ব্যবহারের অর্ধেক ফাইলের আকারও কেটেছিল। একটি 4.5 এমবি মূল সহ, পিডিএফটিকের ফলাফল 6.7MB এবং gswin32c এর পুনরায় প্রসেসিং এটিকে হ্রাস করে 3.2 এমবি করেছে।

pdftk input_file\*.pdf cat output input_temp.pdf
gswin32c -o final_output.pdf -sDEVICE=pdfwrite -f input_temp.pdf

এবং আমরা সম্পন্ন করেছি! ইনপুট_ফায়ার ফোল্ডার, Cover.pdf, ইনপুট_টেম্প.পিডিএফ, ডান_সেকশন.পিডিএফ এবং বাম_সেকশন.পিডিএফ মুছে ফেলার জন্য নির্দ্বিধায়। ;-)


1

যদি আপনার কেবলমাত্র একটি ডকুমেন্টে বাম-হাতের পিডিএফগুলি এবং ডকুমেন্টের সমস্ত ডানদিকে পিডিএফস আউটপুট প্রয়োজন হয়, তবে কার্ট ফেফিলের উত্তরের উপর ভিত্তি করে নিম্নলিখিত স্ক্রিপ্টটি কৌশলটি করবে (যে কোনও উচ্চতার জন্য কাজ করে এবং প্রস্থ):

$ cat split.sh
#!/bin/bash                                                                     

dims=$(pdfinfo "$1" | grep -i "page size:" | cut -d ":" -f2)                    
width=$(echo "$dims" | cut -d " " -f7)                                          
height=$(echo "$dims" | cut -d " " -f9)                                         
half_width=$(echo "$width * 0.5" | bc -l | cut -d "." -f1)                      
half_widthtt=$(echo "$width * 5" | bc -l | cut -d "." -f1)                      
heighttt=$(echo "$height * 10" | bc -l | cut -d "." -f1)                        

echo "pdf $1 has height $height and width $width"                               

gs -o "left-$1" -sDEVICE=pdfwrite -g"$half_widthtt"x"$heighttt" -c "<</PageOffset [0 0]>> setpagedevice" -f "$1"
gs -o "right-$1" -sDEVICE=pdfwrite -g"$half_widthtt"x"$heighttt" -c "<</PageOffset [-$half_width 0]>> setpagedevice" -f "$1"

তারপরে এটি চালান:

$ ./split.sh thepdftosplit.pdf
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.