[ 
https://issues.apache.org/jira/browse/PDFBOX-5209?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17364700#comment-17364700
 ] 

James Tsou edited comment on PDFBOX-5209 at 6/17/21, 10:31 AM:
---------------------------------------------------------------

I ran into similar issue on file size using Chinese characters, though I don't 
need to produce editable acroForm field in the output PDF for those fields that 
has pre-filled chinese characters.

A workaround will be drawing the chinese fonts directly using contentStream, 
starting on the coordinates of the bottom left corner of the acroform text box 
field.
{code:java}
// ... code omitted
PDDocument pdDocument = ...;
PDField yourAcroFormField = ...;

PDFont your_font = PDType0Font.load(pdDocument, new FileInputStream("path to 
the font file"), true);

// Pass page number as argument
PDPage page = pdDocument.getPage(...);

// Start the stream as append mode, if you enter here you should be certain the 
text you are entering are not english
PDPageContentStream stream = new PDPageContentStream(pdDocument, page, 
PDPageContentStream.AppendMode.APPEND, false)

COSArray fieldAreaArray = (COSArray) 
yourAcroFormField.getCOSObject().getDictionaryObject(COSName.RECT);

// Start drawing, specify your font size, etc
stream.setFont(your_font, 10f);
stream.beginText();

// This specifies where to draw, x-coordinates and y-coordinates
// We want to start at the bottom left coordinate of the text field, and start 
drawing the text.
stream.newLineAtOffset(((COSFloat)(fieldAreaArray.get(0))).floatValue(), 
((COSFloat)(fieldAreaArray.get(1))).floatValue());
stream.showText("一二三四五六七八");
stream.endText();
stream.close(){code}
 

You can call acroForm.flatten and the end of your processing to remove all the 
acroForm fillable fields in your result PDF.

The result should be generating PDFs that does not need to embed full chinese 
characters.

 

If you don't mind using other library for help, and to generate PDF that can 
display chinese character without embedding the full chinese font (20MB+), 
consider combining the use of OpenHTMLToPDF and JSoup.

You could insert the data including chinese characters into the HTML using 
Jsoup, and generate the PDF containing all the data on the fly using 
OpenHTMLToPDF. Generation takes few seconds depends on the complexity, but you 
don't have to worry about file size and font issue.


was (Author: james tsou):
I ran into similar issue on file size using Chinese characters, though I don't 
need to produce editable acroForm field in the output PDF for those fields that 
has pre-filled chinese characters.

A workaround will be drawing the chinese fonts directly using contentStream, 
starting on the coordinates of the bottom left corner of the acroform text box 
field.
{code:java}
// ... code omitted
PDDocument pdDocument = ...;
PDField yourAcroFormField = ...;

PDFont your_font = PDType0Font.load(pdDocument, new FileInputStream("path to 
the font file"), true);

// Pass page number as argument
PDPage page = pdDocument.getPage(...);

// Start the stream as append mode, if you enter here you should be certain the 
text you are entering are not english
PDPageContentStream stream = new PDPageContentStream(pdDocument, page, 
PDPageContentStream.AppendMode.APPEND, false)

COSArray fieldAreaArray = (COSArray) 
yourAcroFormField.getCOSObject().getDictionaryObject(COSName.RECT);

// Start drawing, specify your font size, etc
stream.setFont(your_font, 10f);
stream.beginText();

// This specifies where to draw, x-coordinates and y-coordinates
// We want to start at the bottom left coordinate of the text field, and start 
drawing the text.
stream.newLineAtOffset(((COSFloat)(fieldAreaArray.get(0))).floatValue(), 
((COSFloat)(fieldAreaArray.get(1))).floatValue());
stream.showText("一二三四五六七八");
stream.endText();
stream.close(){code}
 

You can call acroForm.flatten and the end of your processing to remove all the 
acroForm fillable fields in your result PDF.

The result should be generating PDFs that does not need to embed full chinese 
characters.

 

If you don't mind using other library for help, and to generate PDF that can 
display chinese character without embedding the full chinese font (20MB+), 
consider combining the use of OpenHTMLToPDF and JSoup.

You could insert the data like chinese characters into the HTML directly, and 
generate PDF on the fly using OpenHTMLToPDF. Generation takes few seconds 
depends on the complexity, but you don't have to worry about file size and font 
issue.

> Using Chinese character make the file size increases 
> -----------------------------------------------------
>
>                 Key: PDFBOX-5209
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-5209
>             Project: PDFBox
>          Issue Type: Improvement
>          Components: AcroForm
>    Affects Versions: 2.0.15
>         Environment: java jdk 1.8
>            Reporter: LI MING
>            Priority: Blocker
>              Labels: FileSize
>         Attachments: picture1.jpg, picture2.jpg, picture3.jpg
>
>
> Like the title,we use Chinese Character to generate PDF form file ,it is 
> successed.but the file size is larger than 10mb.except change the font 
> file,Is there any other way we can solve this problem?



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@pdfbox.apache.org
For additional commands, e-mail: dev-h...@pdfbox.apache.org

Reply via email to