gpt4 book ai didi

clojure - 使用 iText 和 clojure 从 PDF 中提取页面

转载 作者:行者123 更新时间:2023-12-04 05:34:22 26 4
gpt4 key购买 nike

我试图通过翻译我在此处找到的 splitPDF 方法 http://viralpatel.net/blogs/itext-tutorial-merge-split-pdf-files-using-itext-jar/ 从带有 clojure 的 pdf 中提取单个页面

我不断收到此错误

IOException 流关闭 java.io.FileOutputStream.writeBytes (:-2)

这可以防止我在 repl 仍然打开时打开文档。关闭 repl 后,我就可以访问该文档。

为什么我收到错误?

我该如何解决?

我怎样才能让它更加clojurey?

(import '(com.itextpdf.text Document)
'(com.itextpdf.text.pdf PdfReader PdfWriter PdfContentByte PdfImportedPage BaseFont)
'(java.io File FileInputStream FileOutputStream InputStream OutputStream))

(defn extract-page [src dest pagenum]
(with-open [ d (Document.)
os (FileOutputStream. dest)]
(let [ srcpdf (->> src FileInputStream. PdfReader.)
destpdf (PdfWriter/getInstance d os)]
(doto d
(.open )
(.newPage ))
(.addTemplate
(.getDirectContent destpdf)
(.getImportedPage destpdf srcpdf pagenum) 0 0))))

最佳答案

您忘记关闭文档:

(close. d)

以下代码有效:
(import '(com.itextpdf.text Document)
'(com.itextpdf.text.pdf PdfReader PdfWriter PdfContentByte PdfImportedPage BaseFont)
'(java.io File FileInputStream FileOutputStream InputStream OutputStream))

(defn extract-page [src dest pagenum]
(with-open [ is (FileInputStream. src)
os (FileOutputStream. dest)]
(let [ srcpdf (PdfReader. src)
d (Document.)
destpdf (PdfWriter/getInstance d os)]
(doto d
(.open )
(.newPage ))
(println "Number of pages" (.getNumberOfPages srcpdf))
(.addTemplate
(.getDirectContent destpdf)
(.getImportedPage destpdf srcpdf pagenum) 0 0)
(.close d))))

编辑:

如果您有兴趣,我发现使用 apache pdfbox 更容易。
(import '(org.apache.pdfbox.pdmodel PDDocument)
'(org.apache.pdfbox.util PDFTextStripper)
'(java.io File OutputStreamWriter FileOutputStream BufferedWriter))

(defn convert-to-text [src dest]
(with-open [ pd (PDDocument/load (File. src))
wr (BufferedWriter. (OutputStreamWriter. (FileOutputStream. (File. dest))))]
(let [ stripper (PDFTextStripper.)]
(println "Number of pages" (.getNumberOfPages pd))
(.writeText stripper pd wr))))

关于clojure - 使用 iText 和 clojure 从 PDF 中提取页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12148436/

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