我的目标是将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

07-24 09:22