android PDF渲染问题

时间:2016-10-03 12:50:05

标签: android pdf

我正在使用APV库实现pdf查看器功能 当我使用我提到的APV库加载pdf文件时,页面的某些部分是不可见的,有时则不可见。 不可见的部分有时是段落,有时是图片等。我认为它不依赖于对象而是试验。 有没有人有类似的问题?如果有人知道,请告诉我。

我附有2张相同页面,一张正常,另一张异常的图片。

abnormal

normal

public class mPDFActivity extends PdfViewerActivity {

byte[] startSign = {0x31};
byte[] stopSign = {0x32};

public static boolean isPDFPageRunning = false; // bluetoothservice에서 이 activity로 신호 보낼 때 해당 변수 상태 보고 동작(page 넘김) 할지 말지 결정

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; }

public int getMenuOpenFile() {return R.drawable.openfile;}

public int getMenuScanBluetooth() {return R.drawable.ic_action_device_access_bluetooth_searching;}

public Handler PDFHandler;

mPDFActivity currentActivity;


@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    if(newConfig .orientation == newConfig.ORIENTATION_LANDSCAPE)
    {

    }else{

    }
}

@Override
public void onCreate(Bundle savedInstanceState) {
    isPDFPageRunning = true;
    super.onCreate(savedInstanceState);

    // Get local Bluetooth adapter
    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

    // If the adapter is null, then Bluetooth is not supported
    if (mBluetoothAdapter == null) {
        //FragmentActivity activity = getActivity();
        Toast.makeText(getApplicationContext(), "Bluetooth is not available", Toast.LENGTH_LONG).show();
        this.finish();
    }




    byte a[] = {(byte)0x01, (byte)0xff};
    if(a[1] == -1) {
        int re = Conversion.ByteArraytoInteger(a[0], a[1]);
    }
    Log.d(TAG,"KK");

}


@Override
protected void onPause() {
    super.onPause();
    SharedPreferences pref = getSharedPreferences("PDF",0);
    SharedPreferences.Editor edit = pref.edit();

    if(isAlreadyCreated)
    {

    }else{

    }
    edit.putFloat(Constants.ZOOM, mZoom);
    edit.putInt(Constants.PAGE, mPage);
    edit.commit();
}

@Override
protected void onResume() {
    isPDFPageRunning = true;
    super.onResume();

    float zoom;
    int page;
    SharedPreferences pref = getSharedPreferences(Constants.PDF, 0);
    zoom = pref.getFloat(Constants.ZOOM,1);
    page = pref.getInt(Constants.PAGE,1);

    if(!isAlreadyCreated){
    }
}

@Override
protected void onStop() {
    isPDFPageRunning = false;
    super.onStop();
}

@Override
protected void onDestroy() {
    isPDFPageRunning = false;
    super.onDestroy();
    mChatService.write(stopSign);

    if (mChatService != null) {
        mChatService.stop();
    }
}


private static final String TAG = "BluetoothChatFragment";

// Intent request codes
private static final int REQUEST_CONNECT_DEVICE_SECURE = 1;
private static final int REQUEST_CONNECT_DEVICE_INSECURE = 2;
private static final int REQUEST_ENABLE_BT = 3;

// Layout Views
private ListView mConversationView;
private EditText mOutEditText;
private Button mSendButton;

/**
 * Name of the connected device
 */
private String mConnectedDeviceName = null;
/**
 * String buffer for outgoing messages
 */
private StringBuffer mOutStringBuffer;

/**
 * Local Bluetooth adapter
 */
private BluetoothAdapter mBluetoothAdapter = null;

/**
 * Member object for the chat services
 */
//public BluetoothChatService mChatService = null;
public BluetoothChatService mChatService = null;

ArrayAdapter adapter;
int clickCounter=0;
ArrayList listItems=new ArrayList();
private File[] imagelist;
String[] pdflist;



@Override
public void onStart() {
    super.onStart();
    // If BT is not on, request that it be enabled.
    // setupChat() will then be called during onActivityResult
    if (!mBluetoothAdapter.isEnabled()) {
        Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
        // Otherwise, setup the chat session
    } else if (mChatService == null) {
        setupChat();
    }
}

