iText的合并PDF错误的Andr​​oid [英] iText merge pdf error in Android

查看:139
本文介绍了iText的合并PDF错误的Andr​​oid的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在code在Java应用程序中运行良好。但是,当我转移到Android我不能编译。错误信息:该类型java.awt.geom.AffineTransform中不能得到解决它间接地从需要的.class文件中引用的行:

  cb.addTemplate(页,0,0); //在该行编译错误

然后我尝试注释掉上面的行...但实际情况是,这一次的合并的PDF文件是在Android的创建,但没有什么里面...只有空白页。

这是用code。任何帮助是AP preciated。(还尝试同时使用droidText并分别在正常iText的罐子...仍然没有运气)

 公共无效concatPDFs(){          文档的文档=新的文件();
            尝试{
                uploadedFile.setVisibility(View.VISIBLE);
                文件SD卡= Environment.getExternalStorageDirectory();
                 uploadedFile.setText(sdCard.getAbsolutePath());
                清单<&的InputStream GT; PDF文件=新的ArrayList<&的InputStream GT;();
                pdfs.add(新的FileInputStream(/存储/ extSdCard /次数1.pdf));
                pdfs.add(新的FileInputStream(/存储/ extSdCard / 2.pdf));
                的OutputStream =新的FileOutputStream(/存储/ extSdCard / merge.pdf);
                uploadedFile.setText(添加的文件);
                清单< PdfReader>读者=新的ArrayList< PdfReader>();
                INT总页数= 0;
                迭代器<&的InputStream GT; iteratorPDFs = pdfs.iterator();                //创建PDF文件的读者。
                而(iteratorPDFs.hasNext()){
                    InputStream的PDF = iteratorPDFs.next();
                    PdfReader pdfReader =新PdfReader(PDF);
                    readers.add(pdfReader);
                    总页数+ = pdfReader.getNumberOfPages();
                }
                //创建OutputStream的作家
                PdfWriter作家= PdfWriter.getInstance(文件,OutputStream的);
                uploadedFile.setText(PdfWriter);
                document.open();
                BASEFONT BF = BaseFont.createFont(BaseFont.HELVETICA,
                        BaseFont.CP1252,BaseFont.NOT_EMBEDDED);
                PdfContentByte CB = writer.getDirectContent(); //保存的PDF
                //数据                PdfImportedPage页面;
                INT currentPageNumber = 0;
                INT pageOfCurrentReaderPDF = 0;
                迭代器< PdfReader> iteratorPDFReader = readers.iterator();                //循环的PDF文件,并​​添加到输出。
                而(iteratorPDFReader.hasNext()){
                    PdfReader pdfReader = iteratorPDFReader.next();                    //目标为每个源页面创建一个新的页面。
                    而(pageOfCurrentReaderPDF< pdfReader.getNumberOfPages()){
                        document.newPage();
                        pageOfCurrentReaderPDF ++;
                        currentPageNumber ++;
                        页= writer.getImportedPage(pdfReader,
                                pageOfCurrentReaderPDF);
                        cb.addTemplate(页面,0,0);
                        uploadedFile.setText(getImportedPage);
                        // code的分页。
                        如果(真){
                            cb.beginText();
                            cb.setFontAndSize(BF,9);
                            cb.showTextAligned(PdfContentByte.ALIGN_CENTER,
                                    + currentPageNumber +的+总页数,520
                                    5,0);
                            cb.endText();
                        }
                    }
                    pageOfCurrentReaderPDF = 0;
                }
                outputStream.flush();
                document.close();
                outputStream.close();
                uploadedFile.setText(完成PDF阅读器);
            }赶上(例外五){
                e.printStackTrace();
            } {最后
                如果(document.isOpen())
                    document.close();
                尝试{
                    如果(OutputStream的!= NULL)
                        outputStream.close();
                }赶上(IOException异常IOE){
                    ioe.printStackTrace();
                }
            }
    }


解决方案

我upvoted的previous答案,但我想补充一点,user614454使用,而不是官方Android端口的iText的Java版本。官方Android端口可以在这里找到: http://itextsupport.com/download/android.html

