iTextPDF (Windows에서 직접 만든 COOPBL.TTF)가 아닌 글꼴을 사용하여 간단한 "Hello World"파일을 만들기 위해 iTextPDF를 사용하는 간단한 Java 프로그램이 있습니다.itextpdf 글꼴이 리눅스에 포함되어 있지 않습니다.
Windows 7-64에서 실행하면 정상적으로 실행되고 파일 모양에 반영된 Cooper Black 글꼴 서브 세트가 파일에 임베드 된 pdf 파일이 작성됩니다.
Linux에서 똑같은 클래스 파일을 실행 (다시 컴파일하지 않음)하면 아무 것도 포함시키지 않고 Helvetica를 사용합니다.
import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import com.itextpdf.text.FontFactory;
import com.itextpdf.text.Document;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.XMLWorkerHelper;
public class iTextTest {
private void doit(String sOut) {
Document doc = new Document(PageSize.LETTER);
try {
FileOutputStream fOut = new FileOutputStream(sOut);
// Register a non-native font.
String sFontDir = ".";
int iResult = FontFactory.registerDirectory(sFontDir);
if(iResult == 0) {
System.out.println("TestPDF(): Could not register font directory " + sFontDir);
} else {
System.out.println("TestPDF(): Registered font directory " + sFontDir);
}
System.out.println(" Fonts registered:");
for(String sFont:FontFactory.getRegisteredFonts()) {
System.out.println(" " + sFont);
}
PdfWriter pdfWriter = PdfWriter.getInstance(doc, fOut);
doc.open();
XMLWorkerHelper helper = XMLWorkerHelper.getInstance();
String htmlContent;
htmlContent = "<HTML><HEAD></HEAD><BODY>";
htmlContent += "<P style=\"font-family: cooperblack;\">";
htmlContent += "Hello World!";
htmlContent += "</P>";
htmlContent += "</BODY></HTML>";
helper.parseXHtml(pdfWriter, doc, new ByteArrayInputStream(htmlContent.getBytes()));
} catch(IOException e) {
e.printStackTrace();
} catch(DocumentException e) {
e.printStackTrace();
}
if(doc != null) {
doc.close();
}
}
public static void main(String[] args) {
if(args.length != 1) {
System.out.println("Usage: iTextTest outfile");
return;
}
iTextTest test = new iTextTest();
test.doit(args[0]);
}
}
내가 사용 : itextpdf-5.5.0 xmlworker-5.5.0 윈도우 자바 1.6.0_21 리눅스 자바 1.6.0_23
나는 것을 여기
프로그램입니다 글꼴의 복사본과 결과로 나오는 pdf 파일을 포함시키지 만 명백한 방법은 없습니다. 필자의 테스트를 위해 Windows 테스트와 Linux 테스트 모두를 위해 \ Windows \ fonts \ COOPBL.TTF를 테스트 디렉토리에 복사했다.가치가있는 내용 : - 글꼴 파일의 보호/속성 플래그를 조정해도 아무런 차이가 없습니다. - 공개 도메인 글꼴이 아닙니다. 나는 그것을 시험을 위해서만 사용하고있다.
나는 모든 의견의 귀입니다.
덕분에, 척 윈도우와 리눅스 (윈도우 Ecplise 및 콘솔 JDB의 -ack!)에 나란히 디버깅 후
'String sFontDir = ".";을 정의하지만''. "'은 리눅스와 비교할 때 Windows에서 다를 수 있습니다. ''. "'의 절대 경로를'System.out'에 적어주세요. 리눅스에서 기대했던 것이 아닐 것이라고 확신합니다. 'COOPBL.TTF' 파일을 리눅스가 반환 한 경로로 옮겨야합니다. –
감사합니다, Bruno, 나는 getPath, getAbsolutePath 및 getCanonicalPath를 시도했으며, 두 OS 모두에서 테스트를 실행중인 현재 디렉토리에 대한 예상 결과를 모두 반환합니다. registerDirectory()를 호출 한 후 등록 된 글꼴을 나열합니다. FontFactory.getRegisteredFonts()에 따르면, 글꼴 파일이 등록되고 있으며 그 화신 중 하나의 정확한 이름 (cooperblack)을 사용하고 있습니다. –
그건 이상합니다. 나는 전에 그 문제를 본 적이 없다. Windows와 Linux 모두에서 모든 예제를 실행합니다. 이 문제를 해결하려면 재현 할 수 있어야하지만 그렇게 할 수는 없습니다. –