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

Java 如何在Android上使用PdfDocument设置PDF文件大小,java,android,pdf,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倍的空间(

我必须在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库,但我想使用原生库

更新 您可以找到两个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();

再次感谢

好吧,在有人找到或提供更好的解决方案之前,我找到了一个库,它似乎比Android API(目前)做得更好


该库可能不支持太复杂的图形,但可以满足我的需要。此外,它还压缩了pdf,现在我似乎可以将其与iOS进行比较,并说它比iOS小。

请共享一对pdf样本(内容相同但大小不同),以便进行分析。@mkl谢谢,我刚刚更新了我的帖子!从样本来看,之所以如此庞大的主要原因是安卓系统生成的PDF页面内容流没有被压缩,安卓系统内容流中的b文本是逐字母绘制的,并且在每个字母之前再次显式设置文本矩阵。对于问题a,您可能希望搜索选择压缩的某个属性。另一方面,问题b看起来Android PDF生成器的质量很差,看起来只是一个概念验证。作为a的补充:嵌入式字体也没有压缩。因此,如果压缩可以在该API中以某种方式激活,则该文件将更加精简。再次感谢您的时间,我删除了字体定义,文件增加了1KB,因此您对字体的看法是正确的,关于a,我找不到任何可用于启用/禁用压缩的标志或设置,这令人失望:(关于您找到的APW库,您可能对底部描述的错误感兴趣;它可能尚未修复。感谢您提供的其他信息,我只希望我不会遇到此类问题,语言为英语,因此我接触此类字符的机会较小,但我也将寻找解决方案。)