簡體   English   中英

Android:使用iText API合並PDF文件不起作用

[英]Android : Merge PDFs file using iText API not working

我試圖通過使用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();
        }
    }

任何想法?

謝謝

我贊成邁克爾的答案,因為這是對您問題的正確答案。

但是,在閱讀代碼時,您還有一個未知的問題:您使用了錯誤的代碼來合並PDF。 您應該使用PdfCopyPdfSmartCopy ,而不是PdfWriter

之前已經對此進行了多次解釋:

您正在使用PdfWriter的事實表明您沒有閱讀文檔

此外,您的問題聽起來好像您不知道Lowagie是一個人的名字。 實際上,這是我的名字,當有人說Lowagie iText API不起作用時,這很尷尬。 首先,因為我一直在要求停止使用那些舊版本的iText,而且還因為它聽起來像是一項個人指控,將產品與人混淆。 請參見lowagie和iText有什么區別?

請使用iText的Android端口:

http://repo.itextsupport.com//android_gae/com/itextpdf/itextgoogle/

您需要試用許可證才能在Android上使用iText。 http://demo.itextsupport.com/newslicense/

以下是合並兩個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(); 
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM