Sorted!

Thank you.


On Monday, 3 September 2018 17:32:15 UTC+12, Alexander Yakushev wrote:
>
> I suspect the problem is with map which is lazy. If you discard the 
> result of the top-level expression it might not be fully completed or not 
> even run at all.
>
> To force a lazy collection (thus, triggering the side effects you desire) 
> you could do the following things:
>
> (mapv close pages)          ;; mapv returns a vector, thus is eager
> (dorun (map close pages))   ;; dorun walks the lazy collection and forces 
> the side effects
> (run! close pages)          ;; run! is like map for side effects - 
> preferred in this case
>
> On Monday, September 3, 2018 at 5:44:38 AM UTC+3, aboy021 wrote:
>>
>> I have a problem related to disposing of resources.
>>
>> I’m trying to retrieve portions of pdf files and combine them into a new 
>> pdf file. I’m using Apache PDFBox for the purpose.
>> Splitting a pdf into pages creates a PDDocument for each page, and 
>> PDDocuments need to be explicitly closed. If you do not, there’s a log 
>> message that comes from the finalizer “Warning: You did not close a PDF 
>> Document”.
>>
>> I’ve prepared some naive code that demonstrates the problem. Here I’m 
>> splitting a pdf and recombining it. When the finalizer eventually runs 
>> every page in the pdf seems to produce an error message.
>>
>> [org.apache.pdfbox/pdfbox "2.0.11"]
>>
>> (import '[org.apache.pdfbox.multipdf PDFMergerUtility])(import 
>> '[org.apache.pdfbox.multipdf Splitter])(import '[org.apache.pdfbox.pdmodel 
>> PDDocument])
>> (let [pdf (PDDocument/load (File. "input.pdf"))
>>       splitter (Splitter.)
>>       pages (into [] (.split splitter pdf))
>>       merger (PDFMergerUtility.)
>>       append (fn [x y] (.appendDocument merger x y) x)
>>       close #(when % (.close %))]
>>   (try
>>     (-> (reduce append (first pages) (rest pages))
>>         (.save "output.pdf")
>>         (close))
>>     (finally
>>       (close pdf)
>>       (map close pages))))
>>
>> Any help would be appreciated.
>>
>> Also, are there any good resources online for best practice in dealing 
>> with sequences of disposables?
>>
>> Thanks,
>>
>> Arthur
>> ​
>>
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to