পাইথন ব্যবহার করে বিদ্যমান পিডিএফে পাঠ্য যুক্ত করুন


106

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

দ্রষ্টব্য: আদর্শভাবে আমি এটি উইন্ডোজ এবং লিনাক্স উভয় ক্ষেত্রেই চালাতে সক্ষম হতে চাই তবে একটি ধাক্কায় কেবল লিনাক্সই তা করবে।

সম্পাদনা: পাইপডিএফ এবং রিপোর্টল্যাব দেখতে ভাল লাগছে তবে কেউই আমাকে একটি বিদ্যমান পিডিএফ সম্পাদনা করার অনুমতি দেবে না, অন্য কোনও বিকল্প আছে কি?

উত্তর:


88

আমি জানি এটি একটি পুরানো পোস্ট, তবে সমাধানের সন্ধান করার জন্য আমি দীর্ঘ সময় ব্যয় করেছি। আমি কেবল রিপোর্টল্যাব এবং পাইপিডিএফ ব্যবহার করে একটি শালীন ব্যক্তির জুড়ে এসেছি তাই আমি ভেবেছিলাম ভাগ করে নিই:

  1. আপনার পিডিএফ ব্যবহার করে পড়ুন PdfFileReader(), আমরা এই ইনপুট কল করব
  2. রিপোর্টল্যাব ব্যবহার করে আপনার পাঠ্য যুক্ত একটি নতুন পিডিএফ তৈরি করুন, এটি স্ট্রিং অবজেক্ট হিসাবে সংরক্ষণ করুন
  3. স্ট্রিং অবজেক্টটি ব্যবহার করে পড়ুন PdfFileReader(), আমরা এই পাঠ্যটিকে কল করব
  4. ব্যবহার করে একটি নতুন পিডিএফ অবজেক্ট তৈরি করুন PdfFileWriter(), আমরা এই আউটপুটটিকে কল করব
  5. ইনপুট মাধ্যমে পুনরাবৃত্তি করুন এবং .mergePage(*text*.getPage(0))প্রতিটি পৃষ্ঠার জন্য আপনি পাঠ্যটি যুক্ত করতে চান তার জন্য আবেদন করুন , তারপরে output.addPage()পরিবর্তিত পৃষ্ঠাগুলি কোনও নতুন দস্তাবেজে যুক্ত করতে ব্যবহার করুন

এটি সাধারণ পাঠ্য সংযোজনের জন্য ভাল কাজ করে। ডকুমেন্টকে জলচিহ্ন করার জন্য পাইপডিএফ-এর নমুনা দেখুন।

নীচে প্রশ্নের উত্তর দেওয়ার জন্য এখানে কিছু কোড দেওয়া হল:

packet = StringIO.StringIO()
can = canvas.Canvas(packet, pagesize=letter)
<do something with canvas>
can.save()
packet.seek(0)
input = PdfFileReader(packet)

এখান থেকে আপনি ইনপুট ফাইলের পৃষ্ঠাগুলি অন্য ডকুমেন্টের সাথে মার্জ করতে পারেন।


2
"রিপোর্টল্যাব ব্যবহার করে আপনার পাঠ্য যুক্ত একটি নতুন পিডিএফ তৈরি করুন, এটি স্ট্রিং অবজেক্ট হিসাবে সংরক্ষণ করুন" আপনি কীভাবে এটি করেন? এটি একটি ক্যানভাস উদাহরণ।
লক্ষ্মণপ্রসাদ

1
লক্ষ্মণের প্রশ্নের উত্তর দেওয়ার জন্য আমি উপরে কয়েকটি নমুনা কোড যুক্ত করেছি।
বাসিন্দা

: আমি PyPDF2 ব্যবহার করার প্রস্তাব দিই যেহেতু এটি আরো আপডেট করা হয়, এছাড়াও তাদের নমুনা কোড চেক github.com/mstamy2/PyPDF2/blob/...
অকস্মাৎ জ্বলিয়া ত্তঠা

2
এই কোডটি একটি নতুন পিডিএফ ফাইল তৈরি করবে এবং সমস্ত মেটাডেটা এড়িয়ে যাবে। সুতরাং এটি বিদ্যমান পিডিএফ এ সংযোজন করা হয় না।
আন্তন কুকোবা

124

[পাইথন ২.7] এর উদাহরণ:

from pyPdf import PdfFileWriter, PdfFileReader
import StringIO
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter

