хороший способ создания PDF в автономном режиме на устройстве Android ... попробовал DOCX4J
Есть ли хороший способ для создания PDF-документа на устройстве Android? У меня есть файл DOCX в качестве базы.
Я знаю, что это возможно: здесь очень хорошее приложениеhttps://play.google.com/store/apps/details?id=cn.wps.moffice_eng
они делают это в автономном режиме.
некоторые идеи?
Я уже попробовал DOCX4J, и он правильно генерирует файл DOCX, как бы то ни было, используя
WordprocessingMLPackage wordMLPackage
чтобы подготовить PDF, он говорит:
E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.ExceptionInInitializerError
at org.plutext.DocxToHtml.AndroidDocxToHtmlActivity$1.onClick(AndroidDocxToHtmlActivity.java:215)
at android.view.View.performClick(View.java:4209)
at android.view.View$PerformClick.run(View.java:17431)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:153)
at android.app.ActivityThread.main(ActivityThread.java:5297)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at **org.docx4j.utils.ResourceUtils.getResource(ResourceUtils.java:45)
at org.docx4j.convert.out.pdf.viaXSLFO.Conversion.<clinit>(Conversion.java:101)**
at org.plutext.DocxToHtml.AndroidDocxToHtmlActivity$1.onClick(AndroidDocxToHtmlActivity.java:215)
at android.view.View.performClick(View.java:4209)
at android.view.View$PerformClick.run(View.java:17431)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:153)
at android.app.ActivityThread.main(ActivityThread.java:5297)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
Это код, который я использовал:
// 2) Prepare Pdf settings
PdfSettings pdfSettings = new PdfSettings();
pdfSettings.setImageHandler(new ConversionImageHandler() {
@Override
public String handleImage(AbstractWordXmlPicture abstractWordXmlPicture, Relationship relationship, BinaryPart binaryPart) throws Docx4JException {
return null;
}
});
// 3) Convert WordprocessingMLPackage to Pdf
OutputStream out = new FileOutputStream(pdffile);
PdfConversion converter = new org.docx4j.convert.out.pdf.viaXSLFO.Conversion(
wordMLPackage);
converter.output(out, pdfSettings);
Log.e("AndroidDocxToHtml", " PDF save done");
РЕДАКТИРОВАТЬ ОБНОВЛЕНИЕ:
Оказалось, что docx2fo.xslt не было в библиотеке по адресу org \ docx4j \ convert \ out \ pdf \ viaXSLFO \, вставив этот файл в JAR, который я сейчас получаю:
java.lang.NoClassDefFoundError: org.apache.fop.apps.FopFactory
at org.docx4j.convert.out.pdf.viaXSLFO.Conversion.output(Conversion.java:231)
что это за строка:
FopFactory fopFactory = FopFactory.newInstance();
и этот импорт:
import org.apache.fop.apps.FopFactory;
которая кажется серьезной проблемой на Android, смотритеВот
РЕДАКТИРОВАТЬ ОБНОВЛЕНИЕ 2
просто чтобы быть завершенным: добавление fop.jar, содержащего FopFactory, дает следующую ошибку:java.lang.NoSuchMethodError: org.apache.fop.apps.FopFactory.newInstance
Любые предложения приветствуются.