- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想使用 KitKat 中引入的 PdfDocument
android 类从 View 生成 PDF 文件。我设法做到了,到目前为止文件生成正常,最终得到了正确的 PDF。唯一的问题是文件很大,一页就有 12Mb。有没有办法减小文件大小?
我用来生成 PDF 的代码是:
public static File generateDocument(Activity activity, String fileName, ViewGroup container) throws IOException{
File f = new File(activity.getExternalFilesDir(null), fileName);
PdfDocument document = new PdfDocument();
try{
for(int i=0;i<container.getChildCount();i++){
View v = container.getChildAt(i);
PdfDocument.PageInfo.Builder pageBuilder = new PdfDocument.PageInfo.Builder(v.getWidth(), v.getHeight(), i);
Page page = document.startPage(pageBuilder.create());
v.draw(page.getCanvas());
document.finishPage(page);
}
document.writeTo(new FileOutputStream(f));
} finally{
if(document!=null){
document.close();
}
}
return f;
}
最佳答案
万一有人还在寻找解决方案...我正在从事一个从图像生成 PDF 的项目,但对 Android 的 PdfDocument 和第 3 方 生成的文件大小不满意>AndroidPdfWriter APW .
经过一些试验后,我最终使用了 Apache 的 PdfBox ,这给了我一个大约 80K 的 PDF 文件(A4 尺寸和一张 1960x1080 图像),而使用 PdfDocument 或 AndroidPdfWriter 时通常是 2~3M。
PDDocument document = new PDDocument();
PDPage page = new PDPage(PDRectangle.A4);
document.addPage(page);
// Define a content stream for adding to the PDF
contentStream = new PDPageContentStream(document, page);
Bitmap bimap = _get_your_bitmap_();
// Here you have great control of the compression rate and DPI on your image.
// Update 2017/11/22: The DPI param actually is useless as of current version v1.8.9.1 if you take a look into the source code. Compression rate is enough to achieve a much smaller file size.
PDImageXObject ximage = JPEGFactory.createFromImage(document, bitmap, 0.75, 72);
// You may want to call PDPage.getCropBox() in order to place your image
// somewhere inside this page rect with (x, y) and (width, height).
contentStream.drawImage(ximage, 0, 0);
// Make sure that the content stream is closed:
contentStream.close();
document.save(_your_file_path_);
document.close();
=====
顺便说一句。我猜他们生成巨大文件的原因是因为他们在写入 PDF 文件时不压缩图像数据。如果您查看 AndroidPdfWriter 的 XObjectImage.deflateImageData() 方法,您会看到它使用 java.util.zip.Deflater.NO_COMPRESSION
选项来写入图像数据,如果您有尺寸为 1960x1080 的图片。如果您将选项更改为例如Deflater.BEST_COMPRESSION
你得到的文件要小得多,但我处理一个页面最多需要 3-4 秒,这是 Not Acceptable 。
关于Android PdfDocument 文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22805726/
我对 PDFDocuments 有疑问。如何将 PdfDocument 对象的特定页面复制到另一个 PdfDocument 对象。 我尝试过使用 moveTo 方法,但它不起作用,我也尝试过使用 co
我有一个包含多个 PDF 的列表,我想将它们全部合并到一个 PdfDocument(我使用 iText),然后将这个 PdfDocument 转换成一个 ByteArrayOutputStream(或
我有一个 Windows 服务,可以即时合并 PDF,然后将它们移动到另一个位置。在大多数情况下,我无法控制某人想要合并的内容。碰巧经常会处理损坏的 PDF,因此创建新的 PdfDocument 会抛
我正在使用 Android 创建一个 Pdf 文件 PdfDocument类(class)。我从 XML 文件(ConstraintLayout 中的 LinearLayout)扩展布局,然后在运行时
我想使用 KitKat 中引入的 PdfDocument android 类从 View 生成 PDF 文件。我设法做到了,到目前为止文件生成正常,最终得到了正确的 PDF。唯一的问题是文件很大,一页
我正在使用 Android Studio 并尝试让我的应用生成 PDF。我已经设置了一个 Activity 来生成我希望我的 PDF 具有的内容。如果我让它显示在屏幕上,这很好用。 Activity
嘿,我已经在位图中转换了我的自定义 ListView 。我的位图的大小很大所以我想使用 PdfDocument 类在两个单独的 pdf 文件页面中打印该位图。我已经搜索过相同但没有得到适当的解决方案。
我目前正在尝试拆分 PDF 文件,然后保存每个文件 PdfDocument到一个新文件。问题是我找不到任何方法来附加新的 PdfWriter到现有 PdfDocument .这是我目前用来打开和拆分
我正在桌面和手持设备之间发送文档,并且我想向 PDF 添加元数据 header ,如下所示。 \n {"fileInfoEncodedInJson\": {"filename":"My Prin
因此,在我的应用程序中,我将图像上传到公司服务器 然后使用内置的 PDFdocument 方法将这些图像转换为 PDF, 现在我的问题是我试图通过添加 IF 语句来动态生成 PDF。因此,我的图像被加
我正在尝试编写一个简单的函数来获取 PDF 中的页数。我现在看到的每个代码示例似乎都无法使用 Swift 3,而且 Xcode 推荐的任何内容仍然不起作用。 func pageCount(filepa
我将 pdfdocument 添加到 PDFView 。但它显示出优势,也显示出慢跑。如何删除此边距。并且有什么方法可以将 pdfdocument 设置到左上角的位置。 最佳答案 我认为这有助于解决问
我遇到一些用 C# 编写的 Windows 应用商店应用程序的问题。 该应用程序加载一个在数据库中存储为字节数组的 PDF 文件,并尝试在其自己的 XAML View 中呈现图像对象中的第一页。代码如
我正在尝试使用 Android 原生 PdfDocument 类(来自 api 19)创建一个简单的 PDF 文档。我想要的是有一个 XML 布局文件,例如称为 pdf_doc.xml,然后在创建 P
在 PdfDocument.Page 上绘图时,我遇到了图像变大的问题。该应用程序适用于运行 Android 4.4.4(API 级别 19)的设备。 我正在生成一个 pdf 文档并添加一个图像,如下
PdfDocument document = new PdfDocument(); // crate a page description PageInfo pageI
我有一个 PDFDocument(当然由 PDFPages 组成),我需要一个 CGImageRef 来粘贴到我的 IKImageView 中。 目前,我从 PDFPage 获取数据表示,将其放入 N
有什么方法可以将空白页添加到现有的 PdfDocument 中吗?我创建了一个这样的方法: public void addEmptyPage(PdfDocument pdfDocument){
我在应用程序文档文件夹中存储了一个 PDF 文件。 我有一个 PDFView 作为我的 View Controller View 的 subview 。我可以从文件中加载 PDF 并显示它。没问题。
我正在使用 PDFKit 通过 pdfView.document = document 函数在 PDFView 中显示 PDF 文件。 问题在于,我也在使用 UIDocumentPicker API,
我是一名优秀的程序员,十分优秀!