packet = StringIO.StringIO()
# create a new PDF with Reportlab
can = canvas.Canvas(packet, pagesize=letter)
can.drawString(10, 100, "Hello world")
can.save()

#move to the beginning of the StringIO buffer
packet.seek(0)
new_pdf = PdfFileReader(packet)
# read your existing PDF
existing_pdf = PdfFileReader(file("original.pdf", "rb"))
output = PdfFileWriter()
# add the "watermark" (which is the new pdf) on the existing page
page = existing_pdf.getPage(0)
page.mergePage(new_pdf.getPage(0))
output.addPage(page)
# finally, write "output" to a real file
outputStream = file("destination.pdf", "wb")
output.write(outputStream)
outputStream.close()

পাইথন ৩.x এর উদাহরণ:


from PyPDF2 import PdfFileWriter, PdfFileReader
import io
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter

packet = io.BytesIO()
# create a new PDF with Reportlab
can = canvas.Canvas(packet, pagesize=letter)
can.drawString(10, 100, "Hello world")
can.save()

#move to the beginning of the StringIO buffer
packet.seek(0)
new_pdf = PdfFileReader(packet)
# read your existing PDF
existing_pdf = PdfFileReader(open("original.pdf", "rb"))
output = PdfFileWriter()
# add the "watermark" (which is the new pdf) on the existing page
page = existing_pdf.getPage(0)
page.mergePage(new_pdf.getPage(0))
output.addPage(page)
# finally, write "output" to a real file
outputStream = open("destination.pdf", "wb")
output.write(outputStream)
outputStream.close()

13
পাইথন 3 এর জন্য প্যাকেটটি io.BytesIOপাইপডিএফ 2 এর চেয়ে পিআইপিডিএফ 2 ব্যবহার করা উচিত এবং এটি ব্যবহার করা উচিত un দুর্দান্ত উত্তর!
নওফাল ইব্রাহিম

4
ভাগ করে নেওয়ার জন্য ধন্যবাদ. এটি দুর্দান্ত কাজ করে। একটি দ্রষ্টব্য: আমি বিশ্বাস করি এর openপরিবর্তে এটি ব্যবহার করা ভাল file
মিটেনকা

আমি বিশ্বাস করি এটি একটি আরও গ্রহণযোগ্য উত্তর, বিশেষত এটির মধ্যে একটি কার্যকারী উদাহরণ রয়েছে।
কেসি

1
যত্নশীল: নতুন দস্তাবেজটিতে কেবলমাত্র প্রথম পৃষ্ঠারই অন্তর্ভুক্ত রয়েছে! এটা তোলে পাতাগুলিতে বাকি কপি করা সহজ যথেষ্ট existing_pdfকরার output, নমুনা কোড শুধু না।
অ্যালেক্সিস

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

11

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


আমি মনে করি আপনি সেখানে একটি লিঙ্ক রাখতে পারেন
The6thSense

ভাল যুক্তি! আমি যখন এটি পোস্ট করি তখন আমি খুব বেশি এসও স্টাফ করিনি এবং "ন্যূনতম পাঠ্য প্লাস লিঙ্ক নীতি" সম্পর্কে চিন্তিত ছিলাম। (আমার প্রতিবেদক তখন 46 ছিল, এবং আইআইআরসি আমি একটি উত্তর পেয়ে সবে মাত্র -2 পেয়েছি, সুতরাং 5 বছরের পুরানো প্রশ্নের নতুন উত্তর সম্পর্কে আমি কিছুটা উদ্বিগ্ন ছিলাম :)
প্যাট্রিক মউপিন

পুরানো প্রশ্নগুলি আরও দর্শন
পেয়েছে

এফডব্লিউআইডাব্লু, আপনি যদি এই লিঙ্কটি অনুসরণ করা শুরু করেন তবে আরও কিছু রিপোর্টলব / পিডিএফআরউ উদাহরণ রয়েছে । আমি সেখানে উত্তর দিয়েছি, দুপ টার্গেটের একটি উত্তরের ভিত্তিতে।
প্যাট্রিক মউপিন

7

ওঠানামা ডেভিড Dehghan এর উত্তর উপরে, পাইথন 2.7.13 ভাষায় নিম্নলিখিত কাজগুলো করেনঃ

from PyPDF2 import PdfFileWriter, PdfFileReader, PdfFileMerger

import StringIO

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter

packet = StringIO.StringIO()
# create a new PDF with Reportlab
can = canvas.Canvas(packet, pagesize=letter)
can.drawString(290, 720, "Hello world")
can.save()

