我有一个使用 pdf2Image 的自定义 python 脚本,我试图在安卓手机上运行。我试过这两种方法
- 使用可以在 android 上运行 python 脚本的 android 应用程序。
- 创建一个 android 应用程序并集成我的 python 代码(使用chaquopy)。
但在这两种情况下,我都得到
W/System.err: com.chaquo.python.PyException: PDFInfoNotInstalledError: Unable to get page count. Is poppler installed and in PATH?
我的脚本在 ubuntu 终端上无缝运行(使用python <scriptFileName.py>
)但是当我尝试在 android 上执行时,它给了我上述问题
我的麻烦是我无法理解如何安装 poppler,或者将其添加到 android 中的 PATH 中。
以下是将 PDF 转换为 JPEG 图像的脚本(模块名称 = pdf2Img.py):
from pdf2image import convert_from_bytes
import sys
import os
import shutil
import io
def extractImagesFromPdf(fileContents):
BASE_DIR = 'in_pdfs'
EXTENSION = '.pdf'
OUT_DIR = 'images'
IMG_EXT = '.jpg'
sep = "/"
if not os.path.exists(getDirectoryPath(BASE_DIR)):
os.mkdir(getDirectoryPath(BASE_DIR))
pages = convert_from_bytes(fileContents)
if os.path.exists(getDirectoryPath(OUT_DIR)):
shutil.rmtree(getDirectoryPath(OUT_DIR))
os.mkdir(getDirectoryPath(OUT_DIR))
page_num = 1
for page in pages:
page.save(getDirectoryPath(OUT_DIR) + sep + str(page_num) + IMG_EXT, 'JPEG')
page_num = page_num + 1
def getDirectoryPath(dir):
base_path = os.path.dirname(__file__)
return base_path + "/" + dir
这就是我调用它的方式
public class MainActivity extends AppCompatActivity {
private static final int PICK_PDF_FILE = 2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void selectAndUploadFile(View view) {
Intent intent= new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("application/pdf");
startActivityForResult(intent, PICK_PDF_FILE);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
super.onActivityResult(requestCode, resultCode, resultData);
if (requestCode == PICK_PDF_FILE
&& resultCode == Activity.RESULT_OK) {
Uri inPDF = null;
if (resultData != null) {
inPDF = resultData.getData();
Log.i("SelectAndUpload", "onActivityResult: " + inPDF);
if (!Python.isStarted()) {
Python.start(new AndroidPlatform(MainActivity.this));
}
Python py = Python.getInstance();
PyObject module = py.getModule("pdf2Img");
try {
InputStream iStream = getContentResolver().openInputStream(inPDF);
byte[] inputData = getBytes(iStream);
PyObject result = module.callAttr("extractImagesFromPDF", inputData);
} catch (Exception e) {
Log.i("Ex", "Exception!!!");
e.printStackTrace();
Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
}
}
}
}
public byte[] getBytes(InputStream inputStream) throws IOException {
ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
byteBuffer.write(buffer, 0, len);
}
return byteBuffer.toByteArray();
}
}
错误即将到来
pages = convert_from_path(BASE_DIR + sep + fileName + EXTENSION)
几个参考: