Android 中的 Word 到 PDF 轉換器

Word 到 PDF 是廣泛使用的文檔轉換之一,這就是 MS Word 提供將 Word 文檔另存為 PDF 的內置功能的原因。由於 PDF 是共享文檔或在線保存文檔的首選格式,因此在各種情況下都需要將 Word 轉換為 PDF。另一方面,基於 Android 的智能手機通過應用程序在手機中添加了大量功能,從而讓人們的生活更加輕鬆。密切關注這些趨勢,在本文中,我將向您展示如何在 Android 應用程序中將 Word 文檔轉換為 PDF。為了進行演示,我們將通過幾個步驟為 Android 構建一個簡單的 Word 到 PDF 轉換器應用程序,該應用程序具有以下功能。

  • 將 Word 文檔轉換為 PDF
  • 將 PDF 保存在手機的存儲空間中
  • 在應用程序中查看 PDF

適用於 Android 的 Word 到 PDF 轉換器庫

為了將 MS Word 文檔轉換為 PDF 格式,我們將使用 Aspose.Words for Android via Java,它允許您使用幾行代碼將 DOC/DOCX 文檔無縫轉換為 PDF 文件。您可以下載 API 或使用Maven 配置 安裝它。

在 Android 中將 Word 轉換為 PDF 的步驟

以下是通過 Java 使用 Aspose.Words for Android 在 Android 中創建一個簡單的 Word 到 PDF 轉換器應用程序的步驟:

  • 在 Android Studio(或 Eclipse)中創建一個新項目並選擇“Empty Activity”模板。
在android studio中創建新項目
  • 配置您的項目。
配置安卓項目
  • 打開 build.gradle 文件。
在 android studio 中更新 build.gradle
  • 在 build.gradle 中添加以下存儲庫部分。
repositories {
    mavenCentral()
    maven { url "https://repository.aspose.com/repo/" }
}
  • 在 build.gradle 的依賴項部分添加以下條目。
implementation 'com.google.android.material:material:1.1.0'
implementation 'com.android.support:multidex:2.0.0'
implementation 'com.github.barteksc:android-pdf-viewer:2.8.2'
compile (group: 'com.aspose', name: 'aspose-words', version: '20.6', classifier: 'android.via.java')
  • 通過在 build.gradle 的 defaultConfig 部分下添加以下條目來啟用 multidex。
// enable multiDex
multiDexEnabled true
  • 完整的 build.gradle 文件如下所示:
