Screen shot 我在pdf文件中添加图像以生成其pdf,因为文档问题是它自动将第一页添加为空白页,其余页面包含正常的图像。那么我应该如何克服这个问题呢。
pdfPath = dir + "/" + txtFileName.getText().toString() + ".pdf";
String pdfFileName = txtFileName.getText().toString() + ".pdf";
PdfWriter writer;
File file = new File(dir, pdfFileName);
Document document = new Document();
try {
writer = PdfWriter.getInstance(document,
new FileOutputStream(file));
HeaderFooterPageEvent event = new HeaderFooterPageEvent();
writer.setPageEvent(event);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
document.open();
Image image = null;
for (int i = 0; i < listofimage.size(); i++) {
String imgFileName = listofimage.get(i).toString();
try {
image = Image.getInstance(imgFileName);
} catch (BadElementException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
float scaler = ((document.getPageSize().getWidth()
- document.leftMargin() - document.rightMargin()) / image
.getWidth()) * 90;
Log.i("Scale Percentage", scaler + "");
image.scalePercent(scaler);
try {
document.newPage();
document.add(image);
document.addAuthor("Genetech Solutions");
} catch (DocumentException e) {
e.printStackTrace();
}
}
document.close();
HeaderFooterPageEvent
主要包括:
public void onEndPage(PdfWriter writer, Document document)
{
ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_CENTER, new Phrase("Generated by Snap Scanner Powered By Genetech Solutions"), 180, 30, 0);
ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_CENTER, new Phrase("page " + document.getPageNumber()), 550, 30, 0);
}
答案 0 :(得分:1)
我将您的代码归结为以下测试用例,删除try-catch
构造以保持简短并内联页面事件侦听器:
@Test
public void testYasirAhmedKhanOriginal() throws IOException, DocumentException
{
List<String> listofimage = Collections.nCopies(3, "src/test/resources/mkl/testarea/itext5/layer/Willi-1.jpg");
// Collections.singletonList("src/test/resources/mkl/testarea/itext5/layer/Willi-1.jpg");
File file = new File(RESULT_FOLDER, "YasirAhmedKhanOriginal.pdf");
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));
writer.setPageEvent(new PdfPageEventHelper()
{
public void onEndPage(PdfWriter writer, Document document)
{
ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_CENTER, new Phrase("Generated by Snap Scanner Powered By Genetech Solutions"), 180, 30, 0);
ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_CENTER, new Phrase("page " + document.getPageNumber()), 550, 30, 0);
}
});
document.open();
for (int i = 0; i < listofimage.size(); i++)
{
String imgFileName = listofimage.get(i).toString();
Image image = Image.getInstance(imgFileName);
float scaler = ((document.getPageSize().getWidth() - document.leftMargin() - document.rightMargin()) /
image.getWidth()) * 90;
image.scalePercent(scaler);
document.newPage();
document.add(image);
document.addAuthor("Genetech Solutions");
}
document.close();
}
结果:
没有空的首页,应该是一切......
因此,要么OP做了额外的事情导致空白页面,要么他使用了一些旧的iText版本,这可能在这方面有一些错误。
答案 1 :(得分:0)
使用document.newPage()
时,您会创建一个新页面。
document.newPage()
。
我看到你引入了HeaderFooterPageEvent
。如果您在此HeaderFooterPageEvent
中添加内容,则当前页面不为空白。我想你在这件事上做的事情你不应该这样做。
您也是以错误的顺序执行此操作:
document.newPage();
document.add(image);
首先添加新页面,然后添加图像。 (你有点抱怨说你的文件以空白页开头,这很有趣。)
请注意,如果您在newPage()
中没有做错任何事情,那么添加HeaderFooterPageEvent
就不会有问题。
为什么不像这样切换这些行:
document.add(image);
document.newPage();
现在您首先添加图像,然后创建新页面。如果页面事件写得正确,这不会导致任何问题。但是,我们无法对该页面事件发表评论,因为您没有共享HeaderFooterPageEvent
代码。
最后,这一行也是错误的:
document.addAuthor("Genetech Solutions");
您不应在document.open()
之后添加有关作者的元数据。