OpenPDF columnText.go 正在创建损坏的文档
OpenPDF columnText.go creating corrupt document
我一直收到
的错误
当我尝试使用 columnText 写入 PDF 时。 setSimpleColumn()
以前工作正常,但现在这段代码抛出错误,当我尝试使用 setColumns()
时它也抛出错误。我想不出是什么导致了错误。我应该以某种方式关闭 columnText 吗?
直接相关的代码是:
fun testBox(content: List, font: List, page: Int, leftLimit: Float, rightLimit: Float, topLimit: Float, bottomLimit: Float){
val columnText = ColumnText(setCanvas("$filepath$name.pdf",page))
columnText.alignment = ALIGN_JUSTIFIED
columnText.runDirection = RUN_DIRECTION_RTL
columnText.setSimpleColumn(leftLimit, bottomLimit, rightLimit, getRectangle("LETTER").top-topLimit)
var i = 0
while (i < content.size) {
columnText.addText(Chunk(content[i], font[i]))
columnText.go()
i++
}
}
如果需要,我会展示更多代码,但我认为其余代码与问题无关。
我真的很困惑,我找不到关于这个问题的太多信息。
这是生成的文件:
https://drive.google.com/file/d/135EhLyiyDj6iAexUJ0upRdG6eXHYXVdw/view?usp=sharing
编辑:
我忘了我为了节省一堆代码而制作了函数setCanvas
,这里是函数:
fun setCanvas(file: String, page: Int): PdfContentByte? {
val reader = PdfReader(file)
val stamper = PdfStamper(reader, FileOutputStream(File(file)))
if(reader.numberOfPages < page){ stamper.insertPage(reader.numberOfPages + (page-reader.numberOfPages), reader.getPageSize(1) ?: getRectangle("LETTER")); if (page - reader.numberOfPages != 1){throw Error("EMPTY PAGE!")}}
return stamper.getOverContent(page)
}
编辑 2:[合并两个函数]
testBox(listOf(content1,content2,content3), listOf(font,fontBold,font), 1, document.left(), document.right(), document.bottom(),document.top())
fun testBox(content: List<String>, font: List<Font>, page: Int, leftLimit: Float, rightLimit: Float, topLimit: Float, bottomLimit: Float){
val reader = PdfReader("$filepath$name.pdf")
val stamper = PdfStamper(reader, FileOutputStream(File("$filepath$name - edit.pdf")))
if(reader.numberOfPages < page){ stamper.insertPage(reader.numberOfPages + (page-reader.numberOfPages), reader.getPageSize(1) ?: getRectangle("LETTER")); if (page - reader.numberOfPages > 0){throw Error("EMPTY PAGE!")}}
val columnText = ColumnText(stamper.getOverContent(page))
columnText.alignment = ALIGN_JUSTIFIED
columnText.runDirection = RUN_DIRECTION_RTL
columnText.setSimpleColumn(leftLimit, bottomLimit, getRectangle("LETTER").right - rightLimit, getRectangle("LETTER").top- topLimit)
var i = 0
while (i<content.size) {
columnText.addText(Chunk(content[i], font[i]))
columnText.go()
i++
}
}
link:
https://drive.google.com/file/d/1ybvDVSxKOJdbnA2fSRjEmxlDszIktWTL/view?usp=sharing
您的原始代码中有两个错误:
- 您使用相同的源文件和目标文件进行标记。
- 您没有保留对
PdfStamper
的引用以关闭它在 处理 PDF 之后。
第一个问题导致文件在完全读取之前被截断。这是您在编辑中修复的。
第二个可能导致您输出的 PDF 没有完成,缺少必要的预告片。
在解决了第二个问题之后,您的代码终于停止生成损坏的文件。
我一直收到
的错误当我尝试使用 columnText 写入 PDF 时。 setSimpleColumn()
以前工作正常,但现在这段代码抛出错误,当我尝试使用 setColumns()
时它也抛出错误。我想不出是什么导致了错误。我应该以某种方式关闭 columnText 吗?
直接相关的代码是:
fun testBox(content: List, font: List, page: Int, leftLimit: Float, rightLimit: Float, topLimit: Float, bottomLimit: Float){
val columnText = ColumnText(setCanvas("$filepath$name.pdf",page))
columnText.alignment = ALIGN_JUSTIFIED
columnText.runDirection = RUN_DIRECTION_RTL
columnText.setSimpleColumn(leftLimit, bottomLimit, rightLimit, getRectangle("LETTER").top-topLimit)
var i = 0
while (i < content.size) {
columnText.addText(Chunk(content[i], font[i]))
columnText.go()
i++
}
}
如果需要,我会展示更多代码,但我认为其余代码与问题无关。
我真的很困惑,我找不到关于这个问题的太多信息。
这是生成的文件: https://drive.google.com/file/d/135EhLyiyDj6iAexUJ0upRdG6eXHYXVdw/view?usp=sharing
编辑:
我忘了我为了节省一堆代码而制作了函数setCanvas
,这里是函数:
fun setCanvas(file: String, page: Int): PdfContentByte? {
val reader = PdfReader(file)
val stamper = PdfStamper(reader, FileOutputStream(File(file)))
if(reader.numberOfPages < page){ stamper.insertPage(reader.numberOfPages + (page-reader.numberOfPages), reader.getPageSize(1) ?: getRectangle("LETTER")); if (page - reader.numberOfPages != 1){throw Error("EMPTY PAGE!")}}
return stamper.getOverContent(page)
}
编辑 2:[合并两个函数]
testBox(listOf(content1,content2,content3), listOf(font,fontBold,font), 1, document.left(), document.right(), document.bottom(),document.top())
fun testBox(content: List<String>, font: List<Font>, page: Int, leftLimit: Float, rightLimit: Float, topLimit: Float, bottomLimit: Float){
val reader = PdfReader("$filepath$name.pdf")
val stamper = PdfStamper(reader, FileOutputStream(File("$filepath$name - edit.pdf")))
if(reader.numberOfPages < page){ stamper.insertPage(reader.numberOfPages + (page-reader.numberOfPages), reader.getPageSize(1) ?: getRectangle("LETTER")); if (page - reader.numberOfPages > 0){throw Error("EMPTY PAGE!")}}
val columnText = ColumnText(stamper.getOverContent(page))
columnText.alignment = ALIGN_JUSTIFIED
columnText.runDirection = RUN_DIRECTION_RTL
columnText.setSimpleColumn(leftLimit, bottomLimit, getRectangle("LETTER").right - rightLimit, getRectangle("LETTER").top- topLimit)
var i = 0
while (i<content.size) {
columnText.addText(Chunk(content[i], font[i]))
columnText.go()
i++
}
}
link: https://drive.google.com/file/d/1ybvDVSxKOJdbnA2fSRjEmxlDszIktWTL/view?usp=sharing
您的原始代码中有两个错误:
- 您使用相同的源文件和目标文件进行标记。
- 您没有保留对
PdfStamper
的引用以关闭它在 处理 PDF 之后。
第一个问题导致文件在完全读取之前被截断。这是您在编辑中修复的。
第二个可能导致您输出的 PDF 没有完成,缺少必要的预告片。
在解决了第二个问题之后,您的代码终于停止生成损坏的文件。