[
https://issues.apache.org/jira/browse/CAMEL-26054?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18131146#comment-18131146
]
Claus Ibsen commented on CAMEL-26054:
-------------------------------------
Fixed in PR https://github.com/apache/camel/pull/28373
_Claude Code on behalf of davsclaus_
> camel-pdf - the pageSize values of the catalog are ignored, and pdf:create
> followed by pdf:extractText fails
> ------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-26054
> URL: https://issues.apache.org/jira/browse/CAMEL-26054
> Project: Camel
> Issue Type: Bug
> Components: camel-pdf
> Affects Versions: 4.18.0, 4.22.0, 4.23.0
> Reporter: Claus Ibsen
> Assignee: Claus Ibsen
> Priority: Major
> Fix For: 4.24.0
>
>
> Found while adding the catalog body types of pdf (CAMEL-24961), checked with
> {{camel run}}.
> h4. 1. The pageSize values of the catalog are ignored
> The catalog gives {{pageSize}} the values LETTER, LEGAL, A0 to A6 with the
> default A4 ({{PdfConfiguration}}, main 5aac7df76b83, line 68), but the page
> sizes are looked up by the internal names {{PAGE_SIZE_A0}} to
> {{PAGE_SIZE_LETTER}} (lines 45-52, {{PAGE_MAP.get(pageSize)}} at line 146),
> and LEGAL has none. So {{pageSize=A4}} gives null: PDFBox makes a U.S. Letter
> page, and with {{textProcessingFactory=autoFormatting}} the create fails with
> a {{NullPointerException}} at {{getPageSize().getWidth()}}
> ({{DefaultLineBuilderStrategy}}, line 118). Without pageSize the page is A4,
> and the test uses {{pageSize=PAGE_SIZE_A1}}. Checked on 4.24.0-SNAPSHOT with
> {{camel run}}: pageSize=A4 gave the media box 612 x 792 (Letter), no pageSize
> 595 x 842 (A4), pageSize=PAGE_SIZE_A5 an A5 page, and A4 with autoFormatting
> the NullPointerException.
> *Proposed change*: take the catalog values (LETTER, LEGAL, A0 to A6), and
> keep the names such as {{PAGE_SIZE_A4}} working; fail for an unknown value.
> h4. 2. pdf:create followed by pdf:extractText fails
> create, append and merge leave the PDF in a {{ByteArrayOutputStream}}, which
> does not convert to a {{PDDocument}}, so extractText gets null from
> {{getBody(PDDocument.class)}} (line 129) and fails with
> {{NullPointerException: Cannot invoke
> "org.apache.pdfbox.pdmodel.PDDocument.getPages()" because "this.document" is
> null}}. Text and no body fail the same way. Checked on 4.24.0-SNAPSHOT with
> {{camel run}}: create then extractText failed; with a {{convertBodyTo}}
> byte[] between them it gave the text.
> *Proposed change*: leave a byte[] (or convert a ByteArrayOutputStream), and
> fail with a message that names the body for a body that is not a PDF.
> h4. 3. A CR or a tab fails with the default lineTermination
> lineTermination, the default textProcessingFactory, splits the text on "\n"
> only ({{LineTerminationWriterAbstractFactory}}, line 43), so text with
> Windows line ends keeps the CR, and a tab stays too, and the font cannot show
> them. Checked on 4.24.0-SNAPSHOT with {{camel run}}: "line one", CR LF, "line
> two" failed with {{IllegalArgumentException: U+000D ('controlCR') is not
> available in the font Helvetica, encoding: WinAnsiEncoding}}, a tab with
> U+0009; with autoFormatting both worked.
> *Proposed change*: split on any line end, and replace a tab and other control
> characters.
> h4. 4. create without a body fails with a NullPointerException
> The body is read with {{getBody(String.class)}} (line 138), and no body fails
> in the split with {{NullPointerException: Cannot invoke
> "String.split(String)" because "text" is null}}. Checked on 4.24.0-SNAPSHOT
> with {{camel run}}.
> h4. Also read in the code, not run
> * The {{CamelPdfDecryptionMaterial}} header is documented as mandatory for an
> encrypted document ({{PdfHeaderConstants}}, lines 35-40) but is not read
> anywhere since CAMEL-11976.
> * append closes the PDDocument of the {{CamelPdfDocument}} header (the
> try-with-resources at line 106), so the header holds a closed document
> afterwards.
> * merge casts each element of {{CamelPdfFilesToMerge}} to {{java.io.File}}
> (line 95): a String or a Path fails with a ClassCastException.
> * The tests check nothing about the body: they send, then set
> {{expectedMessagesMatches}}, which {{assertIsSatisfied}} does not run then
> (for example PdfCreationTest).
> _Claude Code on behalf of davsclaus_
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)