iText + HTMLWorker - Как изменить шрифт по умолчанию?

Мне нужно создать файл PDF из источника HTML. В настоящее время я решаю проблему со специальными (полированными) символами в выходном файле, а именно с их отсутствием.

Источник HTML:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<table width="100%" border="0.5" align="center" cellpadding="0" style="border-collapse:collapse; border:1px solid black; font-family:Arial, Helvetica, sans-serif; font-size:16px">
  <tr>
    <td align="center" ><b>Test: ąęłóćńśŁÓŃĆŻŹąśżźłęó</b></td>
  </tr>
</table>

Источник Java:

Document document = new Document(PageSize.A4, 38, 38, 50, 38);  
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("iTextExample.pdf"));  
document.open();  
HTMLWorker htmlWorker = new HTMLWorker(document);  
htmlWorker.parse(new StringReader(readFileAsString("index.html")));  
document.close();


public static String readFileAsString(String filePath) throws IOException {
    DataInputStream dis = new DataInputStream(new FileInputStream(filePath));
    try {
        long len = new File(filePath).length();
        if (len > Integer.MAX_VALUE) {
            throw new IOException("File " + filePath + " too large, was " + len + " bytes.");
        }
        byte[] bytes = new byte[(int) len];
        dis.readFully(bytes);
        return new String(bytes, "UTF-8");
    } finally {
        dis.close();
    }
}

Мой вопрос: как изменить значение по умолчанию шрифт (Helvetica), например. Arial Bold во всем PDF-документе?

Я тестировал много примеров, связанных с таблицей стилей, и ни один из них не работал. Мне нужно изменить шрифт по умолчанию, потому что здесь нет полировальных символов - это решение, которое, я надеюсь, сработает.

Спасибо за любую помощь!

Изменить:

My FontProvider:  
    class defaultFontProvider extends FontFactoryImp {

    private String _default;

    public defaultFontProvider(String def) {
        _default = def;
    }

    public Font getFont(String fontName, String encoding, boolean embedded, float size, int style, BaseColor color, boolean cached) {
        if (fontName == null || size == 0) {
            fontName = _default;
        }

        return super.getFont(fontName, encoding, embedded, size, style, color, cached);
    }
    }

В код выше встроен arial.ttf что нормально, ...

Используя FormsAuthentication , встроенную в asp.net , очень быстро и легко создать систему входа, которая создает cookie для аутентифицированных пользователей:

FormsAuthentication.SetAuthCookie(uniqueUsername, false);

В паре с некоторым кодом в файле Web.Config :

<authentication mode="Forms">
  <forms loginUrl="Login.aspx" timeout="30" defaultUrl="Dashboard.aspx" protection="All" />
</authentication>
<authorization>
  <deny users="?" />
</authorization>

При этом все запросы будут возвращаться обратно в Login.aspx до тех пор, пока пользователь не будет одобрен и не будет создан файл cookie с помощью вызова метода SetAuthCookie ().

Достаточно ли это безопасно?
Я использую эмпирическое правило: я не храню на клиенте никаких данных, которые мне не отправляли. Итак, что я делал в прошлом, это сохранял имя пользователя и пароль, используемые в cookie, а затем повторно аутентифицировал их с каждым запросом.

С этим подходом каждый раз возникает дополнительная нагрузка, но это также означает, что я не храню данные сервера на клиенте.

Меня беспокоит
Меня беспокоит то, что при использовании вызова метода SetAuthCookie () имя пользователя сохраняется на клиентской машине. Может ли кто-нибудь взломать используемое шифрование и заменить сохраненное имя пользователя другим?

Я думаю, что я слишком параноик и что тип и уровень используемого шифрования адекватны, но я подумал, что я получить комментарии экспертов по теме.

22
задан Peter Bridger 8 February 2011 в 16:02
поделиться