是否有任何兼容的android库将pdf页面转换为图像?我找到了几个符合我需求的java库(pdfbox,jpod,jpedal,icepdf),但是它们给了我编译错误(基于awT或swt)。我目前正在android上制作一个pdf查看器,如果我不必从头开始编写pdf解码,我会很棒的。
答案 0 :(得分:4)
你最好的选择是这个图书馆:http://code.google.com/p/apv/
这是一个C项目,因此您需要使用JNI调用。
答案 1 :(得分:1)
感谢您的帮助。我检查了项目并使用了MuPDF库(APV项目所基于的库)。它工作正常!非常感谢,上帝保佑。
答案 2 :(得分:1)
上述答案都没有帮助我,所以我正在编写我的解决方案。
使用此库:this Q&A和以下代码,您可以可靠地将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时间(我在评论中标记了它们)。
答案 3 :(得分:0)
使用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) { }
}