আমি কীভাবে 'আনবুক' করব পিডিএফ


10

আমার কাছে একটি পিডিএফ ফাইল রয়েছে যা একটি পুস্তিকা বিন্যাসে তৈরি হয়েছিল। এটি ল্যান্ডস্কেপ অভিযোজনে A4 কাগজে মুদ্রণ বোঝানো হয়েছে; এখানে পিডিএফ-এর দুটি পৃষ্ঠা রয়েছে যা প্রকৃত বইয়ের চারটি পৃষ্ঠার সাথে মিলিত হওয়া উচিত।

 -------------------------------
|              |                |
|              |                |
|              |                |
|    (1)       |      (3)       |
|              |                |
|              |                |
|              |                |
 ------------------------------- 

 -------------------------------
|              |                |
|              |                |
|              |                |
|    (4)       |      (2)       |
|              |                |
|              |                |
|              |                |
 -------------------------------

বন্ধনীগুলি পৃথক পৃষ্ঠাগুলির ক্রম অনুসারে।

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

সম্পাদন করা

গিলসকে ধন্যবাদ, আমি নিম্নলিখিত কোডটি ব্যবহার করতে পেরেছি:

import copy, sys
from pyPdf import PdfFileWriter, PdfFileReader
input = PdfFileReader(sys.stdin)
output = PdfFileWriter()
second_half = []
for i in range(0,input.getNumPages()):
    p = input.getPage(i)
    q = copy.copy(p)

    print >> sys.stderr, 'splitting page',i
    print >> sys.stderr, '\tlowerLeft:',p.mediaBox.lowerLeft
    print >> sys.stderr, '\tupperRight:',p.mediaBox.upperRight

    p.mediaBox.upperRight = (ur[0], (bl[1]+ur[1])/2)
    p.mediaBox.lowerLeft = bl

    q.mediaBox.upperRight = ur
    q.mediaBox.lowerLeft = (bl[0], (bl[1]+ur[1])/2)

    if i % 2 == 0:
        output.addPage(p)
        qold = q
    else:
        output.addPage(q)
        output.addPage(qold)
        output.addPage(p)
output.write(sys.stdout)

1
আমি মনে করি এটি superuser.com- এ
অ্যাডাম জালকম্যান

@ অ্যাডামজাল্কম্যান কেন? তিনি একটি লিনাক্স প্রোগ্রাম খুঁজছেন
মাইকেল মরোজেক

2
আপনি এই সমস্যার উত্তর (গিলস দ্বারা) আপনার সমস্যার সাথে খাপ খাইয়ে নিতে পারেন, অর্থাত্ একটি পিপিডিএফ স্ক্রিপ্ট তৈরি করুন।
sr_

আপনি কি নিশ্চিত যে আপনি পৃষ্ঠাগুলি 3 এবং 4 সেরে নেই? আমি মুদ্রণ কাজ করেছি; এই বিন্যাসটির কোনও অর্থ হয় না ....
ওয়াইল্ডকার্ড

উত্তর:


4

কাজটি করে এমন পাইপডিএফ লাইব্রেরি ব্যবহার করে এখানে একটি পাইথন স্ক্রিপ্ট রয়েছে । (থেকে উত্পন্ন un2up।) নামক স্ক্রিপ্টে এটি সংরক্ষণ করুন unbook, এটি কার্যকর ( chmod +x unbook) তৈরি করুন এবং এটি একটি ফিল্টার হিসাবে চালান ( unbook <book.pdf >1up.pdf)।

আমি এই স্ক্রিপ্ট এর আউটপুট পরীক্ষা করেছি pdfbook --signature=N। অন্য পদ্ধতির জন্য, আপনাকে অন্য প্রতিটি ইনপুট পৃষ্ঠার বিপরীত করার প্রয়োজন হবে না এবং পৃষ্ঠার ক্রমটি ভিন্ন হতে পারে (এটি ল্যান্ডস্কেপ পৃষ্ঠাগুলির ওরিয়েন্টেশনের উপর নির্ভর করে)। পৃষ্ঠাটি আপনার প্রশ্নের সাথে মেলে না; 13,42 আমার কাছে কোনও অর্থ দেয় না (একটি 4 পৃষ্ঠার বইতে 3 টি 2 এর পাশে হওয়া উচিত, 1 এর পাশে নয়)।

