Моя проблема: происходит сбой, и приложение закрывается при записи файла PDF с использованием библиотеки itext версия 7.1.17
и я добавил все разрешения
я проверил хранилище и нашел пустой PDF-файл
Сначала я подумал, что проблема связана с типом шрифта. Я использовал шрифты, интегрированные с библиотекой, и это не решило проблему. Я пробовал другие версии, и это тоже не решило проблему
это зависимости
Код: Выделить всё
dependencies {
implementation 'androidx.appcompat:appcompat:1.7.0-alpha01'
implementation 'com.google.android.material:material:1.8.0-rc01'
implementation 'androidx.constraintlayout:constraintlayout:2.2.0-alpha05'
implementation 'com.itextpdf:kernel:7.1.17'
implementation 'com.itextpdf:layout:7.1.17'
implementation 'com.itextpdf:io:7.1.17'
}
`public class MainActivity расширяет AppCompatActivity {
Код: Выделить всё
private static final int REQUEST_WRITE_PERMISSION = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_PERMISSION);
} else {
pdfWriter();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_WRITE_PERMISSION) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
pdfWriter();
} else {
System.out.println("Permission Denied!");
}
}
}
public void pdfWriter() {
PdfWriter writer = null;
PdfDocument pdf = null;
Document document = null;
try {
String pdfPath = getExternalFilesDir(null) + "/invoice.pdf";
writer = new PdfWriter(pdfPath);
pdf = new PdfDocument(writer);
document = new Document(pdf);
document.add(new Paragraph("Sales Invoice")
.setFontSize(18)
.setBold()
.setMarginBottom(20));
document.add(new Paragraph("Seller: ABC Store\nAddress: Main Street, City\nPhone: 123456789")
.setFontSize(12)
.setMarginBottom(10));
document.add(new Paragraph("Customer: John Smith\nAddress: Future District, City\nPhone: 987654321")
.setFontSize(12)
.setMarginBottom(20));
float[] columnWidths = {50, 200, 100, 100};
Table table = new Table(columnWidths);
table.addCell(new Cell().add(new Paragraph("No.").setBold()));
table.addCell(new Cell().add(new Paragraph("Product").setBold()));
table.addCell(new Cell().add(new Paragraph("Quantity").setBold()));
table.addCell(new Cell().add(new Paragraph("Price").setBold()));
String[][] products = {
{"1", "Laptop", "2", "$1500"},
{"2", "Smartphone", "1", "$1200"},
{"3", "Keyboard", "3", "$100"}
};
for (String[] product : products) {
for (String data : product) {
table.addCell(new Cell().add(new Paragraph(data)));
}
}
document.add(table);
document.add(new Paragraph("Total Amount: $4400")
.setFontSize(14)
.setBold()
.setMarginTop(20));
} catch (Exception e) {
e.printStackTrace();
} finally {
if (document != null) {
document.close();
}
}
}
Тогда я подумал об использовании другой библиотеки, а именно PDFBox, и возник конфликт между библиотеками, и это было еще более ужасным проблема. Я искал встроенные библиотеки и обнаружил, что они не поддерживают водяные знаки и пароли.
Подробнее здесь: https://stackoverflow.com/questions/792 ... ng-itext-l