You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@pdfbox.apache.org by Tilman Hausherr <TH...@t-online.de> on 2016/04/11 19:46:56 UTC

Re: PDFMergerUtility in PdfBox 2.0.0 fails to embed font

Hi,

I haven't tested your code, because I believe it is a known problem:
https://issues.apache.org/jira/browse/PDFBOX-3243

see workaround there. Btw the title is incorrect, you're using a TT 
font, not a Type1 font.

Tilman

Am 11.04.2016 um 19:35 schrieb Jeffrey Begley:
> Hello PdfBox Team,
> I ran into a problem where PDFs programmatically created and merged using PdfBox fail to display all characters written in a type1 font.  When opening such a file with Adobe it shows the error message "Cannot find or create the font 'NotoSans'.  Some characters may not display or print correctly" and every character displays as a black dot.
>
> I believe that org.apache.pdfbox.multipdf.PDFMergerUtility has a bug where it is failing to subset type1 fonts for appended documents unless individual documents are saved first.
>
> To reproduce the issue, I've included a minimal example below.  The example is based on one of the PdfBox examples except it loads a font from the filesystem and "merges" the single PDF.  If you run the code as-is, you'll get a PDF with the missing font.  If you run it again after uncommenting the line "document.save(new ByteArrayOutputStream());"  then the PDF contains the font and works properly.
>
> Thanks,
>
> Jeffrey
>
> 		// Create a document and add a page to it
> 		PDDocument document = new PDDocument();
> 		PDPage page = new PDPage();
> 		document.addPage(page);
>
> 		// Create a new font object selecting one of the PDF base fonts
> 		// use a different font
> 		// PDFont font = PDType1Font.HELVETICA_BOLD;
> 		PDFont font = PDType0Font.load(document, new File("NotoSans/NotoSans-Regular.ttf"));
>
> 		// Start a new content stream which will "hold" the to be created content
> 		PDPageContentStream contentStream = new PDPageContentStream(document, page);
>
> 		// Define a text content stream using the selected font, moving the cursor and drawing the text "Hello World"
> 		contentStream.beginText();
> 		contentStream.setFont(font, 12);
> 		contentStream.moveTextPositionByAmount(100, 700);
> 		contentStream.drawString("Hello World");
> 		contentStream.endText();
>
> 		// Make sure that the content stream is closed:
> 		contentStream.close();
>
> 		// Save the results and ensure that the document is properly closed:
> 		// Uncomment the next line to make it work. Presumably because it subsets the fonts.
> 		// document.save(new ByteArrayOutputStream());
>
> 		PDFMergerUtility merger = new PDFMergerUtility();
>
> 		// Merge one document
> 		PDDocument outDoc = new PDDocument();
> 		for (PDDocument curDoc : Arrays.asList(document))
> 		{
> 			merger.appendDocument(outDoc, curDoc);
> 			curDoc.close();
> 		}
>
> 		outDoc.save("Merged.pdf");
> 		outDoc.close();
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@pdfbox.apache.org
> For additional commands, e-mail: users-help@pdfbox.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@pdfbox.apache.org
For additional commands, e-mail: users-help@pdfbox.apache.org