Java 如何在Android上使用PdfDocument设置PDF文件大小
我必须在Android上将一些文本和小图像转换为PDF文档,为此我使用API 19中添加的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倍的空间(
PdfDocument
这样做的问题是,由这个生成的PDF比在iOS上生成的PDF大大约3倍(文件大小)
此外,我还尝试使用在线免费压缩工具压缩Android和iOS PDF文件,结果如下:
- iOS:压缩无法执行任何操作,因为压缩已经足够
- Android:生成的PDF与iOS版相同(大约小3倍)
// 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库,您可能对底部描述的错误感兴趣;它可能尚未修复。感谢您提供的其他信息,我只希望我不会遇到此类问题,语言为英语,因此我接触此类字符的机会较小,但我也将寻找解决方案。)