#!/usr/bin/env python
import copy, sys
from pyPdf import PdfFileWriter, PdfFileReader
input = PdfFileReader(sys.stdin)
output = PdfFileWriter()
second_half = []
for i in range(0,input.getNumPages()):
    p = input.getPage(i)
    q = copy.copy(p)
    (w, h) = p.mediaBox.upperRight
    p.mediaBox.upperRight = (w/2, h)
    q.mediaBox.upperLeft = (w/2, h)
    if i % 2 == 0:
        p.rotateClockwise(180)
        q.rotateClockwise(180)
        output.addPage(p)
        second_half.append(q)
    else:
        output.addPage(p)
        second_half.append(q)
second_half.reverse()
for q in second_half: output.addPage(q)
output.write(sys.stdout)

কোনও অবমূল্যায়ন সতর্কতা উপেক্ষা করুন; কেবল পিপিডিএফ রক্ষণাবেক্ষণকারীদের এগুলির সাথে সম্পর্কিত হতে হবে।


কিছুক্ষণ আগে এটি জিজ্ঞাসা করা হয়েছিল, তবে আপনার সমাধানটি প্রয়োগ করতে আমার সমস্যা হচ্ছে। আমি ওএসএক্স চালাচ্ছি, ম্যাকপোর্টস এর মাধ্যমে পাইথন এবং পাই 27-পাইপডিএফ ইনস্টল করেছি। আমি একটি আনবুক ফাইল তৈরি করেছি এবং স্ক্রিপ্টটি অনুলিপি করে আটকালাম। নির্দেশ অনুসারে কমান্ড চালানো একটি নতুন 1up.pdf ফাইল 0 বাইট সহ তৈরি করে। আমার টার্মিনালে কোনও ত্রুটি বা কিছুই তালিকাভুক্ত নয়, তবে কমান্ডটি কার্যকর করার পরে কিছুই ঘটে না (আমাকে সিটিআরএল-সি করতে হবে); সিস্টেমটি স্থগিত হয় না এবং কোনও কিছু করে বলে মনে হয় না। আমি কীভাবে সমস্যাটি সনাক্ত করতে পারি? @ গিলস
টিএসজিএম

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

সমস্যাটি হ'ল আমার "পাইথন আনবুক <in.pdf> আউট.পিডিএফ" এর মাধ্যমে পাইথন কল করার কথা ছিল। বোকা আমাকে। এছাড়াও, আপনার কোডটি কিছুটা অদ্ভুত ছিল (এটি শেষের দিকে দ্বিতীয়_হেল্ফ পৃষ্ঠাগুলি স্টিক করছিল seem আমি মনে করি এটি মূল পোস্টে যে ফর্ম্যাটটি লিখেছিলাম সেটির জন্য আমি এটি সংশোধন করেছি)। আমি শেষ পর্যন্ত ব্যবহার করা কোডটি ধারণ করতে আমার আসল প্রতিক্রিয়াটি সম্পাদনা করেছি। এছাড়াও, পৃষ্ঠা আকারের আদেশগুলি ভুল বলে মনে হচ্ছে। আমি এটিও সংশোধন করেছি। @ গিলিস
টিএসজিএম

@ টিএসজিএম কোডটি 1 | 4 বিপরীত, 2 | 3 বিপরীত একটি লেআউট ধরে নিয়েছে যা সাধারণ বইয়ের বিন্যাস। আপনার পৃষ্ঠাগুলি আলাদাভাবে ছড়িয়ে দেওয়া থাকলে আপনাকে এটি টুইট করতে হবে। এটি সেটিংয়ে ফিল্ড-টেস্ট করা হয়েছিল। আপনার স্পষ্টভাবে কল pythonকরা আমার ভুল ছিল: আমার একটি শেবাং লাইন রাখা উচিত ছিল, যোগ করা হয়েছে।
গিলস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.