[ 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