我必须在项目中实现PDF查看器库我正在关注https://github.com/bhavyahmehta/Pdf-Reader---Writer/blob/master/Pdf_%20Reader_Writer/README.md 在此示例中,他们正在创建PDF并在查看器中加载。 实际上我理解了库的工作方式以下是从库中创建和加载PDF的以下代码片段:
@Override
protected Void doInBackground(Void... params)
{
String pdfcontent = generateHelloWorldPDF(); //generating pdf content
outputToFile("PdfSample.pdf",pdfcontent,"ISO-8859-1"); //passing pdf name and content
return null;
}
private String generateHelloWorldPDF()
{ //function returns pdf content with pages
PDFWriter mPDFWriter = new PDFWriter(PaperSize.FOLIO_WIDTH, PaperSize.FOLIO_HEIGHT);
try {
// all image formates are supported
Bitmap i1 = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
mPDFWriter.addImage(40, 60, i1, Transformation.DEGREES_315_ROTATION);
mPDFWriter.addImage(72, 72, i1);
mPDFWriter.addImage(200, 400, 135, 75, i1);
mPDFWriter.addImage(150, 300, 130, 70, i1);
mPDFWriter.addImageKeepRatio(100, 200, 50, 25, i1);
mPDFWriter.addImageKeepRatio(50, 100, 30, 25, i1, Transformation.DEGREES_270_ROTATION);
mPDFWriter.addImageKeepRatio(25, 50, 30, 25, i1);
} catch (Exception e) {
e.printStackTrace();
}
mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.TIMES_ROMAN);
mPDFWriter.addRawContent("row content \n");
mPDFWriter.addText(70, 50, 12, "hello world");
mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.COURIER, StandardFonts.WIN_ANSI_ENCODING);
mPDFWriter.addRawContent("row content rg\n");
mPDFWriter.addText(30, 90, 10, "� CRL", Transformation.DEGREES_270_ROTATION);
mPDFWriter.newPage();
mPDFWriter.addRawContent("[] 0 d\n");
mPDFWriter.addRawContent("1 w\n");
mPDFWriter.addRawContent("0 0 1 RG\n");
mPDFWriter.addRawContent("0 1 0 rg\n");
mPDFWriter.addRectangle(40, 50, 280, 50);
mPDFWriter.addText(85, 75, 18, "Android Docs");
mPDFWriter.newPage();
mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.COURIER_BOLD);
// mPDFWriter.addText(150, 150, 14, "http://coderesearchlabs.com");
mPDFWriter.addLine(150, 140, 300, 140);
String s = mPDFWriter.asString();
return s;
}
private void outputToFile(String fileName, String pdfContent, String encoding) { //function which pushes the file to below path
//System.out.println("content" +fileName);
if(isSDPresent)
{
try {
File dir = new File(Environment.getExternalStorageDirectory() + "/pdf_Writer_Reader/");
if (!dir.exists())
{
dir.mkdirs();
}
newFile = new File(dir,fileName);
if(!newFile.exists())
{
newFile.createNewFile();
}
try
{
FileOutputStream pdfFile = new FileOutputStream(newFile);
pdfFile.write(pdfContent.getBytes(encoding));
pdfFile.close();
}
catch(FileNotFoundException e) {
Log.e("Ex==",""+e.toString());
}
}
catch(IOException e)
{
Log.e("Ex==",""+e.toString());
}
}
任何人都可以建议如何从SD卡加载PDF,任何帮助都会感激不尽。
答案 0 :(得分:0)
您在GitHub上提到的项目基于MuPDF库。在同一个GitHub项目中,您有一个在活动中读取pdf的示例 - MuPDFActivity活动中读取PDF的部分位于开头 -
private MuPDFCore openFile(String path)
{
int lastSlashPos = path.lastIndexOf('/');
mFileName = new String(lastSlashPos == -1? path : path.substring(lastSlashPos+1));
System.out.println("Trying to open "+path);
try
{
core = new MuPDFCore(path);
// New file: drop the old outline data
OutlineActivityData.set(null);
}
catch (Exception e)
{
System.out.println(e);
return null;
}
return core;
}
使用您调用的MuPDFCore实例
public static native void drawPage(Bitmap bitmap, int pageW, int pageH,
int patchX, int patchY,
int patchW, int patchH);
在位图上写入特定页面。要了解更多信息,请检查具有工作示例的项目以显示pdfs。
答案 1 :(得分:0)
//注释你的openFile(String path)函数并替换下面的代码......
private MuPDFCore openFile()
{
String storageState = Environment.getExternalStorageState();
File path, file;
MuPDFCore core;
if (Environment.MEDIA_MOUNTED.equals(storageState))
{
System.out.println("Media mounted read/write");
}
else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(storageState))
{
System.out.println("Media mounted read only");
}
else
{
System.out.println("No media at all! Bale!\n");
return null;
}
path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
file = new File(path, "TheAccidentalBully.pdf");
System.out.println("Trying to open "+file.toString());
try
{
core = new MuPDFCore(file.toString());
}
catch (Exception e)
{
System.out.println(e);
return null;
}
return core;
}
and onCreate
if (core == null) {
Intent intent = getIntent();
if (Intent.ACTION_VIEW.equals(intent.getAction())) {
core = openFile();
SearchTaskResult.set(null);
}