我的目标是将pdf的内容叠加到另一个PDF上。
这是我使用的代码:
AssetManager assetManager = getAssets();
InputStream istr = null;
PdfReader reader = null;
String str = null;
int n = 0;
try
{
istr =(InputStream) assetManager.open("Chemistry.pdf");
reader=new PdfReader(istr);
Document document = new Document();
PdfWriter writer= PdfWriter.getInstance(document, new FileOutputStream(Environment.getExternalStorageDirectory()+ "/newhelloPrayToGod.pdf"));
document.open();
document.add(new Paragraph("Hello World"));
document.newPage();
PdfContentByte canvas = writer.getDirectContent();
PdfImportedPage page;
page = writer.getImportedPage(reader, 23);
canvas.addTemplate(page, 1, 0, 0, 0, 0, 0);
document.close();
Log.d("OK", "done");
}
catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
我已经使用了itextG 5.4.3。
我什至在我的libs文件夹中添加了.jar的副本。
代码可以编译,但是在运行时会崩溃。
这是错误日志:
附言
我没有使用任何许可证文件(.xml)或任何此类文件。
上面的代码就是我所使用的。
我也尝试使用iText jar(而不是iTextG)。
这样,代码就可以了,但是如果我在代码中使用了这一行
canvas.addTemplate(page, 1, 0, 0, 0, 0, 0);
它不会与此错误一起编译
我该怎么做才能在canvas上运行canvas,addtemplate()?
我想将pdf叠加在另一个上。
最佳答案
我假设异常发生在这里:
istr =(InputStream) assetManager.open("Chemistry.pdf");
例外
java.lang.ClassCastException: android.content.res.AssetManager$AssetInputStream cannot be cast to com.itextpdf.text.pdf.codec.Base64$InputStream
指示该代码行中的
InputStream
不是预期的java.io
变体。您最有可能进口了
import com.itextpdf.text.pdf.codec.Base64.InputStream
当你真正想要
import java.io.InputStream