Android PDF内容向右移动并被剪切以获得更宽的页面 ByteArrayOutputStream=newbytearrayoutputstream(); 位图bmp=Bitmap.createScaledBitmap(pdfBtm,(int)(pdfBtm.getWidth()),(int)(pdfBtm.getHeight()),true); compress(CompressFormat.PNG,0,stream); byte[]byteArray=stream.toByteArray(); Image img=Image.getInstance(byteArray); String pdffile=sharedPref.getString(com.appelsoft.i_file_me.Config.PdffileName,“”); int pageNumber=sharedPref.getInt(com.appelsoft.i_file_me.Config.PdfpageNumber,0); PDF阅读器=新的PDF阅读器(pdffile); 字符串文件名=pdffile.substring(pdffile.lastIndexOf(“/”)+1,pdffile.length()); System.out.println(“文件名为:”+filename); OutputStream newfile=新文件OutputStream(新文件(“/sdcard/”+filename)); Document newDocs=新文档(); PdfWriter writer=PdfWriter.getInstance(newDocs,newfile); newDocs.open(); 对于(int i=1;i

Android PDF内容向右移动并被剪切以获得更宽的页面 ByteArrayOutputStream=newbytearrayoutputstream(); 位图bmp=Bitmap.createScaledBitmap(pdfBtm,(int)(pdfBtm.getWidth()),(int)(pdfBtm.getHeight()),true); compress(CompressFormat.PNG,0,stream); byte[]byteArray=stream.toByteArray(); Image img=Image.getInstance(byteArray); String pdffile=sharedPref.getString(com.appelsoft.i_file_me.Config.PdffileName,“”); int pageNumber=sharedPref.getInt(com.appelsoft.i_file_me.Config.PdfpageNumber,0); PDF阅读器=新的PDF阅读器(pdffile); 字符串文件名=pdffile.substring(pdffile.lastIndexOf(“/”)+1,pdffile.length()); System.out.println(“文件名为:”+filename); OutputStream newfile=新文件OutputStream(新文件(“/sdcard/”+filename)); Document newDocs=新文档(); PdfWriter writer=PdfWriter.getInstance(newDocs,newfile); newDocs.open(); 对于(int i=1;i,android,pdf,itext,Android,Pdf,Itext,当我用这种方法创建PDF时,PDF的内容会移到右边。对于更宽的PDF页面,页面的某些部分会被剪切 有人知道为什么会这样吗 因为这就是代码告诉iText要做的:它从某个源文档(包括它的页边距)中获取一个完整的页面,并将其添加到iText在一个已经有自己的页边距的新页面主体中安排的内容中 OP的实际目标似乎是用一些图像替换某些文档中的单个页面。应该使用PdfStamper或PdfCopy实例 例如,使用PdfStamper可以执行以下操作: ByteArrayOutputStream stream

当我用这种方法创建PDF时,PDF的内容会移到右边。对于更宽的PDF页面,页面的某些部分会被剪切

有人知道为什么会这样吗

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

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

例如,使用
PdfStamper
可以执行以下操作:

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

谢谢你纠正我的错误语法。@AlexisAnyone知道为什么会这样-因为这就是你的代码告诉iText要做的:你从某个源文档(包括它的页边距)中获取一整页并将其添加到iText在新页面正文中安排的内容中,新页面有自己的页边距。您的目标似乎是替换某个文档中的一页。使用PdfStamper或PdfCopy。您是对的,先生。我想替换pdf文件中的一个特定页面。您能告诉我PdfCopy是如何工作的吗?我尝试了stamper,但没有解决我的问题blem.PDFCopy在其他页面上运行正常。但是我要替换的页面仍然是剪切。这可能是因为我的位图没有正确地转换为bytearray…您必须调整
addImage
调用的参数。例如,最后的
30,30
导致垂直位移30个单位,水平位移30个单位.我之前试过了,先生..但仍然有相同的问题..是否仍然可以使用iText在android中查看Pdf页面。我正在使用PDFwiwer,但我认为这导致了我的问题。是否仍然可以像在android应用中一样查看Pdf页面。?我之前试过了,先生..但仍然有相同的问题-我的答案中的代码对我有效,尤其是与h调整
addImage
调用参数的提示。请准确解释您使用该解决方案时遇到的问题,否则我几乎看不到如何帮助您。我正在使用PDFwiwer,但我认为这会导致我出现问题-首先通过在其他查看器(例如Acrobat Reader)上查看有问题的PDF来验证您的想法。实际上,我想要在PDF页面中添加签名。如果我使用Acrobat reader打开它,则无法对其应用操作。否则,我将获取PDF页面的位图并在其上添加签名图像,然后再次从该位图使用iText创建PDF。现在,我创建的PDF未正确对齐,并且在PDF页面更宽时剪切,尽管我使用了您的解决方案。
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();
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();