Thank you Tilman, It turns out that I just sent the wrong file to you. The embedding issue is very real.
A form that actually shows the problem is here: https://dl.dropboxusercontent.com/u/25802656/CF-CVS-Revised.pdf The form fields are empty in this example but the font is not embedded and the form will show no-glyph rectangles on any machine that doesn't have 'Noto Sans' installed. I have been trying experiments and it seems like, for the code I wrote, if you try to set a font ONLY for the AcroForm where there is no text using the same font in the document, the font will not embed. This is either because: 1. My code is wrong (likely) 2. There is a PDFBox bug (unpossible!) I believe that I can hack around this by writing tiny white text somewhere in the document using the font that I would like to use for the form, bur that is, to use a technical term, crappy. What can you advise? On Fri, Apr 21, 2017 at 12:52 AM, Tilman Hausherr <thaush...@t-online.de> wrote: > Is the file you uploaded the result before or after your operation? > Because everything works nicely with Adobe. The font Noto Sans is embedded, > I don't have it on my machine. > > If it is the result "before" or "with Adobe", then please upload the > result "after PDFBox" (and if possible, screenshots of "own machine" and > "other machine without the font") and if possible use an unusual font, and > also try > > > resFont = PDType0Font.load(doc, is, false); > > > I haven't tried running your code yet. > > Tilman > > > > > Am 20.04.2017 um 18:59 schrieb Evan Williams: > >> I am trying to change all of the fields in a PDF form to use a TrueType >> font that I am embedding. Or trying to embed more accurately. >> >> I have had good success with embedding fonts went I am drawing text in a >> document, but for form fields, I have been unable to programmatically >> force >> the font to embed. >> >> I load the font in the constructor like this: >> >> * final PDFont formFont = loadFontResourceWithDef(pdf, >> DEFAULT_F**O* >> *NT_PATH,* >> * DEF_DOCUMENT_FONT);* >> * final PDResources resources = acroForm.getDefaultResources();* >> * final String fontName = resources.add(formFont).getName();* >> * acroForm.setDefaultResources(resources);* >> * this.defaultAppearanceString = "/" + fontName + " 0 Tf 0 g";* >> >> * }* >> >> * public static PDFont loadFontResourceWithDef(PDDocument doc,* >> * String fontpath, PDFont defFont) {* >> * PDType0Font resFont = null;* >> * try {* >> * final InputStream is = >> this.getClass().getResourceAsStream(fontpath);* >> * if (is != null) {* >> * resFont = PDType0Font.load(doc, is);* >> * }* >> * } catch (IOException e) {* >> * log("Error loading font " + fontpath, e);* >> * }* >> * return resFont != null ? resFont : defFont;* >> * }* >> >> Presume that I have verified that the font actually is loaded into the >> formFont variable. >> >> Some time later, I iterate over the fields in the acroform and, for each >> field, do this: >> >> * if (field instanceof PDTextField) {* >> * final PDTextField textfield = (PDTextField) field;* >> * textfield.setDefaultAppearance >> (defaultAppearanceString);* >> * }* >> >> The result of this is that the appearances for the text fields are all >> correct, but the font is never embedded, so it looks OK on my machine >> (because the font that I am loading is available locally), but I get >> charming empty rectangles on machines where the font is not present. If I >> open the PDF in acrobat and manually change the font on one field and >> change it back, the font them embeds and everything works fine. >> >> I have uploaded an example to >> https://dl.dropboxusercontent.com/u/25802656/ofev_rx_3338.pdf >> >> Any thoughts would be helpful. I would rather not do a manual operation on >> more than one hundred files. >> >> Thank you, you the always helpful and wonderful PDFBox community. >> > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org > For additional commands, e-mail: users-h...@pdfbox.apache.org > > -- *Evan Williams* Principal Software Engineer evan.willi...@zapprx.com *www.ZappRx.com <http://www.zapprx.com/>*