Android совместимая библиотека для создания изображений из PDF-файла? - PullRequest
0 голосов
/ 06 апреля 2011

Существует ли совместимая библиотека Android для преобразования страницы PDF в изображение?Я нашел несколько библиотек java (pdfbox, jpod, jpedal, icepdf), соответствующих моим потребностям, но они дают мне ошибки компиляции (основанные на awT или swt).В настоящее время я делаю просмотрщик PDF на Android, я был бы хорош, если бы мне не пришлось писать декодирование PDF с нуля.

Ответы [ 4 ]

4 голосов
/ 06 апреля 2011

Ваша лучшая ставка в этой библиотеке: http://code.google.com/p/apv/

Это проект на C, поэтому вам нужно вызывать его с помощью JNI.

1 голос
/ 14 января 2016

Ни один из приведенных выше ответов не помог мне, поэтому я пишу свое решение.

Используя эту библиотеку: 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 или что-то подобное, так как довольно много методов требуют вычислений или времени ввода-вывода (я отметил их в комментариях).

1 голос
/ 07 апреля 2011

Спасибо за помощь. Я проверил проект и использовал библиотеку MuPDF (на которой основан проект APV). Работает отлично! Большое спасибо и благослови Бог.

0 голосов
/ 17 августа 2012

Использовать 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) { }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...