Для зацикливания и обрезки PDF-файлов в сетчатом формате не работает

#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)