gpt4 book ai didi

java - 无法在已刷新的页面上绘制元素

转载 作者:行者123 更新时间:2023-12-05 05:08:56 36 4
gpt4 key购买 nike

我想生成带有页码的 pdf 以及包含页码的目录。我准备生成 PDF,但无法为其添加页码。

ol.anchorLink a::after {  
content: leader('.') target-counter(attr(href), page);
}
@page {
@bottom-right {
padding-right:20px;
content: "Page " counter(page);
}
}

我使用的依赖项是 itextpdf,这 block CS 没有工作。所以我对 java 文件进行了更改

 @Override
public DataHandler getPDFVersion(StringBuffer htmlSrc, String documentTitle) throws Exception {
DataHandler dataHandler = null;
String outputFile = "test.pdf";

try (InputStream inputStream = new ByteArrayInputStream(htmlSrc.toString().getBytes());
OutputStream os = new FileOutputStream(new File(outputFile));) {
ConverterProperties converterProperties = new ConverterProperties();
PdfWriter writer = new PdfWriter(os, new WriterProperties().setFullCompressionMode(true));
PdfDocument pdfDoc = new PdfDocument(writer);
List<IElement> elements = HtmlConverter.convertToElements(inputStream, converterProperties);
Document document = new Document(pdfDoc);
document.setProperty(Property.SPLIT_CHARACTERS, new DefaultSplitCharacters() {
@Override
public boolean isSplitCharacter(GlyphLine text, int glyphPos) {
return true;
}
});


for (IElement element : elements) {
if (element instanceof AreaBreak) {
document.add((AreaBreak) element);
} else {
document.add((IBlockElement) element);
}
}

int n = pdfDoc.getNumberOfPages();
for(int i=1; i<=n; i++)
{
document.showTextAligned(new Paragraph(String.format("page %s of %s", i, n)),
559, 806, i, TextAlignment.RIGHT, VerticalAlignment.TOP, 0);
}
int g= pdfDoc.getNumberOfPages();
document.close();
dataHandler = new DataHandler(new FileDataSource(outputFile));
} catch (Exception e) {
//do not throw error
log.error("Error @ getPDFVersion() :" + e);
}
return dataHandler;
}

并且当运行 PDF 时我收到异常提示 com.itextpdf.kernel.PdfException: Cannot draw elements on already flushed pages. 所以我在 IELEMENT 之前移动了代码,我可以打印pdf 的页码,但如果我对值进行硬编码。页码为 0 我想可能是 PDF 没有生成 那么如何解决这个问题?

最佳答案

我是一个。网络开发者。我在使用itext7的时候也遇到了同样的问题。解决方法是在初始化document时将immediateflush设置为false。 iText在.Net中提供了一个三参数的构造函数。代码如下:

using (var pdfdocument = new PdfDocument(new PdfWriter(fileStream)))
{
var document = new Document(pdfdocument, PageSize.A4, false);
}

不知道Java有没有提供三参数的构造函数

关于java - 无法在已刷新的页面上绘制元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57963065/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com