如何在Android上使用PdfDocument设置PDF文件大小

时间:2015-01-14 11:10:37

标签: java android pdf

我必须在Android上将一些文本和一个小图像转换为PDF文档,为此我在API 19中添加了PdfDocument

与此相关的是,这个生成的PDF比iOS上生成的PDF大3倍(文件大小)。

此外,我尝试使用在线免费压缩工具压缩Android和iOS PDF文件,结果如下:

  • iOS :压缩无法执行任何操作,因为已经足够压缩了

  • Android :结果PDF与iOS版相同(约小3倍)

即使我从文档中删除了图像,生成的Android PDF也比iOS中包含图像的PDF大约多2倍的空间(正如我所说,图像很小)..

正如我所看到的,没有方法或属性可以设置来改变PDF文件的质量或压缩..有没有人也有这个问题?

你可以给我一些建议吗?也许有些java库只能压缩pdf?

谢谢!

PS:我不想为PDF使用付费库,我知道有iText库但我想使用原生库。

更新

Here你会发现两个PDF样本,一个用于Android,一个用于iOS。

用于在android中生成pdf的代码是:

// Create a shiny new (but blank) PDF document in memory
            PdfDocument document = new PdfDocument();

            // crate a page description
            PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(612, 792, 1).create();

            // create a new page from the PageInfo
            PdfDocument.Page page = document.startPage(pageInfo);

            TextPaint textPaint = new TextPaint();
            textPaint.setColor(Color.BLACK);
            textPaint.setTextSize(12);
            textPaint.setTextAlign(Paint.Align.LEFT);

            Typeface textTypeface = Typeface.create(Typeface.MONOSPACE, Typeface.NORMAL);
            textPaint.setTypeface(textTypeface);

            String text = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores legere me lius quod ii legunt saepius. Claritas est etiam processus dynamicus, qui sequitur mutationem consuetudium lectorum. Mirum est notare quam littera gothica, quam nunc putamus parum claram, anteposuerit litterarum formas humanitatis per seacula quarta decima et quinta decima. Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum.";

            StaticLayout mTextLayout = new StaticLayout(text, textPaint, page.getCanvas().getWidth(),
                    Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);

            mTextLayout.draw(page.getCanvas());

            // do final processing of the page
            document.finishPage(page);

            mPDFFilePath = new File(getFilesDir(), "demo_android.pdf");

            try
            {
                FileOutputStream mFileOutStream = new FileOutputStream(mPDFFilePath);

                // write the document content
                document.writeTo(mFileOutStream);
                mFileOutStream.flush();
                mFileOutStream.close();

            }
            catch(Exception e)
            {
                Log.v("log_tag", e.toString());
            }

            //close the document
            document.close();

再次感谢!

1 个答案:

答案 0 :(得分:0)

好的,直到有人找到或找到更好的解决方案,我发现this库似乎比Android API(目前)的工作做得更好。

图书馆可能不支持太复杂的图纸,但它可以满足我的需要。它也压缩了pdf,现在我可以将它与iOS进行比较,并说它比它小。