android开发分享如何在Android应用程序中创buildPDF?

有什么办法从Android应用程序创buildPDF文件?

    如果有人想在Android设备上生成PDF,请按照以下步骤操作:

    如果您正在开发API级别为19或更高的设备,则可以使用内置的PrintedPdfDocument: http : //developer.android.com/reference/android/print/pdf/PrintedPdfDocument.html

    // open a new document PrintedPdfDocument document = new PrintedPdfDocument(context, printAttributes); // start a page Page page = document.startPage(0); // draw something on the page View content = getContentView(); content.draw(page.getCanvas()); // finish the page document.finishPage(page); . . . // add more pages . . . // write the document content document.writeTo(getOutputStream()); //close the document document.close(); 

    制作具有复杂function的PDF的技巧是使用所需的xml布局进行虚拟活动。 然后,您可以打开这个虚拟活动,以编程方式截图并使用此库将该图像转换为pdf。 当然有限制,如不能滚动,不超过一页,但对于有限的应用程序,这是快速和容易的。 希望这可以帮助别人!

    有点迟了,我还没有自己testing,但另一个在BSD许可证下的图书馆是Android PDF Writer 。

    更新我已经尝试过自己的图书馆。 适用于简单的pdf世代(它提供了添加文本,线条,矩形,位图,字体的方法)。 唯一的问题是生成的PDF存储在内存中的string中,这可能会导致大文档中的内存问题。

    在Android中find完全解决将任意HTML转换为带有非英文字母的PDF的问题并不容易。 我testing它的俄文unicode字母。

    我们使用三个库:

    (1) Jsoup (jsoup-1.7.3.jar)用于从HTML到XHTML的转换,

    (2) iTextPDF (itextpdf-5.5.0.jar),

    (3) XMLWorker (xmlworker-5.5.1.jar)。

     public boolean createPDF(String rawHTML, String fileName, ContextWrapper context){ final String APPLICATION_PACKAGE_NAME = context.getBaseContext().getPackageName(); File path = new File( Environment.getExternalStorageDirectory(), APPLICATION_PACKAGE_NAME ); if ( !path.exists() ){ path.mkdir(); } File file = new File(path, fileName); try{ Document document = new Document(); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file)); document.open(); // Подготавливаем HTML String htmlText = Jsoup.clean( rawHTML, Whitelist.relaxed() ); InputStream inputStream = new ByteArrayInputStream( htmlText.getBytes() ); // Печатаем документ PDF XMLWorkerHelper.getInstance().parseXHtml(writer, document, inputStream, null, Charset.defaultCharset(), new MyFont()); document.close(); return true; } catch (FileNotFoundException e) { e.printStackTrace(); return false; } catch (DocumentException e) { e.printStackTrace(); return false; } catch (IOException e) { e.printStackTrace(); return false; } 

    难题是使用iTextPDF XMLWorker库在PDF中显示俄文字母。 为此,我们应该创build我们自己的FontProvider接口的实现:

     public class MyFont implements FontProvider{ private static final String FONT_PATH = "/system/fonts/DroidSans.ttf"; private static final String FONT_ALIAS = "my_font"; public MyFont(){ FontFactory.register(FONT_PATH, FONT_ALIAS); } @Override public Font getFont(String fontname, String encoding, boolean embedded, float size, int style, BaseColor color){ return FontFactory.getFont(FONT_ALIAS, BaseFont.IDENTITY_H, BaseFont.EMBEDDED, size, style, color); } @Override public boolean isRegistered(String name) { return name.equals( FONT_ALIAS ); } } 

    这里我们使用位于系统文件夹中的标准Android字体Droid Sans:

     private static final String FONT_PATH = "/system/fonts/DroidSans.ttf"; 

    PDFJet提供了一个openSource版本的库,应该能够处理任何基本的PDF生成任务。 这是一个纯粹的基于Java的解决scheme,据说与Android兼容。 有一个商业版本的一些额外的function,似乎并不太昂贵。

    晚了,但与请求有关,希望有所帮助。 如果使用外部服务(如CommonsWare的回复中所build议的那样),则Docmosis有一个云服务可以帮助 – 将处理卸载到执行繁重处理的云服务。 这种方法在某些情况下是理想的,但当然依赖于networking连接。

    U也可以使用PoDoFo库。 主要目标是在LGPL下发布。 由于它是用C ++编写的,所以你应该使用NDK交叉编译并编写C端和Java包装器。 一些第三方库可以在OpenCV项目中使用。 在OpenCV项目中,U也可以findandroid.toolchain.cmake文件,它可以帮助你生成Makefile

      以上就是android开发分享如何在Android应用程序中创buildPDF?相关内容,想了解更多android开发(异常处理)及android游戏开发关注(计算机技术网)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ctvol.com/addevelopment/523438.html

      (0)
      上一篇 2020年12月11日
      下一篇 2020年12月11日

      精彩推荐