您好我尝试使用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)