Android打印纯文本和可能的PDF

时间:2018-02-04 02:37:10

标签: android pdf printing

所以我在写作的Android应用程序中有一些奇怪的要求。这是一个快速摘要。

应用中有一个产品详情页面。用户应该能够从该页面打印该产品的详细信息。通过在webview中创建打印适配器或打印,这本身就非常简单。

但要求的次要部分是在打印中包含PDF文档,如果产品有。 < - 那是绊倒我的部分。

我可以自己打印PDF。我可以单独打印纯文本。

但如何在一个打印作业中一起打印纯文本和PDF?

这是我使用打印制作的第一个应用程序,因此我并不是很清楚所有的细节。任何帮助将不胜感激!

更新

根据@TimBiegeleisen的建议,我查看了PDFBox,它对于合并非常有用。创建简单的PDF时有点迟钝,所以我使用Android PdfDocument来创建PDF,然后使用PDFBox将其与其他PDF合并。以下是最终起作用的一个例子:

View rootView = getLayoutInflater()
    .inflate(R.layout.pdf_layout_sample, null, false)
    .findViewById(R.id.print_kit_detail);

((TextView) rootView
    .findViewById(R.id.dynamic_text))
    .setText(R.string.some_text);

PdfDocument document = new PdfDocument();

// this creates an 8.5" x 11" PDF with .5" margins
PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(612, 792, 1)
    .setContentRect(new Rect(36, 36, 576, 756))
    .create();
PdfDocument.Page page = document.startPage(pageInfo);

Canvas canvas = page.getCanvas();
int pageWidth = canvas.getWidth();
int pageHeight = canvas.getHeight();
int measureWidth = View.MeasureSpec.makeMeasureSpec(pageWidth, View.MeasureSpec.EXACTLY);
int measuredHeight = View.MeasureSpec.makeMeasureSpec(pageHeight, View.MeasureSpec.EXACTLY);

rootView.measure(measureWidth, measuredHeight);
rootView.layout(0, 0, pageWidth, pageHeight);
rootView.draw(canvas);

document.finishPage(page);

try {
    File file = File.createTempFile("temp_file", ".pdf");
    OutputStream os = new FileOutputStream(file);
    document.writeTo(os);
    document.close();
    os.close();

    // PDFBox usage starts here
    PDFMergerUtility merger = new PDFMergerUtility();
    merger.setDestinationFileName(getFilesDir().getAbsolutePath() + "/created-filename.pdf");
    merger.addSource(file.getAbsolutePath());
    merger.addSource(new File("path-to-product.pdf"));
    merger.mergeDocuments();

    // The code to print...
} catch (IOException e) {
    e.printStackTrace();
}

0 个答案:

没有答案