所以我在写作的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();
}