首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenPDF columnText.go创建损坏文档

OpenPDF columnText.go创建损坏文档
EN

Stack Overflow用户
提问于 2021-07-01 03:02:37
回答 1查看 150关注 0票数 1

我一直有个错误

当我尝试用columnText写到PDF时。setSimpleColumn()过去工作正常,但现在这段代码抛出了错误,而且当我尝试使用setColumns()时,它也抛出了一个错误。我想不出是什么导致了这个错误。我应该以某种方式关闭columnText吗?

直接相关的代码是:

代码语言:javascript
复制
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,下面是函数:

代码语言:javascript
复制
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:组合两种功能

代码语言:javascript
复制
    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++
    }
}

链接:https://drive.google.com/file/d/1ybvDVSxKOJdbnA2fSRjEmxlDszIktWTL/view?usp=sharing

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-05 16:38:54

原始代码中有两个错误:

  • 您使用相同的源文件和目标文件进行冲压。
  • 您在操作PDF-

之后不保留对PdfStamper的引用来关闭它。

第一个问题导致文件在被完全读取之前被截断。这是你在编辑时修正的。

第二个可能导致输出PDF未完成,缺少必要的预告片。

在修复了第二个问题之后,您的代码最终停止生成一个损坏的文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68203750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档