ByteArrayOutputStream stream = new ByteArrayOutputStream();
Bitmap bmp = Bitmap.createScaledBitmap(pdfBtm, (int) (pdfBtm.getWidth()), (int) (pdfBtm.getHeight()), true);
bmp.compress(CompressFormat.PNG, 0, stream);
byte[] byteArray = stream.toByteArray();
Image img = Image.getInstance(byteArray);
String pdffile = sharedPref.getString(com.appealsoft.i_file_me.Config.PdffileName, "");
int pageNumber = sharedPref.getInt(com.appealsoft.i_file_me.Config.PdfpageNumber, 0);
PdfReader reader = new PdfReader(pdffile);
String filename = pdffile.substring(pdffile.lastIndexOf("/") + 1, pdffile.length());
System.out.println("file name is :" + filename);
OutputStream newfile = new FileOutputStream(new File("/sdcard/" + filename));
Document newDocs = new Document();
PdfWriter writer = PdfWriter.getInstance(newDocs, newfile);
newDocs.open();
for (int i = 1; i <= reader.getNumberOfPages(); i++)
{
if (i == pageNumber)
{
Image img2 = Image.getInstance(byteArray);
newDocs.add(img2);
System.out.println(" i was inside...");
} else {
Image img2 = Image.getInstance(writer.getImportedPage(reader, i));
newDocs.add(img2);
}
}
newDocs.close();
当我使用此方法创建PDF时,PDF的内容会转移到右侧。对于更宽的PDF页面,页面的某些部分会被删除。
任何人都知道为什么会这样吗?
答案 0 :(得分:1)
当我使用此方法创建PDF时,PDF的内容会转移到右侧。对于更宽的PDF页面,页面的某些部分会被删除。
任何人都知道为什么会这样吗?
因为这就是代码告诉iText要做的事情:它从一些源文档(包括其边距)中获取一个完整的页面,并将其添加到iText正在新页面的主体中进行排列,该页面已经有自己的边距
OP的实际目标似乎是用某些图像替换某个文档中的单个页面。应该使用PdfStamper
或PdfCopy
个实例。
E.g。使用PdfStamper
你可以这样做:
PdfReader reader = new PdfReader(SOURCE);
int pageToReplace = NROFPAGETOREPLACE;
List<Integer> pagesToKeep = new ArrayList<Integer>();
for (int i = 1; i <= reader.getNumberOfPages(); i++)
if (i != pageToReplace) pagesToKeep.add(i);
reader.selectPages(pagesToKeep);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(TARGET));
stamper.insertPage(pageToReplace, reader.getPageSizeWithRotation(1));
Image image = Image.getInstance(IMAGESOURCE);
stamper.getOverContent(pageToReplace).addImage(image, image.getWidth(), 0, 0, image.getHeight(), 30, 30);
stamper.close();
PS:您的评论似乎表明添加到新页面的图片实际上涵盖了所有图片。在这种情况下,用
替换上面示例的最后几行是合适的Image image = Image.getInstance(IMAGESOURCE);
stamper.insertPage(pageToReplace, new Rectangle(image.getWidth(), image.getHeight());
stamper.getOverContent(pageToReplace).addImage(image, image.getWidth(), 0, 0, image.getHeight(), 0, 0);
stamper.close();