O Word para PDF é uma das conversões de documentos amplamente praticadas e esta é a razão pela qual o MS Word fornece um recurso interno para salvar documentos do Word como PDF. Como o PDF é o formato preferido para compartilhar os documentos ou mantê-los online, a necessidade de conversão de Word para PDF ocorre em vários cenários. Por outro lado, os smartphones com Android tornaram a vida dos humanos mais fácil, colocando uma infinidade de funcionalidades nos telefones por meio de aplicativos. De olho nessas tendências, neste artigo, mostrarei como converter documentos do Word para PDF em um aplicativo Android. Para demonstração, criaremos um aplicativo Word to PDF Converter simples para Android em algumas etapas com os seguintes recursos.
- Converter um documento do Word para PDF
- Salvar PDF no armazenamento do telefone
- Visualize PDF dentro do aplicativo
Biblioteca de conversores de Word para PDF para Android
Para converter documentos do MS Word em formato PDF, usaremos o Aspose.Words for Android via Java que permite converter documentos DOC/DOCX em arquivos PDF perfeitamente usando algumas linhas de código. Você pode baixar a API ou instalá-la usando a configuração Maven.
Passos para converter Word para PDF no Android
A seguir estão as etapas para criar um aplicativo Word to PDF Converter simples no Android usando Aspose.Words para Android via Java:
- Crie um novo projeto no Android Studio (ou Eclipse) e selecione o modelo “Empty Activity”.
- Configure seu projeto.
- Abra o arquivo build.gradle.
- Adicione a seguinte seção de repositórios em build.gradle.
repositories {
mavenCentral()
maven { url "https://repository.aspose.com/repo/" }
}
- Adicione as seguintes entradas na seção de dependências do 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')
- Habilite o multidex adicionando a seguinte entrada na seção defaultConfig em build.gradle.
// enable multiDex
multiDexEnabled true
- O arquivo build.gradle completo terá a seguinte aparência:
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"
// ativar 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'
}
- Abra o arquivo activitymain.xml.
- Cole o script a seguir para o layout da atividade principal.
<?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>
- Abra o arquivo MainActivity.java.
- Cole o seguinte código Java em 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);
// aplique a licença se você tiver a licença Aspose.Words...
applyLicense();
// obtenha treeview e defina seu texto
textView = (TextView) findViewById(R.id.textView);
textView.setText("Select a Word DOCX file...");
// definir o ouvinte de clique do botão flutuante
FloatingActionButton myFab = (FloatingActionButton) findViewById(R.id.fab);
myFab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
// abra o arquivo do Word a partir do seletor de arquivos e converta para PDF
openaAndConvertFile(null);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
private void openaAndConvertFile(Uri pickerInitialUri) {
// criar uma nova intenção para abrir o documento
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
// tipos mime para documentos do MS Word
String[] mimetypes = {"application/vnd.openxmlformats-officedocument.wordprocessingml.document", "application/msword"};
intent.setType("*/*");
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
// iniciar atividade
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();
// abra o documento selecionado em um fluxo de entrada
try (InputStream inputStream =
getContentResolver().openInputStream(document);) {
Document doc = new Document(inputStream);
// salve DOCX como PDF
doc.save(outputPDF);
// mostre a localização do arquivo PDF no toast, bem como na visualização em árvore (opcional)
Toast.makeText(MainActivity.this, "File saved in: " + outputPDF, Toast.LENGTH_LONG).show();
textView.setText("PDF saved at: " + outputPDF);
// ver PDF convertido
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() {
// carregar PDF no PDFView
PDFView pdfView = (PDFView) findViewById(R.id.pdfView);
pdfView.fromFile(new File(outputPDF)).load();
}
public void applyLicense()
{
// definir licença
License lic= new License();
InputStream inputStream = getResources().openRawResource(R.raw.license);
try {
lic.setLicense(inputStream);
} catch (Exception e) {
e.printStackTrace();
}
}
}
- Crie o aplicativo e execute-o em seu smartphone Android ou em um dispositivo virtual.
- Permita que este aplicativo acesse o armazenamento acessando Configurações->Aplicativos->Permissões->Gerenciador de permissões->Armazenamento.
Conversor de Word para PDF - Código-fonte
Baixe o código-fonte completo do aplicativo Word to PDF Converter do GitHub.
Conclusão
Neste artigo, você aprendeu como converter Word para PDF em aplicativos Android. Você pode integrar funcionalidades semelhantes em seu próprio aplicativo ou aprimorar este conversor até o nível desejado. Você pode aprender mais sobre Aspose.Words para Android via Java na documentação.