Android兼容库创建图像从pdf文件



是否有任何兼容的android库将pdf页面转换为图像?我找到了几个适合我需要的java库(pdfbox, jpod, jpedal, icepdf),但它们会给我带来编译错误(基于awT或swt)。我目前正在android上制作一个pdf阅读器,如果我不需要从头开始编写pdf解码,那就太好了。

你最好的选择是这个库:http://code.google.com/p/apv/

这是一个C项目,所以需要使用JNI来调用。

谢谢你的帮助。我检查了项目并使用了MuPDF库(APV项目基于此库)。它工作得很好!非常感谢,上帝保佑。

上面的答案没有一个对我有帮助,所以我在写我的解决方案。

使用这个库:android-pdfview和以下代码,您可以可靠地将PDF页面转换为图像(JPG, PNG):

DecodeServiceBase decodeService = new DecodeServiceBase(new PdfContext());
decodeService.setContentResolver(mContext.getContentResolver());
// a bit long running
decodeService.open(Uri.fromFile(pdf));
int pageCount = decodeService.getPageCount();
for (int i = 0; i < pageCount; i++) {
    PdfPage page = decodeService.getPage(i);
    RectF rectF = new RectF(0, 0, 1, 1);
    // do a fit center to 1920x1080
    double scaleBy = Math.min(AndroidUtils.PHOTO_WIDTH_PIXELS / (double) page.getWidth(), //
            AndroidUtils.PHOTO_HEIGHT_PIXELS / (double) page.getHeight());
    int with = (int) (page.getWidth() * scaleBy);
    int height = (int) (page.getHeight() * scaleBy);
    // you can change these values as you to zoom in/out
    // and even distort (scale without maintaining the aspect ratio)
    // the resulting images
    // Long running
    Bitmap bitmap = page.renderBitmap(with, height, rectF);
    try {
        File outputFile = new File(mOutputDir, System.currentTimeMillis() + FileUtils.DOT_JPEG);
        FileOutputStream outputStream = new FileOutputStream(outputFile);
        // a bit long running
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
        outputStream.close();
    } catch (IOException e) {
        LogWrapper.fatalError(e);
    }
}

你应该在后台完成这项工作,即通过使用AsyncTask或类似的东西,因为相当多的方法需要计算或IO时间(我已经在评论中标记了它们)。

使用itextpdf5.3.1.jar

下面是从pdf中提取图像的代码:
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);`enter code here`
    PdfReader reader;
    File file = new File("/sdcard/vineeth/anni.prc");
    try{
        reader = new PdfReader(file.getAbsolutePath());
        for (int i = 0; i < reader.getXrefSize(); i++) {
            PdfObject pdfobj= reader.getPdfObject(i);
            if (pdfobj == null || !pdfobj.isStream()) {
                continue;
            }
            PdfStream stream = (PdfStream) pdfobj;
            PdfObject pdfsubtype = stream.get(PdfName.SUBTYPE);
            if (pdfsubtype != null && pdfsubtype.toString().equals(PdfName.IMAGE.toString())) {
                byte[] img = PdfReader.getStreamBytesRaw((PRStream) stream);
                FileOutputStream out = new FileOutputStream(new 
                File(file.getParentFile(),String.format("%1$05d", i) + ".jpg"));
                out.write(img); out.flush(); out.close();
            }
        }
    } catch (Exception e) { }
}

最新更新