我想在iText Library生成的pdf中设置一个背景模板(图像),如下所示:
我尝试使用类似下面的代码:
PdfReader reader = new PdfReader("./assets/sarbargandroid.pdf");
PdfImportedPage page = writer.getImportedPage(reader, 1);
PdfContentByte cb = writer.getDirectContent();
cb.addTemplate(page, 0.0, 0.0);
但它在android中不起作用,因为.addtemplate()方法需要一些awt库! 我尝试了像这样的addimage:
private void setBackground(Chapter document) {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.sarbarg);
bitmap.compress(Bitmap.CompressFormat.JPEG , 100, stream);
Image img;
try {
img = Image.getInstance(stream.toByteArray());
img.setAbsolutePosition(0, 0);
document.add(img);
} catch (BadElementException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
但它没有正常工作,因为图像不适合页面,它创建一个像这样的PDF: Click too see image
我该如何正确地做到这一点?有人帮我吗?
答案 0 :(得分:0)
你的问题有几个问题,这可以解释为什么没有人回答。我会告诉你什么是错的,然后你可以创建一个新问题。
你说:
它在android中不起作用,因为.addtemplate()方法需要一些awt库!
如果addTemplate()
方法需要AWT库,那么您使用的是iText。在Android上工作时,您应该使用iTextG:http://itextpdf.com/product/itextg
您正在使用PdfReader
,这使人们假设您要将背景图片添加到现有文档中。这意味着您使用PdfStamper
,但您的代码看起来像是在使用PdfWriter
。这是一个矛盾。
您的setBackground()
方法会将Chapter
作为参数添加到您的图像中。这是违反直觉的:
- 如果您要将背景图片添加到现有文档,则永远不会使用Chapter
对象。
- 如果您要将背景图像添加到从头创建的PDF 的每个页面,您将使用页面事件。
另一个主要问题是您创建图像并按原样添加。您没有缩放它以适合页面。
另外:如果您在现有PDF的背景中添加图像。该图像的某些部分可能会被原始文档中出现的不透明形状所覆盖。