我试图通过使用iText API合并pdf文件将两个或多个PDF文档合并为一个。但结果我得到0字节大小的合并pdf。我发布我的代码如下所示。我尝试使用iText。 jar文件也可以给出相同的0大小pdf。
得到了这个: - “ 无法找到类com.itextpdf.text.pdf.PdfPrinterGraphics2D',从方法com.itextpdf.text.pdf.PdfContentByte.createPrinterGraphicsShapes <引用/强>”。 我仍然没有取得任何成功。
代码:
public class ItextMerge {
public static void main() {
List<InputStream> list = new ArrayList<InputStream>();
try {
// Source pdfs
list.add(new FileInputStream(new File("mnt/sdcard/nocturia.pdf")));
list.add(new FileInputStream(new File("mnt/sdcard/Professional Android Application Development.pdf")));
// Resulting pdf
OutputStream out = new FileOutputStream(new File("mnt/sdcard/newmerge.pdf"));
doMerge(list, out);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Merge multiple pdf into one pdf
*
* @param list
* of pdf input stream
* @param outputStream
* output file output stream
* @throws DocumentException
* @throws IOException
*/
public static void doMerge(List<InputStream> list, OutputStream outputStream)
throws DocumentException, IOException {
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, outputStream);
document.open();
PdfContentByte cb = writer.getDirectContent();
for (InputStream in : list) {
PdfReader reader = new PdfReader(in);
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
document.newPage();
//import the page from source pdf
PdfImportedPage page = writer.getImportedPage(reader, i);
//add the page to the destination pdf
// cb.addTemplate(page, 0, 0);
// cb.addTemplate(page, 0, 0);
}
}
outputStream.flush();
document.close();
outputStream.close();
}
}
有什么想法吗?
谢谢
答案 0 :(得分:3)
我赞成迈克尔的答案,因为这是你问题的正确答案。
但是,阅读您的代码时,您还有另一个您不知道的问题:您使用了错误的代码来合并PDF。您应该使用PdfCopy
或PdfSmartCopy
,而不是PdfWriter
!
之前已经多次解释过:
您使用PdfWriter的事实表明您没有阅读the documentation。
此外,你的问题听起来好像你不知道Lowagie是一个人的名字。实际上,这是我的名字,当有人说, Lowagie iText API不能正常工作时,这是非常尴尬的。对于初学者来说,因为我一直在问iText的stop using those old versions,但也因为这听起来像个人指责,使产品与人类混淆。见What is the difference between lowagie and iText?
答案 1 :(得分:2)
请使用iText的Android端口:
http://repo.itextsupport.com//android_gae/com/itextpdf/itextgoogle/
您需要一个试用许可证才能在Android上使用iText; http://demo.itextsupport.com/newslicense/
答案 2 :(得分:1)
下面是合并两个pdf文件的简单代码。
try{
String doc1 = FOLDER_PATH + "Doc1.pdf";
String doc2 = FOLDER_PATH + "Doc2.pdf";
String resultDocFile = FOLDER_PATH + "ResultDoc.pdf";
PdfReader reader1 = new PdfReader(doc1);
Document resultDoc = new Document();
PdfCopy copy = new PdfCopy(resultDoc, new FileOutputStream(resultDocFile));
resultDoc.open();
//Copying First Document
for(int i = 1; i <= reader1.getNumberOfPages(); i++) {
copy.addPage(copy.getImportedPage(reader1, i));
}
PdfReader reader2 = new PdfReader(doc2);
//Copying Second Document
for(int i = 1; i <= reader2.getNumberOfPages(); i++) {
copy.addPage(copy.getImportedPage(reader2, i));
}
resultDoc.close();
} catch (Exception e){
e.printStackTrace();
}