【发布时间】:2018-09-16 18:37:05
【问题描述】:
我的 Android 应用程序正在使用 PdfDocument 以编程方式生成多页 PDF 文件:
public byte[] buildPDF() {
int pageWidth = Math.round(8.5f * 72f);
int pageHeight = Math.round(11.0f * 72f);
int margin = Math.round(.5f * 72f);
int fontSize = 12;
TextPaint textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
textPaint.setColor(Color.BLACK);
textPaint.setTextSize(fontSize);
textPaint.setTypeface(Typeface.DEFAULT_BOLD);
PdfDocument document = new PdfDocument();
PdfDocument.Page page = null;
Canvas canvas = null;
for (int i=0; i<10; i++) {
PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(pageWidth, pageHeight, document.getPages().size()).create();
page = document.startPage(pageInfo);
canvas = page.getCanvas();
String content = "Content for page " + (i + 1);
canvas.drawText(content, margin, margin + fontSize, textPaint);
document.finishPage(page);
}
byte[] output = new byte[0];
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
try {
document.writeTo(outputStream);
} catch (Exception e) {
Log.d("buildPDF", "error writing PDF output");
return output;
}
output = outputStream.toByteArray();
document.close();
return output;
}
在某些情况下,我想将本地设备中的现有 PDF 文件放入这一系列页面中。最简单的工作流程是以某种方式将 PDF 文件作为数据打开,然后将其写入画布。有没有办法用 Android SDK 做到这一点?
这在 iOS 中使用 CGPDFDocumentRef 和 CGContextDrawPDFPage 很容易,但我还没有找到适用于 Android 的等效项。
如果没有内置方法,那么 Apache PDFBox 中的 multipdf 包似乎可以胜任这项工作。但是,我需要内存中的数据,如上所示,所以我认为这需要将生成的数据写入临时文件,对临时文件执行操作,然后将数据读回内存。
【问题讨论】:
标签: android pdf pdf-generation