使用Android中的iTextpdf将Conver HTML页面转换为PDF

时间:2015-09-03 10:58:57

标签: android pdf

您好我尝试使用iText库将HTML文件转换为PDF,但我测试的任何网址都有Exception! 请帮助!我试过谷歌和其他一些简单的网站,但总是得到这个例外 你知道更好的用于将HTML文件转换为PDF的库吗?

    package ir.whiteapp.pdfeshkon;



public class Main extends AppCompatActivity {
    public File dir;
    public static String result="not set";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        dir=new File(Environment.getExternalStorageDirectory(),"PDFeshKon");
        if(!dir.exists()){
            dir.mkdir();
        }
        new convert("test","http://whiteapp.ir",dir).execute();
        final ProgressDialog progressDialog=new ProgressDialog(Main.this);
        progressDialog.show();
        final Timer tm=new Timer();
        tm.schedule(new TimerTask() {
            @Override
            public void run() {
                if(!result.equals("not set")){
                    Toast.makeText(getApplicationContext(),"done!",Toast.LENGTH_SHORT).show();
                    result="not set";
                    progressDialog.dismiss();
                    tm.cancel();
                }
            }
        },1,500);
    }


}

class convert extends AsyncTask{
    String pdfFilename;
    String url;
    File dir;

    public convert(String pdfFilename, String url,File dir) {
        this.pdfFilename = pdfFilename;
        this.url = url;
        this.dir=dir;
    }

    @Override
    protected Object doInBackground(Object[] params) {
        try {
            //path for the PDF file to be generated
            File dir=new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS).getAbsolutePath(),"PDFeshKon");
            if(!dir.exists()){
                dir.mkdir();
                if(!dir.mkdir()){
                    Log.d("mkdir ","Ops!");
                }
            }
            String state = Environment.getExternalStorageState();
            if (Environment.MEDIA_MOUNTED.equals(state)) {
                Log.d("reach= ","true");
            }else {
                Log.d("reach= ","false");
            }
            String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS).getAbsolutePath()+"PDFeshKon/";
            PdfWriter pdfWriter = null;
            Log.d("level= ","1");
            //create a new document
            Document document = new Document();
            Log.d("level= ","2");

            try {
                pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(path));
                Log.d("level= ","3");

            } catch (DocumentException e) {
                e.printStackTrace();
            }

            document.addAuthor("whiteapp");
            document.addCreationDate();
            document.addProducer();
            document.addCreator("MySampleCode.com");
            document.addTitle("Demo for iText XMLWorker");
            document.setPageSize(PageSize.LETTER);
            Log.d("level= ", "4");

            document.open();
            Log.d("level= ", "5");

            URL myWebPage = new URL(url);
            InputStreamReader fis = new InputStreamReader(myWebPage.openStream());
            Log.d("level= ","6");

            XMLWorkerHelper worker = XMLWorkerHelper.getInstance();

            Log.d("level= ", "7");
            worker.parseXHtml(pdfWriter, document, fis);
            Log.d("level= ", "8");

            document.close();

            pdfWriter.close();
            Main.result="done";

        }

        catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }
}

logcat的:

    09-03 15:19:51.401    8600-8649/ir.whiteapp.pdfeshkon D/level=﹕ 6
09-03 15:19:51.402    8600-8649/ir.whiteapp.pdfeshkon D/level=﹕ 7
09-03 15:19:51.720    8600-8649/ir.whiteapp.pdfeshkon E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
    Process: ir.whiteapp.pdfeshkon, PID: 8600
    java.lang.RuntimeException: An error occured while executing doInBackground()
            at android.os.AsyncTask$3.done(AsyncTask.java:300)
            at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
            at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
            at java.util.concurrent.FutureTask.run(FutureTask.java:242)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:818)
     Caused by: com.itextpdf.tool.xml.exceptions.RuntimeWorkerException: Invalid nested tag head found, expected closing tag link.
            at com.itextpdf.tool.xml.XMLWorker.endElement(XMLWorker.java:135)

0 个答案:

没有答案