를 사용하여 렌더링 :어떻게 인터넷에서 PDF 파일을 다운로드하고 난 다음 코드를 사용하여 PDF 파일을 다운로드하려고 PdfRenderer
try {
URL url = new URL(urls[0]);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.connect();
if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
return "Server returned HTTP " + conn.getResponseCode() + " "
+ conn.getResponseMessage();
}
//Useful to display progress
int fileLength = conn.getContentLength();
//Download the mFile
InputStream input = new BufferedInputStream(conn.getInputStream());
//Create a temp file cf. https://developer.android.com/training/data-storage/files.html
// mFile = File.createTempFile(FILENAME, "pdf", mContext.getCacheDir());
mFile = new File(getFilesDir(), "temp.pdf");
FileOutputStream fos = openFileOutput("temp.pdf",MODE_PRIVATE);
byte[] buffer = new byte[10240];
long total = 0;
int count;
while ((count = input.read(buffer)) != -1) {
if (isCancelled()) {
input.close();
return null;
}
total += count;
//Publish the progress
if (fileLength > 0) {
publishProgress((int) (total * 100/fileLength));
}
fos.write(buffer);
}
Log.i(LOG_TAG, "File path: " + mFile.getPath());
fos.flush();
fos.close();
input.close();
} catch (IOException e) {
e.printStackTrace();
}
다음, 나는 PdfRenderer를 사용하여 다운로드 한 파일을 렌더링 할 수 있습니다. 위의 코드를 사용하여 만든 File 객체를 PdfRenderer 클래스의 ParcelFileDescriptor.open()에 전달할 때마다 예외 : PDF 형식 또는 파일 형식이 아닌 파일이 나타납니다.
mFileDescriptor = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
// This is the PdfRenderer we use to render the PDF.
mPdfRenderer = new PdfRenderer(mFileDescriptor);
가 어떻게이 문제를 해결 할 수 있습니다
렌더링 코드는 PdfRenderer를 생성하기 위해 수신 된 파일 개체에 다음과 같은합니까? createTempFile 및 많은 StackOverFlow 게시물을 사용하여 임시 파일을 만드는 것과 같은 많은 옵션을 시도했지만 모두 시도하지 못했습니다. 아무도 내 문제가 무엇에 의해 발생하는지 알 수 있습니까?
나는 MuPDF를 시도하는 것이 좋습니다. 이것은 제 의견입니다. 필자가 마지막으로 PDF 렌더러를 사용했을 때, 일부 파일과 큰 파일에서도 이상한 문제가 발생했지만, MuPDF를 사용하면 매우 좋았습니다. –
먼저 'PdfRenderer'는 임의의 PDF 파일을 렌더링 할 수 없습니다. 인쇄 미리보기 전용입니다. 'FileProvider'를 사용하여 사용자가 원하는 PDF 리더에서 문서를 볼 수있게하십시오. 또는 [기타 PDF 렌더링 옵션] (https://commonsware.com/blog/2017/01/04/options-viewing-pdfs.html)을 사용하십시오. 그 외에도'mFile'으로 식별 된'File'으로 다운로드하고 있지만'ParcelFileDescriptor.open()'호출은'file'을 사용하고 있습니다. 아마도'mFile'과'file'은 같은 지점을 가리키고 있지 않습니다. – CommonsWare
@CoolGuyCG NDP로 MuPDF를 컴파일 했습니까? 내가 볼 수있는 한 MuPDF 소스 코드를 Android 앱에 적용하는 데 많은 노력이 있습니다. 내가 잘못? – JasonStack