private void setupChat() {
    mChatService = new BluetoothChatService(this, mHandler);

    // Initialize the buffer for outgoing messages
    mOutStringBuffer = new StringBuffer("");
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case REQUEST_CONNECT_DEVICE_SECURE:
            // When DeviceListActivity returns with a device to connect
            if (resultCode == Activity.RESULT_OK) {
                connectDevice(data, true);
                //setupChat();
            }
            break;
        case REQUEST_CONNECT_DEVICE_INSECURE:
            // When DeviceListActivity returns with a device to connect
            if (resultCode == Activity.RESULT_OK) {
                connectDevice(data, false);
            }
            break;
        case REQUEST_ENABLE_BT:
            // When the request to enable Bluetooth returns
            if (resultCode == Activity.RESULT_OK) {
                // Bluetooth is now enabled, so set up a chat session

                setupChat();
            } else {
                // User did not enable Bluetooth or an error occurred
                Log.d(TAG, "BT not enabled");
                Toast.makeText(this, R.string.bt_not_enabled_leaving,
                        Toast.LENGTH_SHORT).show();
                this.finish();
            }
    }
}

private final Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        //Activity activity = getApplicationContext();
        switch (msg.what) {
            case Constants.MESSAGE_STATE_CHANGE:
                switch (msg.arg1) {
                    case BluetoothChatService.STATE_CONNECTED:
                        setStatus(getString(R.string.title_connected_to, mConnectedDeviceName));

                        break;
                    case BluetoothChatService.STATE_CONNECTING:
                        setStatus(getString(R.string.title_connecting));
                        break;
                    case BluetoothChatService.STATE_LISTEN:
                    case BluetoothChatService.STATE_NONE:
                        setStatus(getString(R.string.title_not_connected));
                        break;
                }
                break;
            case Constants.MESSAGE_WRITE:
                byte[] writeBuf = (byte[]) msg.obj;

                // construct a string from the buffer
                String writeMessage = new String(writeBuf);

                break;
            case Constants.MESSAGE_READ:

                /*
                byte[] readBuf = (byte[]) msg.obj;
                // construct a string from the valid bytes in the buffer
                String readMessage = new String(readBuf, 0, msg.what);
                //Log.i(TAG,readMessage);
                //mConversationArrayAdapter.add(mConnectedDeviceName + ":  " + readMessage);

                int bytes = msg.arg1; // length of read bytes array
                String str =  Conversion.byteArraytoHexString(readBuf).substring(0, bytes * 2);
                str = str.substring(str.indexOf("ff"));
                while(str.length() >= 10)
                {

                    String datA = str.substring(2,5);
                    String datB = str.substring(6,9);

                    int dat1 = Conversion.hexStringtoInteger(datA);
                    int dat2 = Conversion.hexStringtoInteger(datB);
                    //TODO: 데이터 저장 및 신호처리

                    str = str.substring(10);
                }


                Log.e("READ","READ : " + str);
                */

                //TODO : mPDFActivity로 메시지에 따른 intent 날려
                break;
            case Constants.MESSAGE_DEVICE_NAME:
                // save the connected device's name
                mConnectedDeviceName = msg.getData().getString(Constants.DEVICE_NAME);
                if (mPDFActivity.this != null) {
                    Toast.makeText(mPDFActivity.this, "Connected to "
                            + mConnectedDeviceName, Toast.LENGTH_SHORT).show();
                    mChatService.write(startSign);
                }
                break;
            case Constants.MESSAGE_TOAST:
                if (mPDFActivity.this != null) {
                    Toast.makeText(mPDFActivity.this, msg.getData().getString(Constants.TOAST),
                            Toast.LENGTH_SHORT).show();
                }
                break;

            case Constants.MESSAGE_PREV_PAGE:

                prevPage();
                break;
            case Constants.MESSAGE_NEXT_PAGE:
                nextPage();
                break;

            case Constants.MESSAGE_VIBRATE:
                Vibrator vb = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
                int duration = msg.getData().getInt(Constants.VIBRATE);
                vb.vibrate(duration);
                break;
        }
    }
};

/**
 * Establish connection with other divice
 *
 * @param data   An {@link Intent} with {@link DeviceListActivity#EXTRA_DEVICE_ADDRESS} extra.
 * @param secure Socket Security type - Secure (true) , Insecure (false)
 */
private void connectDevice(Intent data, boolean secure) {
    // Get the device MAC address
    String address = data.getExtras()
            .getString(DeviceListActivity.EXTRA_DEVICE_ADDRESS);
    // Get the BluetoothDevice object
    BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
    // Attempt to connect to the device
    mChatService.connect(device, secure);
}

/**
 * Updates the status on the action bar.
 *
 * @param subTitle status
 */
private void setStatus(CharSequence subTitle) {
    Activity activity = this;
    if (null == activity) {
        return;
    }
    final ActionBar actionBar = activity.getActionBar();
    if (null == actionBar) {
        return;
    }
    actionBar.setSubtitle(subTitle);
}

}

0 个答案:

没有答案