如何使用PDFTron将PDF转换为JPG

时间:2016-05-03 03:03:47

标签: android pdftron

我的目标是将我的可填写pdf文档转换为图像,然后将其保存到Kumulos上的数据库中。我在使用PDFTron转换pdf文档时遇到问题。我得到的错误是该文件不存在。但是,我可以拉取文件并在应用程序中查看它。

switch (Global.g){
        case 1:
            InputStream is = res.openRawResource(R.raw.incident_report);
            try{
                doc = new PDFDoc(is);
            }catch (PDFNetException e){
                doc = null;
                e.printStackTrace();
            }catch (IOException e){
                doc = null;
                e.printStackTrace();
            }
            try {
                mPDFViewCtrl.setDoc(doc);
                save_Button.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        try{
                            String output_path = "../../raw/Output/";

                            PDFDraw draw=new PDFDraw();  // PDFDraw class is used to rasterize PDF pages.
                            ObjSet hint_set=new ObjSet();

                            PDFDoc doc=new PDFDoc((mPDFViewCtrl + "incident_report.pdf"));
                            // Initialize the security handler, in case the PDF is encrypted.
                            doc.initSecurityHandler();

                            draw.setDPI(72); // Set the output resolution is to 72 DPI.

                            // Use optional encoder parameter to specify JPEG quality.
                            Obj encoder_param=hint_set.createDict();
                            encoder_param.putNumber("Quality", 80);

                            // Traverse all pages in the document.
                            for (PageIterator itr=doc.getPageIterator(); itr.hasNext();) {
                                Page current=(Page)(itr.next());
                                String filename=output_path+"incident_report"+current.getIndex() + ".jpg";
                                System.out.println(filename);
                                draw.export(current, filename, "JPEG", encoder_param);
                            }

                            doc.close();

                        }catch(PDFNetException e){
                            e.printStackTrace();
                        }
                        finish();
                    }
                });

                cancel_Button.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        finish();
                    }
                });
            } catch (PDFNetException e) {
                e.printStackTrace();
            }
            break;

1 个答案:

答案 0 :(得分:0)

以下行看起来不正确。

PDFDoc doc=new PDFDoc((mPDFViewCtrl + "incident_report.pdf"));

应该只是

PDFDoc doc=mPDFViewCtrl.getDoc();

这应该可以解决您无法读取的错误。

查看您的代码,但还有许多其他问题。

  1. 您没有在第一个PDFDoc对象上调用initSecurityHandler
  2. 您应该获取一个读锁定,因为您正在访问PDFViewCtrl类之外的文档(它不知道您正在这样做)。在这种特殊情况下,您可能没有,因为您没有修改文档,但最好是获取读锁定。
  3. 这是更正后的代码

    InputStream is = res.openRawResource(R.raw.incident_report);
    try{
        doc = new PDFDoc(is);
        doc.initSecurityHandler(); // handle passwordless but encrypted files
    }catch (PDFNetException e){
        doc = null;
        e.printStackTrace();
    }catch (IOException e){
        doc = null;
        e.printStackTrace();
    }
    try {
        mPDFViewCtrl.setDoc(doc);
        save_Button.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View v) {
                try{
                    String output_path = "../../raw/Output/";
                    PDFDraw draw=new PDFDraw();
                    draw.setDPI(72);
                    ObjSet hint_set=new ObjSet();
                    Obj encoder_param=hint_set.createDict();
                    encoder_param.putNumber("Quality", 80);
    
                    // Get PDF being viewed and get read lock
                    PDFDoc doc=mPDFViewCtrl.getDoc();
                    mPDFViewCtrl.docLockRead();
    
                    for (PageIterator itr=doc.getPageIterator(); itr.hasNext();) {
                        Page current=(Page)(itr.next());
                        String filename=output_path+"incident_report"+current.getIndex() + ".jpg";
                        System.out.println(filename);
                        draw.export(current, filename, "JPEG", encoder_param);
                    }
                }catch(PDFNetException e){
                    e.printStackTrace();
                }finally {
                    mPDFViewCtrl.docUnlockRead(); // release read lock
                }
                finish();
            }
        });
    
        cancel_Button.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View v) {
                finish();
            }
        });
    } catch (PDFNetException e) {
        e.printStackTrace();
    }