在此官方Android端口由iText的所需的所有java.awt中的类都将替换为轻量级的替代品。

请注意,我是iText的原作者。我拆下来DroidText一个参考,因为这是一个iText的版本,不应该再使用一个Android端口:的http:// lowagie。 COM / itext2

The code works well in Java application. But I can't compile when I transfer to Android. Error message: "The type java.awt.geom.AffineTransform cannot be resolved. It is indirectly referenced from required .class files" at the line:

cb.addTemplate(page, 0, 0);//compile error at this line

Then I tried commenting out the above line...but what happened was, this time the merged pdf file was created in Android but there's nothing inside...only blank pages.

This is the code used. Any help is appreciated.(Tried also using both droidText and the normal iText jars separately...still no luck)

public void concatPDFs() {

          Document document = new Document();
            try {
                uploadedFile.setVisibility(View.VISIBLE);
                File sdCard = Environment.getExternalStorageDirectory();
                 uploadedFile.setText(sdCard.getAbsolutePath());
                List<InputStream> pdfs = new ArrayList<InputStream>();
                pdfs.add(new FileInputStream("/storage/extSdCard/1.pdf"));
                pdfs.add(new FileInputStream("/storage/extSdCard/2.pdf"));
                outputStream = new FileOutputStream("/storage/extSdCard/merge.pdf");
                uploadedFile.setText("Added Files");
                List<PdfReader> readers = new ArrayList<PdfReader>();
                int totalPages = 0;
                Iterator<InputStream> iteratorPDFs = pdfs.iterator();

                // Create Readers for the pdfs.
                while (iteratorPDFs.hasNext()) {
                    InputStream pdf = iteratorPDFs.next();
                    PdfReader pdfReader = new PdfReader(pdf);
                    readers.add(pdfReader);
                    totalPages += pdfReader.getNumberOfPages();
                }
                // Create a writer for the outputstream
                PdfWriter writer = PdfWriter.getInstance(document, outputStream);
                uploadedFile.setText("PdfWriter");
                document.open();
                BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA,
                        BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
                PdfContentByte cb = writer.getDirectContent(); // Holds the PDF
                // data

                PdfImportedPage page;
                int currentPageNumber = 0;
                int pageOfCurrentReaderPDF = 0;
                Iterator<PdfReader> iteratorPDFReader = readers.iterator();

                // Loop through the PDF files and add to the output.
                while (iteratorPDFReader.hasNext()) {
                    PdfReader pdfReader = iteratorPDFReader.next();

                    // Create a new page in the target for each source page.
                    while (pageOfCurrentReaderPDF < pdfReader.getNumberOfPages()) {
                        document.newPage();
                        pageOfCurrentReaderPDF++;
                        currentPageNumber++;
                        page = writer.getImportedPage(pdfReader,
                                pageOfCurrentReaderPDF);
                        cb.addTemplate(page, 0, 0);
                        uploadedFile.setText("getImportedPage");
                        // Code for pagination.
                        if (true) {
                            cb.beginText();
                            cb.setFontAndSize(bf, 9);
                            cb.showTextAligned(PdfContentByte.ALIGN_CENTER, ""
                                    + currentPageNumber + " of " + totalPages, 520,
                                    5, 0);
                            cb.endText();
                        }
                    }
                    pageOfCurrentReaderPDF = 0;
                }
                outputStream.flush();
                document.close();
                outputStream.close();
                uploadedFile.setText("Done Pdf");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (document.isOpen())
                    document.close();
                try {
                    if (outputStream != null)
                        outputStream.close();
                } catch (IOException ioe) {
                    ioe.printStackTrace();
                }
            }
    }

解决方案

I upvoted the previous answer, but I want to add that user614454 is using the Java version of iText instead of the official Android port. The official Android port can be found here: http://itextsupport.com/download/android.html

In this official Android port all java.awt classes that are needed by iText are replaced with light-weight alternatives.

Note that I'm the original author of iText. I removed a reference to DroidText because that's an Android port of an iText version that shouldn't be used anymore: http://lowagie.com/itext2

这篇关于iText的合并PDF错误的Andr​​oid的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