PDF内容向右移动并切换为更宽的页面

时间:2014-10-09 10:20:12

标签: android pdf itext

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页面,页面的某些部分会被删除。

任何人都知道为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

  

当我使用此方法创建PDF时,PDF的内容会转移到右侧。对于更宽的PDF页面,页面的某些部分会被删除。

     

任何人都知道为什么会这样吗?

因为这就是代码告诉iText要做的事情:它从一些源文档(包括其边距)中获取一个完整的页面,并将其添加到iText正在新页面的主体中进行排列,该页面已经有自己的边距

OP的实际目标似乎是用某些图像替换某个文档中的单个页面。应该使用PdfStamperPdfCopy个实例。

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();