首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android如何将XML布局转换为PDF?

Android如何将XML布局转换为PDF?
EN

Stack Overflow用户
提问于 2013-05-10 17:40:20
回答 2查看 8.6K关注 0票数 3

我有一个表格,当当前填写是发送到一个专用的电子邮件地址提交。我希望有机会提供其他选择。比如将其另存为PDF文件。表单在main.xml布局中完成。有没有可能把xml版面转换成PDF版面?如果是这样的话,谁能给我一个很好的例子。

非常感谢

EN

回答 2

Stack Overflow用户

发布于 2017-08-04 01:22:51

你可以在这个链接上看看:

https://github.com/HendrixString/Android-PdfMyXml

使用说明

  1. 创建XML布局

首先创建XML布局。给它以像素为单位的尺寸(对于所有的子视图)和比例,根据比例为1:1.41的横向或纵向。

page1.xml

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="2115px"
            android:layout_height="1500px"
            android:background="@color/white">
 <TextView android:id="@+id/tv_hello"
            android:textColor="@color/black"
            android:textSize="27px"
            android:textStyle="bold"
            android:padding="6px"/>

</RelativeLayout>

您可以根据需要创建任意数量的页面/模板。

  1. 实现视图渲染器

通过扩展AbstractViewRenderer或者匿名实例化它并注入布局id来实现视图渲染器。initView(视图视图)将自动为您提供一个膨胀视图。还有其他选择,但我现在不会讨论它。

代码语言:javascript
运行
复制
AbstractViewRenderer page = new AbstractViewRenderer(context, R.layout.page1) {
private String _text;

public void setText(String text) {
    _text = text;
}

@Override
protected void initView(View view) {
    TextView tv_hello = (TextView)view.findViewById(R.id.tv_hello);
     tv_hello.setText(_text);
}
};

// you can reuse the bitmap if you want
page.setReuseBitmap(true);

  1. 生成

文档

使用PdfDocument或PdfDocument.Builder添加页面,并在带有进度条的后台渲染和运行。

代码语言:javascript
运行
复制
    PdfDocument doc            = new PdfDocument(ctx);

// add as many pages as you have
doc.addPage(page);

doc.setRenderWidth(2115);
doc.setRenderHeight(1500);
doc.setOrientation(PdfDocument.A4_MODE.LANDSCAPE);
doc.setProgressTitle(R.string.gen_please_wait);
doc.setProgressMessage(R.string.gen_pdf_file);
doc.setFileName("test");
doc.setInflateOnMainThread(false);
doc.setListener(new PdfDocument.Callback() {
    @Override
    public void onComplete(File file) {
        Log.i(PdfDocument.TAG_PDF_MY_XML, "Complete");
    }

    @Override
    public void onError(Exception e) {
        Log.i(PdfDocument.TAG_PDF_MY_XML, "Error");
    }
});

doc.createPdf(ctx);

或者使用PdfDocument.Builder

代码语言:javascript
运行
复制
new PdfDocument.Builder(ctx).addPage(page).filename("test").orientation(PdfDocument.A4_MODE.LANDSCAPE)
                         .progressMessage(R.string.gen_pdf_file).progressTitle(R.string.gen_please_wait).renderWidth(2115).renderHeight(1500)
                         .listener(new PdfDocument.Callback() {
                             @Override
                             public void onComplete(File file) {
                                 Log.i(PdfDocument.TAG_PDF_MY_XML, "Complete");
                             }

                             @Override
                             public void onError(Exception e) {
                                 Log.i(PdfDocument.TAG_PDF_MY_XML, "Error");
                             }
                         }).create().createPdf(this);
票数 4
EN

Stack Overflow用户

发布于 2020-09-16 13:42:38

您可以使用此library在几行代码中轻松完成以下操作:

代码语言:javascript
运行
复制
 PdfGenerator.getBuilder()
                        .setContext(context)
                        .fromLayoutXMLSource()
                        .fromLayoutXML(R.layout.layout_print,R.layout.layout_print)
                        .s̶e̶t̶D̶e̶f̶a̶u̶l̶t̶P̶a̶g̶e̶S̶i̶z̶e̶(̶P̶d̶f̶G̶e̶n̶e̶r̶a̶t̶o̶r̶.P̶a̶g̶e̶S̶i̶z̶e̶.A̶4̶)̶ //No Longer Work
                        .setFileName("Test-PDF")
                        .build();

此外,您还可以在.build()中传递一个回调(PdfGeneratorListener()),以通知异常的pdf生成是完成还是失败

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16479337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档