PDF 사양에서는 트루 타입 컬렉션을 포함 글꼴로 사용할 수 없습니다. * .ttc에서 하나의 TTF 형식 스트림을 꺼내서 포함시켜야합니다.
그대로 (및 AFAIK) PDFBox는이 기능을 자체적으로 지원하지 않습니다. 내가 구글의 'sfntly'package.
신속하고 더러운 솔루션을 사용 :
FontFactory factory = FontFactory.getInstance();
Font[] fonts = factory.loadFonts(...); // pulls every TTF out of TTC
ArrayList<PDTrueTypeFont> pdf_fonts = new ArrayList<PDTrueTypeFont>();
for(Font f : fonts){
// sfntly writes each font to a TTF stream
ByteArrayOutputStream out = ByteArrayOutputStream();
factory.serializeFont(f, out);
// PDFBox reads the stream and embeds the font
ByteArrayInputStream ttf_font_stream = ByteArrayInputStream(out.toByteArray());
pdf_fonts.add(PDTrueTypeFont.loadTTF(document, ttf_font_stream));
}
Font
및 FontFactory
가에서 com.google.typography.sfntly
자바 코드 100 % 정확 보장; 최근 Clojure에서 많이 일 해왔다 ....
고마워! 좋아 보인다. sfntly를 사용하여 * .ttc 파일에서 글꼴 이름을 가져올 수 있습니까? 그리고 sfntly 글꼴의 이름을 가져 오는 것이 글꼴의 나머지 부분을 구문 분석해야하는 경우 알 수 있습니까? –
sfntly로 이름을 알 수 있습니다. 그것은 정확히 "간단하지"않습니다. 'NameTable'의 인스턴스를 얻기 위해서는'getTable (Tag.name)'이 필요합니다. 거기에서'.getNameEntry'로 이름을 접근 할 수 있지만 적절한 상수를 전달해야합니다. 그러면 글꼴에 대한 수많은 "이름"에 액세스 할 수 있습니다. 당신은 아마'NameTable'을 반복하고 'FontFamilyName' 또는'PreferredFamily'를 첫 번째 엔트리를 그것의'nameId'로 가져 오는 것이 가장 안전 할 것입니다. – jgriego
... 불행히도 예. sfntly'Font's를 빌드하면 sfnt 래퍼 전체를 파싱합니다. 그러나 'FontFactory.loadFontsForBuilding' (Font.Builder 객체의 목록을 제공합니다. 'name' 테이블을 파싱하기 위해 이들을 제거 할 수 있습니다. 그런 다음 빌더 객체에서'.build()'를 호출하면 주변에서 찌를 수있는'Font' 객체를 생성 할 수 있습니다. – jgriego