#move to the beginning of the StringIO buffer
packet.seek(0)
new_pdf = PdfFileReader(packet)
# read your existing PDF
existing_pdf = PdfFileReader("original.pdf")
output = PdfFileWriter()
# add the "watermark" (which is the new pdf) on the existing page
page = existing_pdf.getPage(0)
page.mergePage(new_pdf.getPage(0))
output.addPage(page)
# finally, write "output" to a real file
outputStream = open("destination.pdf", "wb")
output.write(outputStream)
outputStream.close()


0

আপনার সমস্যার ভাগ্য ভাল হতে পারে পিডিএফকে একটি সম্পাদনাযোগ্য ফর্ম্যাটে রূপান্তর করা, আপনার পরিবর্তনগুলি লিখতে, এবং আবার এটিকে পিডিএফে রূপান্তর করা। আমি এমন একটি লাইব্রেরি জানি না যা আপনাকে সরাসরি পিডিএফ সম্পাদনা করতে দেয় তবে উদাহরণস্বরূপ DOC এবং পিডিএফের মধ্যে প্রচুর রূপান্তরকারী রয়েছে।


1
সমস্যাটি হ'ল আমার কাছে কেবল পিডিএফ (3 য় পক্ষের) থেকে উত্স এবং পিডিএফ -> ডোক -> পিডিএফ রূপান্তরটিতে অনেক কিছু হারাবে। এছাড়াও লিনাক্সে চালানোর জন্য আমার এটি দরকার যাতে ডোকের পক্ষে সেরা পছন্দ নাও হতে পারে।
ফ্রোজেনস্কাইস 21

আমি বিশ্বাস করি যে অ্যাডোব পিডিএফ সম্পাদনার ক্ষমতাটি বেশ বন্ধ এবং মালিকানা রাখে যাতে তারা তাদের অ্যাক্রোব্যাটের আরও ভাল সংস্করণের জন্য লাইসেন্স বিক্রি করতে পারে। একরকম ম্যাক্রো ইন্টারফেস ব্যবহার করে এটি সম্পাদনা করতে অ্যাক্রোব্যাট প্রো এর ব্যবহারটি স্বয়ংক্রিয় করার কোনও উপায় আপনি খুঁজে পেতে পারেন।
এহেলকে

আপনি যে অংশগুলিতে লিখতে চান সেগুলি যদি ফর্ম ক্ষেত্র হয় তবে সেগুলি সম্পাদনা করার জন্য এক্সএমএল ইন্টারফেস রয়েছে - অন্যথায় আমি কিছুই খুঁজে পাচ্ছি না।
এহেলকে

না আমি কেবল প্রতিটি পৃষ্ঠায় কয়েকটি লাইন পাঠ্য যুক্ত করতে চেয়েছিলাম।
ফ্রিজেঙ্কস 21

0

আপনি যদি উইন্ডোজে থাকেন তবে এটি কাজ করতে পারে:

পিডিএফ নির্মাতা পাইলট

পাইথনে পিডিএফ তৈরি এবং সম্পাদনা ফ্রেমওয়ার্কের একটি শ্বেতপত্র রয়েছে। এটি সামান্য তারিখযুক্ত, তবে সম্ভবত আপনাকে কিছু দরকারী তথ্য দিতে পারে:

পাইথন পিডিএফ সম্পাদনা এবং প্রসেসিং ফ্রেমওয়ার্ক হিসাবে ব্যবহার করা হচ্ছে


সাদা কাগজটি দেখতে দেখতে বেশ ভাল তবে কোডে কিছুটা হালকা, এবং আমার নিজের পুরো পিডিএফ ফ্রেমওয়ার্কটি বাস্তবায়নের কোনও সংস্থান আমার কাছে নেই! ;)
ফ্রিজেসকিস 21

-4

আপনি কি পিপিডিএফ চেষ্টা করেছেন ?

দুঃখিত, এটিতে কোনও পৃষ্ঠার সামগ্রী পরিবর্তন করার ক্ষমতা নেই doesn't


দেখে মনে হচ্ছে এটি কাজ করতে পারে, কেউ কি এটি ব্যবহার করেছেন? স্মৃতি ব্যবহারের মতো কী?
ফ্রিজেসকিস 21

এটিতে একটি পাঠ্য ওয়াটারমার্ক যুক্ত করার ক্ষমতা আছে এবং এটি সঠিকভাবে ফর্ম্যাট করা থাকলে এটি কাজ করতে পারে।
ফ্রোজেনস্কাইস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.