在android中访问iText pdf库中的资产文件夹
我想使用iText库将一些图像从资产文件夹写入pdf文件。 如果我使用SD卡访问,那么它工作正常。 但若我使用“资产”文件夹访问,那个么它会显示“未找到文件”异常。 我的代码是在android中访问iText pdf库中的资产文件夹,android,Android,我想使用iText库将一些图像从资产文件夹写入pdf文件。 如果我使用SD卡访问,那么它工作正常。 但若我使用“资产”文件夹访问,那个么它会显示“未找到文件”异常。 我的代码是 package com.app.ipro; import java.io.File; import java.io.FileOutputStream; import java.util.Date; import android.graphics.Bitmap; import android.net.Uri; impo
package com.app.ipro;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Date;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Environment;
import com.itextpdf.text.Anchor;
import com.itextpdf.text.BadElementException;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Chapter;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.List;
import com.itextpdf.text.ListItem;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.Section;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
public class MakeInvoice {
private static String FILE = "";
public static void main() {
try {
String externalStoragePath = Environment
.getExternalStorageDirectory().getAbsolutePath();
System.out.println("externalStoragePath:" + externalStoragePath);
boolean f = new File(externalStoragePath + "\\MyPDF").mkdirs();
System.out.println("f:" + f);
FILE = externalStoragePath + "\\MyPDF\\" + "FirstPdfabc6.pdf";
Document document = new Document(PageSize.A4);
PdfWriter.getInstance(document, new FileOutputStream(FILE));
document.open();
addMetaData(document);
addTitlePage(document);
document.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private static void addMetaData(Document document) {
document.addTitle("My first PDF");
document.addSubject("Using iText");
document.addKeywords("Java, PDF, iText");
document.addAuthor("Lars Vogel");
document.addCreator("Lars Vogel");
}
private static void addTitlePage(Document document)
throws DocumentException {
Paragraph preface = new Paragraph();
addEmptyLine(preface, 1);
preface.add(new Paragraph("Title of the document"));
addEmptyLine(preface, 1);
document.add(preface);
String strLogo = "file:///android_asset/tmpl1/Vector_background1.jpg";
PdfPTable table = new PdfPTable(2);
table.setTableEvent(new tableEvent(strLogo));
table.addCell("Name");
table.addCell("Place");
table.addCell("RoseIndia");
table.addCell("Delhi");
document.add(table);
document.newPage();
}
private static void addEmptyLine(Paragraph paragraph, int number) {
for (int i = 0; i < number; i++) {
paragraph.add(new Paragraph(" "));
}
}
}
所以运行时它显示异常
08-11 15:24:45.817: WARN/System.err(18022): java.io.FileNotFoundException: /android_asset/tmpl1/Vector_background1.jpg (No such file or directory)
08-11 15:24:45.837: WARN/System.err(18022): at org.apache.harmony.luni.platform.OSFileSystem.openImpl(Native Method)
08-11 15:24:45.837: WARN/System.err(18022): at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:152)
08-11 15:24:45.847: WARN/System.err(18022): at java.io.FileInputStream.<init>(FileInputStream.java:82)
08-11 15:24:45.857: WARN/System.err(18022): at org.apache.harmony.luni.internal.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:85)
08-11 15:24:45.857: WARN/System.err(18022): at org.apache.harmony.luni.internal.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:184)
08-11 15:24:45.867: WARN/System.err(18022): at java.net.URL.openStream(URL.java:653)
08-11 15:24:45.867: WARN/System.err(18022): at com.itextpdf.text.Image.getInstance(Image.java:245)
08-11 15:24:45.877: WARN/System.err(18022): at com.itextpdf.text.Image.getInstance(Image.java:341)
08-11 15:24:45.877: WARN/System.err(18022): at com.app.ipro.tableEvent.tableLayout(tableEvent.java:28)
08-11 15:24:45.897: WARN/System.err(18022): at com.itextpdf.text.pdf.PdfPTable.writeSelectedRows(PdfPTable.java:731)
08-11 15:24:45.897: WARN/System.err(18022): at com.itextpdf.text.pdf.PdfPTable.writeSelectedRows(PdfPTable.java:824)
08-11 15:24:45.907: WARN/System.err(18022): at com.itextpdf.text.pdf.ColumnText.goComposite(ColumnText.java:1524)
08-11 15:24:45.907: WARN/System.err(18022): at com.itextpdf.text.pdf.ColumnText.go(ColumnText.java:807)
08-11 15:24:45.907: WARN/System.err(18022): at com.itextpdf.text.pdf.ColumnText.go(ColumnText.java:795)
08-11 15:24:45.907: WARN/System.err(18022): at com.itextpdf.text.pdf.PdfDocument.addPTable(PdfDocument.java:2361)
08-11 15:24:45.907: WARN/System.err(18022): at com.itextpdf.text.pdf.PdfDocument.add(PdfDocument.java:673)
08-11 15:24:45.917: WARN/System.err(18022): at com.itextpdf.text.Document.add(Document.java:282)
08-11 15:24:45.927: WARN/System.err(18022): at com.app.ipro.MakeInvoice.addTitlePage(MakeInvoice.java:87)
08-11 15:24:45.927: WARN/System.err(18022): at com.app.ipro.MakeInvoice.main(MakeInvoice.java:45)
08-11 15:24:45.937: WARN/System.err(18022): at com.app.ipro.Other$1.onClick(Other.java:47)
08-11 15:24:45.937: WARN/System.err(18022): at android.view.View.performClick(View.java:2408)
08-11 15:24:45.937: WARN/System.err(18022): at android.view.View$PerformClick.run(View.java:8816)
08-11 15:24:45.947: WARN/System.err(18022): at android.os.Handler.handleCallback(Handler.java:587)
08-11 15:24:45.947: WARN/System.err(18022): at android.os.Handler.dispatchMessage(Handler.java:92)
08-11 15:24:45.967: WARN/System.err(18022): at android.os.Looper.loop(Looper.java:123)
08-11 15:24:45.967: WARN/System.err(18022): at android.app.ActivityThread.main(ActivityThread.java:4627)
08-11 15:24:45.977: WARN/System.err(18022): at java.lang.reflect.Method.invokeNative(Native Method)
08-11 15:24:45.977: WARN/System.err(18022): at java.lang.reflect.Method.invoke(Method.java:521)
08-11 15:24:45.987: WARN/System.err(18022): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-11 15:24:45.987: WARN/System.err(18022): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-11 15:24:45.987: WARN/System.err(18022): at dalvik.system.NativeStart.main(Native Method)
若我引用SD卡中的相同图像,那个么它工作得很完美,但我想使用assets文件夹。
请帮我说出来我们只能通过输入流从资产中打开图像。因此,首先将图像作为输入流打开,然后将其保存到临时位置,然后将保存的图像路径提供给tableEvent。谢谢您的回复。因此,我必须再次参考sdcard。是否有其他方法只保存在应用程序文件夹而不是SD卡?当然,您也可以将其保存在应用程序缓存目录中。创建pdf和其他内容后,最终从缓存目录中删除该图像。所以不需要将其保存在sd卡中?
08-11 15:24:45.817: WARN/System.err(18022): java.io.FileNotFoundException: /android_asset/tmpl1/Vector_background1.jpg (No such file or directory)
08-11 15:24:45.837: WARN/System.err(18022): at org.apache.harmony.luni.platform.OSFileSystem.openImpl(Native Method)
08-11 15:24:45.837: WARN/System.err(18022): at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:152)
08-11 15:24:45.847: WARN/System.err(18022): at java.io.FileInputStream.<init>(FileInputStream.java:82)
08-11 15:24:45.857: WARN/System.err(18022): at org.apache.harmony.luni.internal.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:85)
08-11 15:24:45.857: WARN/System.err(18022): at org.apache.harmony.luni.internal.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:184)
08-11 15:24:45.867: WARN/System.err(18022): at java.net.URL.openStream(URL.java:653)
08-11 15:24:45.867: WARN/System.err(18022): at com.itextpdf.text.Image.getInstance(Image.java:245)
08-11 15:24:45.877: WARN/System.err(18022): at com.itextpdf.text.Image.getInstance(Image.java:341)
08-11 15:24:45.877: WARN/System.err(18022): at com.app.ipro.tableEvent.tableLayout(tableEvent.java:28)
08-11 15:24:45.897: WARN/System.err(18022): at com.itextpdf.text.pdf.PdfPTable.writeSelectedRows(PdfPTable.java:731)
08-11 15:24:45.897: WARN/System.err(18022): at com.itextpdf.text.pdf.PdfPTable.writeSelectedRows(PdfPTable.java:824)
08-11 15:24:45.907: WARN/System.err(18022): at com.itextpdf.text.pdf.ColumnText.goComposite(ColumnText.java:1524)
08-11 15:24:45.907: WARN/System.err(18022): at com.itextpdf.text.pdf.ColumnText.go(ColumnText.java:807)
08-11 15:24:45.907: WARN/System.err(18022): at com.itextpdf.text.pdf.ColumnText.go(ColumnText.java:795)
08-11 15:24:45.907: WARN/System.err(18022): at com.itextpdf.text.pdf.PdfDocument.addPTable(PdfDocument.java:2361)
08-11 15:24:45.907: WARN/System.err(18022): at com.itextpdf.text.pdf.PdfDocument.add(PdfDocument.java:673)
08-11 15:24:45.917: WARN/System.err(18022): at com.itextpdf.text.Document.add(Document.java:282)
08-11 15:24:45.927: WARN/System.err(18022): at com.app.ipro.MakeInvoice.addTitlePage(MakeInvoice.java:87)
08-11 15:24:45.927: WARN/System.err(18022): at com.app.ipro.MakeInvoice.main(MakeInvoice.java:45)
08-11 15:24:45.937: WARN/System.err(18022): at com.app.ipro.Other$1.onClick(Other.java:47)
08-11 15:24:45.937: WARN/System.err(18022): at android.view.View.performClick(View.java:2408)
08-11 15:24:45.937: WARN/System.err(18022): at android.view.View$PerformClick.run(View.java:8816)
08-11 15:24:45.947: WARN/System.err(18022): at android.os.Handler.handleCallback(Handler.java:587)
08-11 15:24:45.947: WARN/System.err(18022): at android.os.Handler.dispatchMessage(Handler.java:92)
08-11 15:24:45.967: WARN/System.err(18022): at android.os.Looper.loop(Looper.java:123)
08-11 15:24:45.967: WARN/System.err(18022): at android.app.ActivityThread.main(ActivityThread.java:4627)
08-11 15:24:45.977: WARN/System.err(18022): at java.lang.reflect.Method.invokeNative(Native Method)
08-11 15:24:45.977: WARN/System.err(18022): at java.lang.reflect.Method.invoke(Method.java:521)
08-11 15:24:45.987: WARN/System.err(18022): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-11 15:24:45.987: WARN/System.err(18022): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-11 15:24:45.987: WARN/System.err(18022): at dalvik.system.NativeStart.main(Native Method)