La conversione da Word a PDF è una delle conversioni di documenti ampiamente praticate e questo è il motivo per cui MS Word fornisce una funzionalità integrata per salvare i documenti Word come PDF. Poiché il PDF è un formato preferito per condividere i documenti o mantenerli online, la necessità della conversione da Word a PDF si verifica in vari scenari. D’altra parte, gli smartphone Android hanno semplificato la vita degli esseri umani inserendo una moltitudine di funzionalità all’interno dei telefoni tramite app. Tenendo d’occhio queste tendenze, in questo articolo ti mostrerò come convertire documenti Word in PDF all’interno di un’app Android. A scopo dimostrativo, creeremo una semplice app Convertitore da Word a PDF per Android in pochi passaggi con le seguenti funzionalità.
- Converti un documento Word in PDF
- Salva PDF nella memoria del telefono
- Visualizza PDF all’interno dell’app
Libreria del convertitore da Word a PDF per Android
Per convertire documenti MS Word in formato PDF, utilizzeremo Aspose.Words per Android tramite Java che ti consente di convertire documenti DOC/DOCX in file PDF senza problemi utilizzando un paio di righe di codice. Puoi scaricare l’API o installarla utilizzando la configurazione Maven.
Passaggi per convertire Word in PDF in Android
Di seguito sono riportati i passaggi per creare una semplice app di conversione da Word a PDF in Android utilizzando Aspose.Words per Android tramite Java:
- Crea un nuovo progetto in Android Studio (o Eclipse) e seleziona il modello “Attività vuota”.
- Configura il tuo progetto.
- Apri il file build.gradle.
- Aggiungi la seguente sezione dei repository in build.gradle.
repositories {
mavenCentral()
maven { url "https://repository.aspose.com/repo/" }
}
- Aggiungi le seguenti voci nella sezione delle dipendenze di 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')
- Abilita multidex aggiungendo la seguente voce nella sezione defaultConfig in build.gradle.
// enable multiDex
multiDexEnabled true
- Il file build.gradle completo sarà simile al seguente:
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"
// abilita 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'
}
- Aprire il file activitymain.xml.
- Incolla il seguente script per il layout dell’attività principale.
<?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>
- Apri il file MainActivity.java.
- Incolla il seguente codice Java in 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);
// applica la licenza se hai la licenza Aspose.Words...
applyLicense();
// ottenere treeview e impostarne il testo
textView = (TextView) findViewById(R.id.textView);
textView.setText("Select a Word DOCX file...");
// definire l'ascoltatore di clic del pulsante mobile
FloatingActionButton myFab = (FloatingActionButton) findViewById(R.id.fab);
myFab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
// apri il file Word dal selettore file e converti in PDF
openaAndConvertFile(null);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
private void openaAndConvertFile(Uri pickerInitialUri) {
// creare un nuovo intento per aprire il documento
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
// tipi mime per documenti MS Word
String[] mimetypes = {"application/vnd.openxmlformats-officedocument.wordprocessingml.document", "application/msword"};
intent.setType("*/*");
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
// iniziare l'attività
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();
// aprire il documento selezionato in un flusso di input
try (InputStream inputStream =
getContentResolver().openInputStream(document);) {
Document doc = new Document(inputStream);
// salva DOCX come PDF
doc.save(outputPDF);
// mostra la posizione del file PDF in toast e treeview (opzionale)
Toast.makeText(MainActivity.this, "File saved in: " + outputPDF, Toast.LENGTH_LONG).show();
textView.setText("PDF saved at: " + outputPDF);
// visualizza PDF convertito
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() {
// carica il PDF nel PDFView
PDFView pdfView = (PDFView) findViewById(R.id.pdfView);
pdfView.fromFile(new File(outputPDF)).load();
}
public void applyLicense()
{
// impostare la licenza
License lic= new License();
InputStream inputStream = getResources().openRawResource(R.raw.license);
try {
lic.setLicense(inputStream);
} catch (Exception e) {
e.printStackTrace();
}
}
}
- Crea l’app ed eseguila sul tuo smartphone Android o su un dispositivo virtuale.
- Consenti a questa app di accedere allo spazio di archiviazione andando su Impostazioni->App->Autorizzazioni->Gestione autorizzazioni->Archiviazione.
Convertitore da Word a PDF - Codice sorgente
Scarica il codice sorgente completo dell’app Convertitore da Word a PDF da GitHub.
Conclusione
In questo articolo, hai imparato come convertire Word in PDF all’interno delle app Android. Puoi integrare funzionalità simili all’interno della tua app o migliorare questo convertitore fino al livello desiderato. Puoi saperne di più su Aspose.Words per Android tramite Java dalla documentazione.