apply plugin: 'com.android.application'

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.1"

    defaultConfig {
        applicationId "com.example.wordtopdf"
        minSdkVersion 16
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"
        // 啟用 multiDex
        multiDexEnabled true
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

repositories {
    mavenCentral()
    maven { url "https://repository.aspose.com/repo/" }
}
dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'com.google.android.material:material:1.1.0'
    implementation 'com.android.support:multidex:2.0.0'
    implementation 'com.github.barteksc:android-pdf-viewer:2.8.2'
    compile (group: 'com.aspose', name: 'aspose-words', version: '20.6', classifier: 'android.via.java')
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
  • 打開 activitymain.xml 文件。
更新佈局 xml
  • 為主要活動的佈局粘貼以下腳本。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.github.barteksc.pdfviewer.PDFView
        android:id="@+id/pdfView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:layout_editor_absoluteX="-26dp"
        tools:layout_editor_absoluteY="-16dp" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#D3FFFFFF"
        android:textColor="#A3A2A2"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        tools:ignore="MissingConstraints"
        tools:layout_editor_absoluteY="39dp" />

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="408dp"
        android:layout_gravity="bottom|right"
        android:layout_marginEnd="36dp"
        android:layout_marginRight="36dp"
        android:layout_marginBottom="140dp"
        app:backgroundTint="#00BCD4"
        app:layout_anchorGravity="bottom|right|end"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/pdfView"
        app:srcCompat="@android:drawable/stat_sys_upload"
        tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>
  • 打開 MainActivity.java 文件。
將word添加到pdf轉換器代碼
  • 將以下 Java 代碼粘貼到 MainActivity.java 中。
package com.example.wordtopdf;

import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;

import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

import com.aspose.words.Document;
import com.aspose.words.License;
import com.github.barteksc.pdfviewer.PDFView;
import com.google.android.material.floatingactionbutton.FloatingActionButton;

import android.os.Environment;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

@TargetApi(Build.VERSION_CODES.FROYO)
public class MainActivity extends AppCompatActivity {

    private static final int PICK_PDF_FILE = 2;
    private final String storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + File.separator;
    private final String outputPDF = storageDir + "Converted_PDF.pdf";
    private TextView textView = null;
    private Uri document = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 如果您擁有 Aspose.Words 許可證,請應用許可證...
        applyLicense();
        // 獲取樹視圖並設置其文本
        textView = (TextView) findViewById(R.id.textView);
        textView.setText("Select a Word DOCX file...");
        // 定義浮動按鈕的點擊監聽器
        FloatingActionButton myFab = (FloatingActionButton) findViewById(R.id.fab);
        myFab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                try {
                    // 從文件選擇器打開 Word 文件並轉換為 PDF
                    openaAndConvertFile(null);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    private void openaAndConvertFile(Uri pickerInitialUri) {
        // 創建打開文檔的新意圖
        Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
        intent.addCategory(Intent.CATEGORY_OPENABLE);
        // MS Word 文檔的 mime 類型
        String[] mimetypes = {"application/vnd.openxmlformats-officedocument.wordprocessingml.document", "application/msword"};
        intent.setType("*/*");
        intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
        // 開始活動
        startActivityForResult(intent, PICK_PDF_FILE);
    }

    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
    @Override
    public void onActivityResult(int requestCode, int resultCode,
                                 Intent intent) {
        super.onActivityResult(requestCode, resultCode, intent);

        if (resultCode == Activity.RESULT_OK) {
            if (intent != null) {
                document = intent.getData();
                // 將所選文檔打開到輸入流中
                try (InputStream inputStream =
                             getContentResolver().openInputStream(document);) {
                    Document doc = new Document(inputStream);
                    // 將 DOCX 保存為 PDF
                    doc.save(outputPDF);
                    // 在 toast 和樹視圖中顯示 PDF 文件位置(可選)
                    Toast.makeText(MainActivity.this, "File saved in: " + outputPDF, Toast.LENGTH_LONG).show();
                    textView.setText("PDF saved at: " + outputPDF);
                    // 查看轉換後的 PDF
                    viewPDFFile();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                    Toast.makeText(MainActivity.this, "File not found: " + e.getMessage(), Toast.LENGTH_LONG).show();
                } catch (IOException e) {
                    e.printStackTrace();
                    Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
                } catch (Exception e) {
                    e.printStackTrace();
                    Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
                }
            }
        }
    }

    public void viewPDFFile() {
        // 加載 PDF 到 PDFView
        PDFView pdfView = (PDFView) findViewById(R.id.pdfView);
        pdfView.fromFile(new File(outputPDF)).load();
    }
    public void applyLicense()
    {
        // 設置許可證
        License lic= new License();
        InputStream inputStream = getResources().openRawResource(R.raw.license);
        try {
            lic.setLicense(inputStream);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  • 構建應用程序並在您的 Android 智能手機或虛擬設備中運行它。
  • 通過轉到設置->應用->權限->權限管理器->存儲,允許此應用訪問存儲。
Android Word 到 PDF 轉換器

Word to PDF Convetrer - 源代碼

GitHub 下載 Word to PDF Converter 應用程序的完整源代碼。

結論

在本文中,您了解瞭如何在 Android 應用程序中將 Word 轉換為 PDF。您可以將類似的功能集成到您自己的應用程序中,或將此轉換器增強到您想要的水平。您可以從 文檔 了解更多關於 Aspose.Words for Android via Java 的信息。

也可以看看