0

アプリケーションが pdf 内の画像を読み込んでおらず、画像を含む pdf 内のページを読み込むたびにエラーが発生します。

これは LogCat です。

06-29 11:07:29.900: E/APV.PDFRenderer(468): image with unsupported colorspace ColorSpace[CMYK]
06-29 11:07:29.900: E/APV.PDFRenderer(468): java.lang.UnsupportedOperationException: image with unsupported colorspace ColorSpace[CMYK]
06-29 11:07:29.900: E/APV.PDFRenderer(468):     at com.sun.pdfview.PDFImage.parseData(PDFImage.java:319)
06-29 11:07:29.900: E/APV.PDFRenderer(468):     at com.sun.pdfview.PDFImage.getImage(PDFImage.java:225)
06-29 11:07:29.900: E/APV.PDFRenderer(468):     at com.sun.pdfview.PDFRenderer.drawImage(PDFRenderer.java:374)
06-29 11:07:29.900: E/APV.PDFRenderer(468):     at com.sun.pdfview.PDFImageCmd.execute(PDFPage.java:654)
06-29 11:07:29.900: E/APV.PDFRenderer(468):     at com.sun.pdfview.PDFRenderer.iterate(PDFRenderer.java:674)
06-29 11:07:29.900: E/APV.PDFRenderer(468):     at com.sun.pdfview.BaseWatchable.run(BaseWatchable.java:101)
06-29 11:07:29.900: E/APV.PDFRenderer(468):     at com.sun.pdfview.BaseWatchable.execute(BaseWatchable.java:263)
06-29 11:07:29.900: E/APV.PDFRenderer(468):     at com.sun.pdfview.BaseWatchable.go(BaseWatchable.java:197)
06-29 11:07:29.900: E/APV.PDFRenderer(468):     at com.sun.pdfview.PDFPage.getImage(PDFPage.java:237)
06-29 11:07:29.900: E/APV.PDFRenderer(468):     at net.sf.andpdf.pdfviewer.PdfViewerActivity.showPage(PdfViewerActivity.java:790)
06-29 11:07:29.900: E/APV.PDFRenderer(468):     at net.sf.andpdf.pdfviewer.PdfViewerActivity.access$12(PdfViewerActivity.java:769)
06-29 11:07:29.900: E/APV.PDFRenderer(468):     at net.sf.andpdf.pdfviewer.PdfViewerActivity$3.run(PdfViewerActivity.java:259)
06-29 11:07:29.900: E/APV.PDFRenderer(468):     at java.lang.Thread.run(Thread.java:1096)

このコード:

First.java

package android.pdf.reader;

import java.io.File;
import java.io.FilenameFilter;

import net.sf.andpdf.pdfviewer.PdfViewerActivity;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class First extends ListActivity {
    String LOGTAG="";
    String[] pdflist;
    File[] imagelist;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.main);

        File images = Environment.getExternalStorageDirectory();
        imagelist = images.listFiles(new FilenameFilter() {
            public boolean accept(File dir, String name) {
                return ((name.endsWith(".pdf")));
            }
        });
        pdflist = new String[imagelist.length];
        for (int i = 0; i < imagelist.length; i++) {
            Log.e(LOGTAG,imagelist[i].getName());
            pdflist[i] = imagelist[i].getName();
        }
        this.setListAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, pdflist));
    }

    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        String path = imagelist[(int) id].getAbsolutePath();
        Log.d(LOGTAG,path);
        openPdfIntent(path);
    }

    private void openPdfIntent(String path) {
        try {
            final Intent intent = new Intent(First.this,Second.class);
            intent.putExtra(PdfViewerActivity.EXTRA_PDFFILENAME, path);
            startActivity(intent);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Second.java

package android.pdf.reader;

import net.sf.andpdf.pdfviewer.PdfViewerActivity;
import android.os.Bundle;

public class Second extends PdfViewerActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
    }

    public int getPreviousPageImageResource() {
        return R.drawable.left_arrow;
    }

    public int getNextPageImageResource() {
        return R.drawable.right_arrow;
    }

    public int getZoomInImageResource() {
        return R.drawable.zoom_in;
    }

    public int getZoomOutImageResource() {
        return R.drawable.zoom_out;
    }

    public int getPdfPasswordLayoutResource() {
        return R.layout.pdf_file_password;
    }

    public int getPdfPageNumberResource() {
        return R.layout.dialog_pagenumber;
    }

    public int getPdfPasswordEditField() {
        return R.id.etPassword;
    }

    public int getPdfPasswordOkButton() {
        return R.id.btOK;
    }

    public int getPdfPasswordExitButton() {
        return R.id.btExit;
    }

    public int getPdfPageNumberEditField() {
        return R.id.pagenum_edit;
    }
}

マニフェスト

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="android.pdf.reader"
    android:versionCode="1"
    android:versionName="1.0" >

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".First"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".Second"
            android:label="@string/app_name" >
        </activity>
    </application>
    <uses-sdk android:minSdkVersion="8" />
</manifest>

助言がありますか?

ありがとう

4

1 に答える 1

2

PDF ファイルの画像は CMYK で、別の色空間 (おそらく RGB) で読み取ろうとしています。

あなたのログはCMYKがサポートされていないと言っていますが、pdfViewerにはCMYKColorSpaceと呼ばれるクラスがあるので、それが役立つかもしれません.

コードを投稿していただければ、さらにお役に立てるかもしれません。

編集:

私が読んでいたドキュメントは、実際には元のライブラリ com.sun.pdfview のものでした (私の悪い!)

andpdfのドキュメントには、次のように記載されています。

「このプロジェクトは、AWT を使用する SUN の pdf レンダラーのポートです。残念ながら、AWT は Android でサポートされていないため、最初に行うことは、AWT オブジェクトを Android グラフィック オブジェクトにマッピングすることでした」.

リンクをたどると、Image と ColorSpace がまだマッピングされていないことがわかります。したがって、CMYK はまだサポートされていません。

于 2012-06-29T12:21:02.347 に答える