#python #r #reticulate
#питон #r #сетчатый
Вопрос:
Я попытался запустить этот скрипт python в R Studio в скрипте python, каким-то образом он просто берет второй PDF-файл «path2.pdf» и обрезает этот, а не первый. Если я изменяю порядок переменной files, она обрезает «path1.pdf». С ноутбуками Jupyter все работает так, как и ожидалось. Кто-нибудь может помочь?
import PyPDF2
from PyPDF2 import PdfFileReader, PdfFileWriter
files = ["path1.pdf" , "path2.pdf"]
# crop all pdfs in folder
for filepath in files:
pdfFileObj = open(filepath, 'rb')
# read the pdf object
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
# create pdf writer object
writerObj = PdfFileWriter()
page = pdfReader.getPage(0)
print(page.cropBox.getLowerLeft())
print(page.cropBox.getLowerRight())
print(page.cropBox.getUpperLeft())
print(page.cropBox.getUpperRight())
page.cropBox.setLowerLeft((31, 20))
page.cropBox.setLowerRight((190, 20))
page.cropBox.setUpperLeft((31, 95))
page.cropBox.setUpperRight((190, 95))
# Write the new page
writerObj.addPage(page)
# Create an output pdf
outstream = open(filepath, 'wb')
writerObj.write(outstream)
outstream.close()
Ответ №1:
Я не знаю точно почему, но, похоже, это работает, когда я создаю функцию python, а затем запускаю из R, как показано ниже:
# python script
# python_function
def crop_top5(files):
import PyPDF2
from PyPDF2 import PdfFileReader, PdfFileWriter
for filepath in files:
pdfFileObj = open(filepath, 'rb')
# read the pdf object
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
# create pdf writer object
writerObj = PdfFileWriter()
page = pdfReader.getPage(0)
print(page.cropBox.getLowerLeft())
print(page.cropBox.getLowerRight())
print(page.cropBox.getUpperLeft())
print(page.cropBox.getUpperRight())
page.cropBox.setLowerLeft((31, 20))
page.cropBox.setLowerRight((190, 20))
page.cropBox.setUpperLeft((31, 95))
page.cropBox.setUpperRight((190, 95))
# Write the new page
writerObj.addPage(page)
# Create an output pdf
outstream = open(filepath, 'wb')
writerObj.write(outstream)
outstream.close()
Теперь я запускаю это в R:
files = c("path1.pdf" , "path2.pdf")
source_python("python_function.py")
crop_top5(files)