Reputation: 671
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();
When I create PDF with this method, contents of PDF get shifted to right side. For wider PDF pages, some of the part of page gets cut.
Anyone know why this is so?
Upvotes: 1
Views: 629
Reputation: 95928
When I create PDF with this method, contents of PDF get shifted to right side. For wider PDF pages, some of the part of page gets cut.
Anyone know why this is so?
Because that is what the code tells iText to do: It takes a complete page from some source document (including its margins) and adds it to the stuff iText is arranging in the body of a new page which already has its own margins.
The OP's actual objective seems to be to replace a single page in some document with some image. A PdfStamper
or PdfCopy
instance should be used for that.
E.g. using PdfStamper
you could do something like this:
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: Your comments seem to suggest that the image added to the new page actually encompasses all of it. In that case it is appropriate to replace the last lines of the example above with
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();
Upvotes: 1