Mengapa penyesuaian font PDF saya menggunakan iTextSharp gagal?

Saya ingin menghias berbagai paragraf dalam file PDF dengan menebalkan beberapa teks, menggunakan font dan warna berbeda. Saya pikir saya menemukan kode untuk melakukan itu (di bawah), tetapi tidak berfungsi - semua teks memiliki font, warna (hitam), dan ukuran yang sama. Mengapa upaya virtual saya untuk mempercantik file PDF sejauh ini sia-sia? Ini kode saya:

using (var ms = new MemoryStream())
{

    using (var doc = new Document(PageSize.A4, 50, 50, 25, 25))
    {
        using (var writer = PdfWriter.GetInstance(doc, ms))
        {
            doc.Open();

            // Mimic the appearance of Duckbill_Platypus.pdf
            var docTitle = new Paragraph("Duckbilled Platypi - they're not what's for dinner");
            var titleFont = FontFactory.GetFont("Courier", 18, BaseColor.BLACK);
            docTitle.Font = titleFont;
            doc.Add(docTitle);

            var subTitle = new Paragraph("Baby, infant, toddler, and perhaps 'Terrible 2s' Platypi are called Platypups");
            var subtitleFont = FontFactory.GetFont("Times Roman", 13, BaseColor.BLACK);
            subTitle.Font = subtitleFont;
            doc.Add(subTitle);

            var importantNotice = new Paragraph("Teenage platypi are sometimes called Platydude[tte]s");
            var importantNoticeFont = FontFactory.GetFont("Courier", 13, BaseColor.RED);
            importantNotice.Font = importantNoticeFont;
            doc.Add(importantNotice);

            ListColumns lc;
            for (int i = 0; i < listOfListItems.Count; i++)
            {
                lc = listOfListItems[i];
                sb.AppendLine(String.Format(@"<p>Request date is {0}; Payee Name is {1}; Remit Address or Mail Stop is {2}; Last 4 of SSN or ITIN is {3}; 204 Submitted or on file is {4}; Requester Name is {5}; Dept or Div Name is {6}; Phone is {7}; Email is {8}</p>",
                    lc.li_requestDate, lc.li_payeeName, lc.li_remitAddressOrMailStop, lc.li_last4SSNDigitsOrITIN, lc.li_204SubmittedOrOnFile, lc.li_requesterName, lc.li_deptDivName, lc.li_phone, lc.li_email));
            }

            String htmlToRenderAsPDF = sb.ToString();

            //XMLWorker also reads from a TextReader and not directly from a string
            using (var srHtml = new StringReader(htmlToRenderAsPDF))
            {
                XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, srHtml);
            }

            doc.Close();
        }
    }
    try
    {
        var bytes = ms.ToArray();
        var testFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "iTextSharpTest.pdf");
        File.WriteAllBytes(testFile, bytes);
    }
    catch (Exception ex)
    {
        String exMsg = ex.Message;
        ; // what is "ex" here?
    }

Saya mengatur dua ukuran font (18 dan 13), dua warna (hitam dan merah), dua font ("Courier" dan "Times Roman") namun seluruh kerja keras saya di sini untuk fancification PDF tampaknya masih sia-sia (permintaan maaf kepada Vachel Lindsay dan Abraham Lincoln).


person B. Clay Shannon    schedule 08.04.2015    source sumber


Jawaban (1)


Anda harus menggunakan font saat membuat Paragraph:

Font f = new Font(FontFamily.COURIER);
Paragraph p = new Paragraph("text", f);
document.add(p);

Atau Anda harus menunggu untuk menambahkan konten hingga Anda menyetel fontnya:

Paragraph p = new Paragraph();
Font f = new Font(FontFamily.COURIER);
p.setFont(f);
p.addText("text");
document.add(p);

Dalam kode Anda, Anda memiliki sesuatu seperti ini:

Paragraph p = new Paragraph("text");
Font f = new Font(FontFamily.COURIER);
p.setFont(f);
document.add(p);

Saat mengatur font menggunakan setFont(), Anda mengatur font untuk teks yang akan ditambahkan ke paragraf, bukan untuk teks yang sudah tersimpan di paragraf.

Contohnya:

Paragraph p = new Paragraph("font 1 ");
p.setFont(new Font(FontFamily.COURIER);
p.add("font 2");
document.add(p);

Ini akan menambahkan teks font 1 dalam font default dan font 2 di Courier.

person Bruno Lowagie    schedule 08.04.2015
comment
Saya tidak mengerti maksud pertama Anda; dalam setiap kasus, saya membuat paragraf, lalu font, lalu menetapkan font ke paragraf, sebelum menambahkan paragraf ke dokumen. Jika saya mendeklarasikan dan tidak menggunakan sesuatu, saya akan mendapat peringatan tentang hal itu, saya cukup yakin. - person B. Clay Shannon; 08.04.2015
comment
Jika Anda tidak menambahkan konten ke Paragraph setelah mengatur font, Anda tidak benar-benar menggunakan font tersebut... - person Bruno Lowagie; 08.04.2015
comment
Sekarang saya melihat bahwa saya mengabaikan sesuatu dalam pertanyaan Anda. Saya akan memperbarui jawaban saya sesuai. - person Bruno Lowagie; 09.04.2015