我想从我在Android的Activity中构建一个pdf文件。所以这是代码:
public File creaOrdinePDF(Ordine ordine,String linkImage,Context context){
doc = new Document();
File dir = null;
String path="";
try {
path = Environment.getExternalStorageDirectory()
.getAbsolutePath() + directoryFolder;
dir = new File(path);
if (!dir.exists()) {
dir.mkdirs();
//Toast.makeText(getApplicationContext(), "Directory creata", 10).show();
}
Log.d("PDFCreator", "PDF Path: " + path);
nomeFile="Ordine_negozio_"+ordine.getId();
File file = new File(dir, nomeFile);
FileOutputStream fOut = new FileOutputStream(file);
PdfWriter.getInstance(doc, fOut);
doc.setMargins(5, 5, 30, 30);
doc.open();
Font headerFont = new Font(Font.COURIER, 7.00f, Font.BOLD);
Font tableFont = new Font(Font.COURIER, 8.00f, Font.NORMAL);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
//Bitmap bitmap = BitmapFactory.decodeResource(context
// .getResources(), R.drawable.logo);
Log.d("PDFCreator", "Link immagine " + linkImage);
Bitmap bitmap = BitmapFactory.decodeFile(linkImage);
if(bitmap != null){
Log.d("PDFCreator", "Immagine diversa da null ");
}else{
Log.d("PDFCreator", "Immagine null ");
}
Log.e("PDFCreator","Pippo");
bitmap.compress(Bitmap.CompressFormat.JPEG, 30, stream);
Image myImg = Image.getInstance(stream.toByteArray());
float width = myImg.getWidth();
float height = myImg.getHeight();
float rapp = width / height;
if(width > 260F)
{
myImg.scaleAbsoluteWidth(200F);
myImg.scaleAbsoluteHeight(200F / rapp);
}
if(200F / rapp > 100F)
{
myImg.scaleAbsoluteWidth(rapp * 100F);
myImg.scaleAbsoluteHeight(100F);
}
myImg.setAlignment(Image.MIDDLE);
doc.add(myImg);
Log.e("PDFCreator","aggiunta immagine");
//inserisco il numero dell ordine
Paragraph p2 = new Paragraph("Ordine numero: "+ ordine.getId(),tableFont);
Log.e("PDFCreator","ordine numero "+ordine.getId());
p2.setSpacingAfter(10f);
doc.add(p2);
// add paragraph to document
//doc.add(p1);
float[] dim = {0.7f,3,1.5f,5};
PdfPTable table = new PdfPTable(dim);
table.setWidthPercentage(100);
PdfPCell cell = new PdfPCell(new Paragraph("QTA.", headerFont));
cell.setGrayFill(0.8F);
cell.setUseAscender(true);
cell.setVerticalAlignment(5);
cell.setHorizontalAlignment(0);
cell.setColspan(1);
cell.setBorderWidth(0.5F);
table.addCell(cell);
cell = new PdfPCell(new Paragraph("NOME ARTICOLO", headerFont));
cell.setGrayFill(0.8F);
cell.setUseAscender(true);
cell.setVerticalAlignment(5);
cell.setHorizontalAlignment(0);
cell.setColspan(1);
cell.setBorderWidth(0.5F);
table.addCell(cell);
cell = new PdfPCell(new Paragraph("CODICE ARTICOLO", headerFont));
cell.setGrayFill(0.8F);
cell.setUseAscender(true);
cell.setVerticalAlignment(5);
cell.setHorizontalAlignment(0);
cell.setColspan(1);
cell.setBorderWidth(0.5F);
table.addCell(cell);
cell = new PdfPCell(new Paragraph("NOTE", headerFont));
cell.setGrayFill(0.8F);
cell.setUseAscender(true);
cell.setVerticalAlignment(5);
cell.setHorizontalAlignment(0);
cell.setColspan(1);
cell.setBorderWidth(0.5F);
table.addCell(cell);
Log.e("PDFCreator","size lista articoli "+ordine.getListaArticoli().size());
int i=0;
for(Iterator<ArticoliOrdine> it = ordine.getListaArticoli().iterator(); it.hasNext();)
{
ArticoliOrdine art = it.next();
cell = new PdfPCell(new Paragraph(art.getQuantia()+" pz.", tableFont));
cell.setVerticalAlignment(5);
cell.setHorizontalAlignment(0);
cell.setColspan(1);
cell.setFixedHeight(20);
cell.setBorderWidth(0.5F);
table.addCell(cell);
Log.e("PDFCreator","idArticolo "+ i++);
cell = new PdfPCell(new Paragraph(art.getNomeArticolo(), tableFont));
cell.setVerticalAlignment(5);
cell.setHorizontalAlignment(0);
cell.setColspan(1);
cell.setBorderWidth(0.5F);
table.addCell(cell);
cell = new PdfPCell(new Paragraph(art.getCodiceBarre(), tableFont));
cell.setVerticalAlignment(5);
cell.setHorizontalAlignment(0);
cell.setColspan(1);
cell.setBorderWidth(0.5F);
table.addCell(cell);
cell = new PdfPCell(new Paragraph("", tableFont));
cell.setVerticalAlignment(5);
cell.setHorizontalAlignment(2);
cell.setColspan(1);
cell.setBorderWidth(0.5F);
table.addCell(cell);
}
doc.add(table);
Log.e("PDFCreator", "Fine PDF");
// set footer
Phrase footerText = new Phrase("This is an example of a footer");
HeaderFooter pdfFooter = new HeaderFooter(footerText, true);
doc.setFooter(pdfFooter);
} catch (DocumentException de) {
Log.e("PDFCreator", "DocumentException:" + de);
} catch (IOException e) {
Log.e("PDFCreator", "ioException:" + e);
} catch (Exception e ){
Log.e("PDFCreator", "Exception:" + e);
} finally {
doc.close();
File file = new File(Environment.getExternalStorageDirectory()
.getAbsolutePath() + directoryFolder+"/"+nomeFile);
Log.e("PDFCreator", "return file");
return file;
}
}
但如果我尝试生成它,我就会有这个错误:
11-02 12:51:19.276 9589-10325/com.mcsolution.easymanagementandroid.easymanagementandroid E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #5
Process: com.mcsolution.easymanagementandroid.easymanagementandroid, PID: 9589
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Ljava/awt/Color;
at com.lowagie.text.pdf.PdfChunk.color(Unknown Source)
at com.lowagie.text.pdf.PdfDocument.writeLineToContent(Unknown Source)
at com.lowagie.text.pdf.PdfDocument.flushLines(Unknown Source)
at com.lowagie.text.pdf.PdfDocument.newPage(Unknown Source)
at com.lowagie.text.pdf.PdfDocument.close(Unknown Source)
at com.lowagie.text.Document.close(Unknown Source)
at com.mcsolution.easymanagementandroid.print.Print.creaOrdinePDF(Print.java:186)
at com.mcsolution.easymanagementandroid.ordine.creaOrdine$RunnableGeneraOrdine_PDF.doInBackground(creaOrdine.java:778)
at com.mcsolution.easymanagementandroid.ordine.creaOrdine$RunnableGeneraOrdine_PDF.doInBackground(creaOrdine.java:772)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.ClassNotFoundException: Didn't find class "java.awt.Color" on path: DexPathList[[dex file "/data/data/com.mcsolution.easymanagementandroid.easymanagementandroid/files/instant-run/dex/slice-support-annotations-23.3.0_469f8f3ca3f9e0c059b9c6f2d04acc51933988a6-classes.dex",
dex file "/data/data/com.mcsolution.easymanagementandroid.easymanagementandroid/files/instant-run/dex/slice-slice_9-classes.dex",
dex file "/data/data/com.mcsolution.easymanagementandroid.easymanagementandroid/files/instant-run/dex/slice-slice_8-classes.dex",
dex file "/data/data/com.mcsolution.easymanagementandroid.easymanagementandroid/files/instant-run/dex/slice-slice_7-classes.dex",
dex file "/data/data/com.mcsolution.easymanagementandroid.easymanagementandroid/files/instant-run/dex/slice-slice_6-classes.dex",
dex file "/data/data/com.mcsolution.easymanagementandroid.easymanagementandroid/files/instant-run/dex/slice-slice_5-classes.dex",
dex file "/data/data/com.mcsolution.easymanagementandroid.easymanagementandroid/files/instant-run/dex/slice-slice_4-classes.dex",
dex file "/data/data/com.mcsolution.easymanagementandroid.easymanagementandroid/files/instant-run/dex/slice-slice_3-classes.dex",
dex file "/data/data/com.mcsolution.easymanagementandroid.easymanagementandroid/files/instant-run/dex/slice-slice_2-classes.dex",
dex file "/data/data/com.mcsolution.easymanagementandroid.easymanagementandroid/files/instant-run/dex/slice-slice_1-classes.dex",
dex file "/data/data/com.mcsolution.easymanagementandroid.easymanagementandroid/files/instant-run/dex/slice-slice_0-classes.dex",
dex file "/data/data/com.mcsolution.easymanagementandroid.easymanagementandroid/files/instant-run/dex/slice-lowagie-2.1.7_6c71a44cd1fb2c264f7135848cfb4fd4358dd002-classes.dex",
dex file "/data/data/com.mcsolution.easymanagementandroid.easymanagementandroid/files/instant-run/dex/slice-internal_impl-23.3.0_459b0ff04633a2c5ffc128ab96df15303edb9d39-classes.dex",
dex file "/data/data/com.mcsolution.easymanagementandroid.easymanagementandroid/files/instant-run/dex/slice-gson-2.2.4_e859ceafcaa49a8708d05a8e64ce9bdc0fd2e6a0-classes.dex",
dex file "/data/data/com.mcsolution.easymanagementandroid.easymanagementandroid/files/instant-run/dex/slice-com.android.support-support-vector-drawable-23.3.0_32569b030fbf7638ea3bff8f6335741d192c74ac-classes.dex",
dex file "/data/data/com.mcsolution.easymanagementandroid.easymanagementandroid/files/instant-run/dex/sl
答案 0 :(得分:3)
com.lowagie
iText(2.1.7或更早版本)在Android上无法使用。你需要 iText v5 (com.itextpdf
),更具体地说是Android端口 iTextG ,它排除了Android平台上没有的AWT类:{{3 }}
这就是你得到的原因
Caused by: java.lang.ClassNotFoundException: Didn't find class "java.awt.Color"
有关您的信息,iText(G)v5是AGPLv3,这意味着您的Android应用程序也必须是AGPLv3(即向最终用户发布源代码等),或者您需要购买商业许可证。< / em>的