pdf文件在下载后以不好的方式打开

时间:2015-01-09 16:24:37

标签: java pdf itext

使用iText 2.1.7 jar(或任何更新的版本),在合并和创建pdf文件而非下载后,此文件打开,部分页面的底部未显示。当我的图像覆盖pdf文件的整个页面时,会重现该问题。下载后,我无法在新下载的pdf中看到整个图像。任何想法?

switch (type){
    case PDF_FILE : reader = new PdfReader(filePath);
                            break;
    //...code...
}if (reader != null){
     copyToWriter(out, reader, annotations, fileLabel);
}

copyToWriter函数中的代码:

private void copyToWriter(OutputStream out, PdfReader reader, Annotation[] annotations, String fileLabel) throws DocumentException, IOException, BadPdfFormatException {

        PdfDictionary outi = null;
        PdfICCBased ib     = null;

        if (reader != null) {
            reader.consolidateNamedDestinations();
            // we retrieve the total number of pages
            int n = reader.getNumberOfPages();
            List bookmarks = SimpleBookmark.getBookmark(reader);

            if (bookmarks != null) {
                // original bookmark copy and page Shift
                if (_pageOffset != 0) {
                    SimpleBookmark.shiftPageNumbers(bookmarks, _pageOffset,
                            null);
                }
            }

            if(_setMergeBookmark) {
                // we add specifics bookmarks for beginning page of each added file.
                //...code...(not used)
            }
            else {
                // original bookmark copy and page Shift
                if (bookmarks != null) {
                _master.addAll(bookmarks);
            }
            }



            _pageOffset += n;

            if (_writer == null) {
                // step 1: creation of a document-object
                 _document = new Document();
                // step 2: we create a writer that listens to the document
                 _writer = PdfWriter.getInstance(_document, out);
                if (_stamp != null) {
                    _stamp.setTotalPage( n);
                    _writer.setPageEvent(_stamp);
                }

                if(_setMergeBookmark) {
                 _writer.setViewerPreferences(PdfWriter.PageLayoutSinglePage
                            | PdfWriter.PageModeUseOutlines);
                }
                else {
                 _writer.setViewerPreferences(PdfWriter.PageLayoutSinglePage
                    | PdfWriter.PageModeUseNone);
                }
                 _writer.setViewerPreferences(PdfWriter.DisplayDocTitle);
                 if (_pdfA_pdfX) {
                    //...code... (not used)
                 }

                //
                // step 3: we open the document
                _document.open();

                //

            }



            // adding the content
            PdfContentByte cb = _writer.getDirectContent();

            // step 4: we add content
            PdfImportedPage page;
            for (int i = 0; i < n;) {
                ++i;
                page = _writer.getImportedPage(reader, i);
                // get PageSize to ensure landscape/portrait is kept
                // also look at rotation tag then we HAD TO use getPageSizeWithRotation
                // instead of getPageSize
                Rectangle gle = reader.getPageSizeWithRotation(i);
                int rotation = reader.getPageRotation(i);

                _document.setPageSize( gle);
                _document.newPage();

                float[] matf = new float[6];
                if (rotation == 90) {
                    matf[0] = 0;
                    matf[1] = -1f;
                    matf[2] = 1f;
                    matf[3] = 0;
                    matf[4] = 0;
                    matf[5] = gle.getHeight();
                    // use transformation matrix to rotate imported page according 'rotation' value
                    // cb.addTemplate(page, 0, -1f, 1f, 0, 0, gle.getHeight());
                }
                else if (rotation == 270) {
                    matf[0] = 0;
                    matf[1] = 1f;
                    matf[2] = -1f;
                    matf[3] = 0;
                    matf[4] = gle.getWidth();
                    matf[5] = 0;
                    // use transformation matrix to rotate imported page according 'rotation' value
                    // cb.addTemplate(page, 0, 1f, -1f, 0, gle.getWidth(), 0);
                }
                else { //my case here
                    matf[0] = 1f;
                    matf[1] = 0;
                    matf[2] = 0;
                    matf[3] = 1f;
                    matf[4] = 0;
                    matf[5] = 0;
                    // cb.addTemplate(page, 1f, 0, 0, 1f, 0, 0);
                }
                cb.addTemplate(page, matf[0], matf[1], matf[2], matf[3], matf[4], matf[5]);

                //copy text annotation on destination
                PdfDictionary pageannot = reader.getPageN(i);
                PdfArray annots = null;
                annots = pageannot.getAsArray(PdfName.ANNOTS);

                //if annots is null... code...

            }


        }

}

0 个答案:

没有答案