Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

I/flutter ( 8777): java.io.IOException: cannot create document: File not in PDF format or corrupted. #160

Open
franquicidad opened this issue Nov 25, 2021 · 0 comments

Comments

@franquicidad
Copy link

franquicidad commented Nov 25, 2021

Hello im having some problems with the file i have this logic in screen 1 ...
Future goToPdfCreator(BuildContext context,
UserModelString userModelString) async {
final pdf = pw.Document();
Directory? docDirectory = await getExternalStorageDirectory();
if (docDirectory != null) {
var path = docDirectory.path;
var file = File('$path/laboralCertificate.pdf');
await file.writeAsBytes(await pdf.save());
Navigator.of(context).push(MaterialPageRoute(
builder: (context) =>
PdfCreator(
userModelString: userModelString, path: path,)));
}
}

class 2 PdfCreator.....

import 'dart:async';
import 'dart:io';

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_pdfview/flutter_pdfview.dart';
import 'package:lab_cert_globant/Model/user_dates_display.dart';
import 'package:path_provider/path_provider.dart';
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart' as pw;

class PdfCreator extends StatefulWidget {
PdfCreator(
{Key? key,
required this.userModelString,
required this.path
})
: super(key: key);
final String path;
final UserModelString userModelString;

@OverRide
State createState() => _PdfCreatorState();
}

class _PdfCreatorState extends State with WidgetsBindingObserver {
final pdf = pw.Document();
var file;
final Completer _controller =
Completer();
int? pages = 0;
int? currentPage = 0;
bool isReady = false;
String errorMessage = '';

writeOnPdf() {
pdf.addPage(
pw.Page(
pageFormat: PdfPageFormat.letter,
build: (pw.Context context) {
return pw.Column(
crossAxisAlignment: pw.CrossAxisAlignment.center,
children: [
pw.Column(
crossAxisAlignment: pw.CrossAxisAlignment.start,
children: [
pw.Text(widget.userModelString.companyName),
pw.Divider(height: 20),
pw.Text(widget.userModelString.companyNumber),
pw.Divider(height: 20),
pw.Text('Certificado'),
pw.Divider(height: 20),
pw.Column(
crossAxisAlignment: pw.CrossAxisAlignment.start,
children: [
pw.Text(
'Por medio de la presente certifico que el señor'
'${widget.userModelString.name},identificado con Cédula de Ciudadania No. ${widget.userModelString.userId}, trabaja actualmente en la empresa'
'${widget.userModelString.companyName} con NIT: ${widget.userModelString.companyNumber}, desde ${widget.userModelString.initialDate}, con un contrato a termino indefinido'
'y bajo el cargo de ${widget.userModelString.rol}. Con horario laboral de 9 horas diarias de lunes a viernes y un total de 45 horas'
'semanales. Percibiento un Sueldo Basico mensual de ${widget.userModelString.salary} ${widget.userModelString.currency}.'),
pw.Divider(height: 20),
pw.Text(
'Se expide el presente certificado a solicitud del interesado en la fecha ${widget.userModelString.endDate}'),
pw.Divider(height: 20),
pw.Text(
'Para confirmar esta certificación, comuniquese enviando el presente certificado al correo'
'electronico Pjourney-COLPE@globant.com para validacion.'),
pw.Divider(height: 20),
pw.Divider(height: 20),
pw.Text('Yullo'),
pw.Text('Pealyst'),
pw.Text('1'),
pw.Text('yul@glob.com'),
])
])
]);
},
),
);
}

Future savePdf() async {
Directory? docDirectory = await getExternalStorageDirectory();
if(docDirectory != null) {
var path = docDirectory.path;
file = File('$path/laboralCertificate.pdf');
await file.writeAsBytes(await pdf.save());
}
}

@OverRide
Widget build(BuildContext context) {
writeOnPdf();
return SafeArea(
child: Scaffold(
appBar: AppBar(title: Text('Save Pdf'),),
body: Stack(
children: [
PDFView(
filePath: widget.path,
enableSwipe: true,
swipeHorizontal: true,
autoSpacing: false,
pageFling: true,
pageSnap: true,
defaultPage: currentPage!,
fitPolicy: FitPolicy.BOTH,
preventLinkNavigation: true,
onRender: (_pages) {
setState(() {
pages = _pages;
isReady = true;
});
},
onError: (error) {
setState(() {
errorMessage = error.toString();
});
print(error.toString());
},
onPageError: (page, error) {
setState(() {
errorMessage = '$page: ${error.toString()}';
});
print('$page: ${error.toString()}');
},
onViewCreated: (PDFViewController pdfViewController) {
_controller.complete(pdfViewController);
},
onLinkHandler: (String? uri) {
print('goto uri: $uri');
},
onPageChanged: (int? page, int? total) {
print('page change: $page/$total');
setState(() {
currentPage = page;
});
},
),
errorMessage.isEmpty
? !isReady
? const Center(
child: CircularProgressIndicator(),
)
: Container()
: Center(
child: Text(errorMessage),
)
],
),
),
);
}
}

And i get the title of this issue printed on screen what seems to be wrong please help!.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant