[英]java: translating string to greek characters
TD:DR,跳至EDIT5。
我正在嘗試通過iText將一些希臘文字寫成pdf形式。 我正在從數據庫中檢索字符串,該字符串在希臘文中,但是當我嘗試將其打印為pdf形式時,它什么也沒顯示(pdf也是希臘文字)。 我已經嘗試了幾乎所有找到的內容,在這里,在iText論壇中都一樣。
如您所見,字符串在希臘語中:
但未寫入pdf:
編輯:
我忘了如何努力實現這一目標。 將字符串轉換為字節數組,然后再編碼回去,這是我能做的最接近的操作之一。 可悲的是,沒有太多代碼要顯示。 如之前所言,我有一個字符串qich,其中顯示了dfata,然后在將其打印到pdf格式的托盤中時,使用諸如form.getField("municipality").setValue(municipio);
這樣的語句form.getField("municipality").setValue(municipio);
輸出再次如圖所示。
編輯2:
使用itext 7.0.4,現在我們無法創建字體,因為baseforn或字體類也不會被識別為itext類。
import com.itextpdf.*;
...
final String f = "resources/fonts/FreeSans.ttf";
Font font = FontFactory.getFont(FONT, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
...
form.getField("municipality").setValue(municipio);
編輯3:
插入以下maven依賴項后,現在可以使用de basefonts類:
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.10</version>
</dependency>
float fontSize = (float) 10.0;
PdfFont font = null;
final String f = (String) VarGlobales.getHTTPApplication().get("ruta.fuentes") + "/FreeSans.ttf";
try {
font = PdfFontFactory.createFont(f, true);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
PdfReader pdfReader = null;
try {
pdfReader = new PdfReader(new FileInputStream(
(String) VarGlobales.getHTTPApplication().get("ruta.tenderForms") + "/" + tenderFormFile));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter pdfWriter = new PdfWriter(baos);
PdfDocument pdfDoc = new PdfDocument(pdfReader, pdfWriter);
PdfAcroForm form = PdfAcroForm.getAcroForm(pdfDoc, true);
form.getField("municipality").setValue(municipio, font, fontSize);
但是,弦線再一次沒有被塗上油漆。 我使用正確嗎?
僅供參考,以pdf格式創建的字段是通過Adobe Acrobat 9創建的。
編輯4:
好的,所以現在只有iText7
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>root</artifactId>
<version>7.1.2</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext7-core</artifactId>
<version>7.1.2</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>kernel</artifactId>
<version>7.1.2</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>forms</artifactId>
<version>7.1.2</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>layout</artifactId>
<version>7.1.2</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>typography</artifactId>
<version>2.0.0</version>
</dependency>
即時通訊創建字體和托盤更改它的方式
final String rutaFuente = (String) VarGlobales.getHTTPApplication().get("ruta.fuentes") + "/FreeSans.ttf";
try {
font = PdfFontFactory.createFont(rutaFuente, "Cp1250", true);
normalFont = PdfFontFactory.createFont("C:\\Windows\\Fonts\\arial.ttf", PdfEncodings.IDENTITY_H);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
PdfReader pdfReader = null;
try {
pdfReader = new PdfReader(new FileInputStream((String)VarGlobales.getHTTPApplication().get("ruta.tenderForms") + "/" + tenderFormFile));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter pdfWriter = new PdfWriter(baos);
PdfDocument pdfDoc = new PdfDocument(pdfReader, pdfWriter);
PdfAcroForm form = PdfAcroForm.getAcroForm(pdfDoc, true);
form.getField("district").setFont(normalFont);
form.getField("district").setValue(distrito);
Sitll沒有打印結果。
編輯5-TL:DR:
最后,我做到了! Jus wanto感謝每個人在此過程中提供的幫助。
我不確定問題出在哪里,可能有時候無法解決我最初的問題。 現在可以通過以下方式解決:
normalFont = PdfFontFactory.createFont("C:\\Windows\\Fonts\\arial.ttf", PdfEncodings.IDENTITY_H);
...
form.getField("district").setFont(normalFont);
form.getField("district").setValue(distrito);
非ASCII符號的編碼取決於字體。 您應該尋找一種支持希臘符號的字體。 如果您使用IText中的主要字體之一,則不會有任何麻煩。 如果不是,則應按照IText手冊中所述嵌入字體。
附:您應該使用自己的代碼,工作量和版本。
好吧,當所有其他方法都失敗時,您可以將希臘字符串轉換為unicode序列,然后將其發送。 然后,您將確定要發送的是希臘字符字符串,如果問題仍然存在,則可以正確顯示它,而不是內容。 我編寫了一個名為MgntUtils的開源Java庫,該庫具有可將任何String轉換為unicode序列,反之亦然的實用程序。 您要做的就是:
String codes = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence("Hello world");
它將返回字符串"\H\e\l\l\o\ \W\o\r\l\d"
對於包括特殊字符在內的任何語言的任何String而言,同樣適用。 這是文章開放源Java庫的鏈接,該庫具有堆棧跟蹤過濾,Silent String解析Unicode轉換器和版本比較 ,說明了該庫及其獲取位置(可在Maven Central和github上找到 。在本文中搜索以下段落: “字符串Unicode轉換器”
最后,我做到了! Jus wanto感謝每個人在此過程中提供的幫助。
我不確定問題出在哪里,可能有時候無法解決我最初的問題。 現在可以通過以下方式解決:
normalFont = PdfFontFactory.createFont("C:\\Windows\\Fonts\\arial.ttf", PdfEncodings.IDENTITY_H);
...
form.getField("district").setFont(normalFont);
form.getField("district").setValue(distrito);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.