我有一个代码可以动态创建字节输入流,然后将其转换为PDF。我使用的是iText 5.1.2版本。代码调用Pdfreader上的getNumberOfPages()方法迭代它并构建完整的PDF,但每次此方法返回1.并且只打印第一页。应该放在第二页的数据正在丢失。 当我看到要转换为PDF的字符串内容时,我可以看到来自上游的完整数据。以下是我的代码:
int getPageCount(String str) throws Exception{
Document doc = new Document();
ByteArrayOutputStream out = new ByteArrayOutputStream();;
str = str.replaceAll("</lf>", "\n");
PdfCopy copy = new PdfCopy(doc, out);
doc.open();
PdfReader reader;
reader = new PdfReader(new ByteArrayInputStream(str.getBytes()));
int i = reader.getNumberOfPages();
for (int page = 0; page < i;) {
copy.addPage(copy.getImportedPage(reader, ++page));
}
copy.freeReader(reader);
doc.close();
out.flush();
return i;
}
答案 0 :(得分:2)
根据我对您的问题的理解,您正在尝试通过将某个字符串打印到pdf文档来估算要占用的页数。
更好(iText7 !!)这样做的方法是:
public static void main(String[] args)
{
for(int i=0;i<100;i++)
System.out.println(i + "\t" + getPageCount(lipsum(i)));
}
static int getPageCount(String str)
{
OutputStream out = new ByteArrayOutputStream();
PdfWriter writer = new PdfWriter(out);
PdfDocument pdfDocument = new PdfDocument(writer);
Document layoutDocument = new Document(pdfDocument);
layoutDocument.add(new Paragraph(str));
return pdfDocument.getNumberOfPages();
}
static String lipsum(int nofRepeats)
{
String retval = "";
String base = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
for(int i=0;i<nofRepeats;i++)
{
retval += base;
}
return retval;
}