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

Android如何将XML布局转换为PDF?,android,xml,pdf,Android,Xml,Pdf,我有一个表格,当当前填写时,在提交时会发送到一个专用的电子邮件地址。我希望有机会提供其他选择。比如将其保存为PDF文件。表单在main.xml布局中完成。是否可以将xml布局转换为PDF格式?如果是这样的话,有人能给我指出一个好例子的方向吗 非常感谢您可以查看此链接: 指示 创建XML布局 首先创建XML布局。给它以像素为单位的尺寸(以及它的所有子视图),并根据比例1:1.41的横向或纵向比例 page1.xml <?xml version="1.0" encoding="utf-8"?

我有一个表格,当当前填写时,在提交时会发送到一个专用的电子邮件地址。我希望有机会提供其他选择。比如将其保存为PDF文件。表单在main.xml布局中完成。是否可以将xml布局转换为PDF格式?如果是这样的话,有人能给我指出一个好例子的方向吗


非常感谢

您可以查看此链接:

指示

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

    page1.xml

    <?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>
    
  • 构建PDF文档
  • 使用PdfDocument或PdfDocument.Builder添加页面,并使用进度条在后台渲染和运行所有页面

        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

    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);
    
    您可以使用它在几行代码内轻松完成-

     PdfGenerator.getBuilder()
                            .setContext(context)
                            .fromLayoutXMLSource()
                            .fromLayoutXML(R.layout.layout_print,R.layout.layout_print)
                            .setDefaultPageSize(PdfGenerator.PageSize.A4)
                            .setFileName("Test-PDF")
                            .build();
    

    此外,您还可以在
    .build()中传递回调(
    PdfGeneratorListener()
    若要通知pdf生成是否已完成或因异常而失败

    谷歌上应该有教程。我似乎只能找到根据活动而不是布局创建的教程。我不知道这一点,但您是否浏览了此链接?这可能会对您有所帮助,我也再次找到了此链接。谢谢。在阅读第三个链接时,似乎没有一个快速点击转换xml pdf的方法。
     PdfGenerator.getBuilder()
                            .setContext(context)
                            .fromLayoutXMLSource()
                            .fromLayoutXML(R.layout.layout_print,R.layout.layout_print)
                            .setDefaultPageSize(PdfGenerator.PageSize.A4)
                            .setFileName("Test-PDF")
                            .build();