Python을 사용하여 기존 PDF에 텍스트 추가
파이썬을 사용하여 기존 PDF에 추가 텍스트를 추가해야 하는데, 이 작업을 수행하는 가장 좋은 방법은 무엇이며 추가 모듈을 설치해야 합니다.
참고: 이상적으로 Windows와 Linux 모두에서 이 기능을 실행할 수 있으면 좋겠지만, 누르면 Linux만 실행할 수 있습니다.
편집: pypdf와 ReportLab은 좋아 보이지만 둘 다 기존 PDF를 편집할 수 없습니다. 다른 옵션이 있습니까?
[Python 2.7]의 예:
from pyPdf import PdfFileWriter, PdfFileReader
import StringIO
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
packet = StringIO.StringIO()
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)
# create a new PDF with Reportlab
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()
Python 3.x의 예:
from PyPDF2 import PdfFileWriter, PdfFileReader
import io
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
packet = io.BytesIO()
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)
# create a new PDF with Reportlab
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.pages[0]
page.merge_page(new_pdf.pages[0])
output.add_page(page)
# finally, write "output" to a real file
output_stream = open("destination.pdf", "wb")
output.write(output_stream)
output_stream.close()
오래된 직책인 건 알지만 해결책을 찾기 위해 오랜 시간을 보냈습니다.ReportLab과 PyPDF만 사용하는 괜찮은 제품을 발견했기 때문에 다음을 공유하려고 했습니다.
- 사용하여 PDF 읽기
PdfFileReader()
우리는 이 입력을 호출할 것입니다. - ReportLab을 사용하여 추가할 텍스트가 포함된 새 PDF를 만들고, 이를 문자열 개체로 저장합니다.
- 사용하여 문자열 개체 읽기
PdfFileReader()
우리는 이 문자를 부를 것입니다. - 사용하여 새 PDF 개체 생성
PdfFileWriter()
우리는 이 출력을 호출할 것입니다. - 입력 및 적용을 통해 반복합니다.
.mergePage(*text*.getPage(0))
텍스트를 추가할 각 페이지에 대해 다음을 사용합니다.output.addPage()
수정된 페이지를 새 문서에 추가하려면
이것은 간단한 텍스트 추가에 적합합니다.문서에 워터마크를 표시하는 방법은 PyPDF의 샘플을 참조하십시오.
다음은 아래 질문에 대답할 몇 가지 코드입니다.
packet = StringIO.StringIO()
can = canvas.Canvas(packet, pagesize=letter)
<do something with canvas>
can.save()
packet.seek(0)
input = PdfFileReader(packet)
여기서 입력 파일의 페이지를 다른 문서와 병합할 수 있습니다.
pdfrw를 사용하면 기존 PDF에서 페이지를 읽고 보고서 랩 캔버스에 그릴 수 있습니다(이미지 그리기와 유사).github의 pdfrw example/rl1 하위 디렉터리에는 이에 대한 예가 있습니다.고지 사항:저는 pdfrw 작가입니다.
cpdf는 명령줄에서 작업을 수행합니다.하지만 파이썬은 아닙니다. (afaik):
cpdf -add-text "Line of text" input.pdf -o output .pdf
위의 David Deghan의 답변을 활용하여 다음은 Python 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()
PyPDF2는 PdfFileReader, PdfFileWriter 및 기타 몇 가지 메서드를 평가절하하고 다른 이름과 메서드로 변경했으며 getPage()와 같은 메서드도 PdfReader의 속성으로 직접 변경했습니다.
다음은 기존 PDF 파일에 텍스트를 추가할 수 있는 매우 간단한 클래스입니다. (마지막에 사용법이 시연됩니다.)
from PyPDF2 import PdfWriter, PdfReader, Transformation
import io
from reportlab.pdfgen.canvas import Canvas
class GenerateFromTemplate:
def __init__(self,template):
self.template_pdf = PdfReader(open(template, "rb"))
self.template_page= self.template_pdf.pages[0]
self.packet = io.BytesIO()
self.c = Canvas(self.packet,pagesize=(self.template_page.mediabox.width,self.template_page.mediabox.height))
def addText(self,text,point):
self.c.drawString(point[0],point[1],text)
def merge(self):
self.c.save()
self.packet.seek(0)
result_pdf = PdfReader(self.packet)
result = result_pdf.pages[0]
self.output = PdfWriter()
op = Transformation().rotate(0).translate(tx=0, ty=0)
result.add_transformation(op)
self.template_page.merge_page(result)
self.output.add_page(self.template_page)
def generate(self,dest):
outputStream = open(dest,"wb")
self.output.write(outputStream)
outputStream.close()
"""
Use as:
gen = GenerateFromTemplate("template.pdf")
gen.addText("Hello!",(100,200))
gen.addText("PDF!",(100,300))
gen.merge()
gen.generate("Output.pdf")
"""
이게 도움이 되길 바랍니다.
mergePage를 사용하지 않습니다. 일부 pdfs에서 작동하지 않을 수 있습니다. mergeRotatedTranslatedPage를 사용해야 합니다.
from PyPDF2 import PdfFileWriter, PdfFileReader
import io
from reportlab.pdfgen.canvas import Canvas
page_to_merge = 0 #Refers to the First page of PDF
xcoor = 250 #To be changed according to your pdf
ycoor = 650 #To be changed according to your pdf
input_pdf = PdfFileReader(open("Source.pdf", "rb"))
page_count = input_pdf.getNumPages()
inputpdf_page_to_be_merged = input_pdf.getPage(page_to_merge)
packet = io.BytesIO()
c = Canvas(packet,pagesize=(inputpdf_page_to_be_merged.mediaBox.getWidth(),inputpdf_page_to_be_merged.mediaBox.getHeight()))
c.drawString(xcoor,ycoor,"Hello World")
c.save()
packet.seek(0)
overlay_pdf = PdfFileReader(packet)
overlay = overlay_pdf.getPage(0)
output = PdfFileWriter()
for PAGE in range(page_count):
if PAGE == page_to_merge:
inputpdf_page_to_be_merged.mergeRotatedTranslatedPage(overlay,
inputpdf_page_to_be_merged.get('/Rotate') or 0,
overlay.mediaBox.getWidth()/2, overlay.mediaBox.getWidth()/2)
output.addPage(inputpdf_page_to_be_merged)
else:
Page_in_pdf = input_pdf.getPage(PAGE)
output.addPage(Page_in_pdf)
outputStream = open("destination.pdf", "wb")
output.write(outputStream)
outputStream.close()
Windows(윈도우)를 사용하는 경우 다음과 같이 작동할 수 있습니다.
Python의 PDF 생성 및 편집 프레임워크에 대한 백서도 있습니다.약간 오래되었지만 유용한 정보를 제공할 수 있습니다.
문제를 PDF를 편집 가능한 형식으로 변환하고 변경 사항을 작성한 다음 PDF로 다시 변환하는 것이 더 좋은 운이 될 수 있습니다.PDF를 직접 편집할 수 있는 라이브러리는 모르겠지만 예를 들어 DOC와 PDF 간 변환기가 많습니다.
언급URL : https://stackoverflow.com/questions/1180115/add-text-to-existing-pdf-using-python
'programing' 카테고리의 다른 글
C에서 *와 &의 차이점은 무엇입니까? (0) | 2023.07.25 |
---|---|
런타임에 jQuery를 사용하여 CSS 규칙/클래스 만들기 (0) | 2023.07.25 |
파이썬의 요청 모듈을 사용하여 웹 사이트에 "로그인"하는 방법은 무엇입니까? (0) | 2023.07.20 |
두 개의 데이터 프레임을 병합하려고 하지만 ValueError를 가져옵니다. (0) | 2023.07.20 |
Python range()와 유사한 JavaScript 함수 (0) | 2023.07.20 |